forked from qt-creator/qt-creator
Clangd: Handle settings changes
Users no longer have to re-load a project for settings changes to take effect. Change-Id: I86dccccac14a30514c8dac292c7765ee4806f6ba Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
@@ -303,18 +303,6 @@ void CppCodeModelSettings::setEnableLowerClazyLevels(bool yesno)
|
||||
}
|
||||
|
||||
|
||||
static bool operator==(const ClangdSettings::Data &s1, const ClangdSettings::Data &s2)
|
||||
{
|
||||
return s1.useClangd == s2.useClangd
|
||||
&& s1.executableFilePath == s2.executableFilePath
|
||||
&& s1.workerThreadLimit == s2.workerThreadLimit
|
||||
&& s1.enableIndexing == s2.enableIndexing;
|
||||
}
|
||||
static bool operator!=(const ClangdSettings::Data &s1, const ClangdSettings::Data &s2)
|
||||
{
|
||||
return !(s1 == s2);
|
||||
}
|
||||
|
||||
ClangdSettings &ClangdSettings::instance()
|
||||
{
|
||||
static ClangdSettings settings;
|
||||
@@ -338,6 +326,7 @@ void ClangdSettings::setData(const Data &data)
|
||||
if (this == &instance() && data != m_data) {
|
||||
m_data = data;
|
||||
saveSettings();
|
||||
emit changed();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -364,23 +353,25 @@ ClangdProjectSettings::ClangdProjectSettings(ProjectExplorer::Project *project)
|
||||
loadSettings();
|
||||
}
|
||||
|
||||
ClangdSettings ClangdProjectSettings::settings() const
|
||||
ClangdSettings::Data ClangdProjectSettings::settings() const
|
||||
{
|
||||
if (m_useGlobalSettings)
|
||||
return ClangdSettings::instance();
|
||||
return ClangdSettings(m_customSettings);
|
||||
return ClangdSettings::instance().data();
|
||||
return m_customSettings;
|
||||
}
|
||||
|
||||
void ClangdProjectSettings::setSettings(const ClangdSettings::Data &data)
|
||||
{
|
||||
m_customSettings = data;
|
||||
saveSettings();
|
||||
emit ClangdSettings::instance().changed();
|
||||
}
|
||||
|
||||
void ClangdProjectSettings::setUseGlobalSettings(bool useGlobal)
|
||||
{
|
||||
m_useGlobalSettings = useGlobal;
|
||||
saveSettings();
|
||||
emit ClangdSettings::instance().changed();
|
||||
}
|
||||
|
||||
void ClangdProjectSettings::loadSettings()
|
||||
|
||||
@@ -98,10 +98,11 @@ private:
|
||||
bool m_categorizeFindReferences = false; // Ephemeral!
|
||||
};
|
||||
|
||||
class CPPTOOLS_EXPORT ClangdSettings
|
||||
class CPPTOOLS_EXPORT ClangdSettings : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
class Data
|
||||
class CPPTOOLS_EXPORT Data
|
||||
{
|
||||
public:
|
||||
QVariantMap toMap() const;
|
||||
@@ -131,6 +132,9 @@ public:
|
||||
static void setClangdFilePath(const Utils::FilePath &filePath);
|
||||
#endif
|
||||
|
||||
signals:
|
||||
void changed();
|
||||
|
||||
private:
|
||||
ClangdSettings() { loadSettings(); }
|
||||
|
||||
@@ -140,12 +144,24 @@ private:
|
||||
Data m_data;
|
||||
};
|
||||
|
||||
inline bool operator==(const ClangdSettings::Data &s1, const ClangdSettings::Data &s2)
|
||||
{
|
||||
return s1.useClangd == s2.useClangd
|
||||
&& s1.executableFilePath == s2.executableFilePath
|
||||
&& s1.workerThreadLimit == s2.workerThreadLimit
|
||||
&& s1.enableIndexing == s2.enableIndexing;
|
||||
}
|
||||
inline bool operator!=(const ClangdSettings::Data &s1, const ClangdSettings::Data &s2)
|
||||
{
|
||||
return !(s1 == s2);
|
||||
}
|
||||
|
||||
class CPPTOOLS_EXPORT ClangdProjectSettings
|
||||
{
|
||||
public:
|
||||
ClangdProjectSettings(ProjectExplorer::Project *project);
|
||||
|
||||
ClangdSettings settings() const;
|
||||
ClangdSettings::Data settings() const;
|
||||
void setSettings(const ClangdSettings::Data &data);
|
||||
bool useGlobalSettings() const { return m_useGlobalSettings; }
|
||||
void setUseGlobalSettings(bool useGlobal);
|
||||
|
||||
@@ -200,12 +200,12 @@ public:
|
||||
Utils::PathChooser clangdChooser;
|
||||
};
|
||||
|
||||
ClangdSettingsWidget::ClangdSettingsWidget(const ClangdSettings &settings) : d(new Private)
|
||||
ClangdSettingsWidget::ClangdSettingsWidget(const ClangdSettings::Data &settingsData)
|
||||
: d(new Private)
|
||||
{
|
||||
const ClangdSettings settings(settingsData);
|
||||
d->useClangdCheckBox.setText(tr("Use clangd (EXPERIMENTAL)"));
|
||||
d->useClangdCheckBox.setChecked(settings.useClangd());
|
||||
d->useClangdCheckBox.setToolTip(tr("Changing this option does not affect projects "
|
||||
"that are already open."));
|
||||
d->clangdChooser.setExpectedKind(Utils::PathChooser::ExistingCommand);
|
||||
d->clangdChooser.setFilePath(settings.clangdFilePath());
|
||||
d->clangdChooser.setEnabled(d->useClangdCheckBox.isChecked());
|
||||
@@ -273,9 +273,8 @@ class ClangdSettingsPageWidget final : public Core::IOptionsPageWidget
|
||||
Q_DECLARE_TR_FUNCTIONS(CppTools::Internal::ClangdSettingsWidget)
|
||||
|
||||
public:
|
||||
ClangdSettingsPageWidget() : m_widget(ClangdSettings::instance())
|
||||
ClangdSettingsPageWidget() : m_widget(ClangdSettings::instance().data())
|
||||
{
|
||||
|
||||
const auto layout = new QVBoxLayout(this);
|
||||
layout->addWidget(&m_widget);
|
||||
}
|
||||
|
||||
@@ -49,7 +49,7 @@ class ClangdSettingsWidget : public QWidget
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
ClangdSettingsWidget(const ClangdSettings &settings);
|
||||
ClangdSettingsWidget(const ClangdSettings::Data &settingsData);
|
||||
~ClangdSettingsWidget();
|
||||
|
||||
ClangdSettings::Data settingsData() const;
|
||||
|
||||
Reference in New Issue
Block a user