summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/cppcodemodelsettings.cpp
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2021-06-25 16:50:52 +0200
committerChristian Kandeler <christian.kandeler@qt.io>2021-06-28 10:34:24 +0000
commitba138a185534269f6a6f32088965b12cbb898337 (patch)
tree9a29aa1877502f61e089cc263755a45c83e4f056 /src/plugins/cpptools/cppcodemodelsettings.cpp
parentcd20ad8ff433acdf1629580e4700c2e9e394a962 (diff)
downloadqt-creator-ba138a185534269f6a6f32088965b12cbb898337.tar.gz
CppTools: Add dedicated settings and settings page for clangd
We plan to add more clangd settings, and it makes sense to have a dedicated place for them both in the code and the UI. Change-Id: Ideb92935b7a5a6a98e07980f4011736fb82042d1 Reviewed-by: David Schulz <david.schulz@qt.io>
Diffstat (limited to 'src/plugins/cpptools/cppcodemodelsettings.cpp')
-rw-r--r--src/plugins/cpptools/cppcodemodelsettings.cpp61
1 files changed, 52 insertions, 9 deletions
diff --git a/src/plugins/cpptools/cppcodemodelsettings.cpp b/src/plugins/cpptools/cppcodemodelsettings.cpp
index 5c5113d004..aa09d40918 100644
--- a/src/plugins/cpptools/cppcodemodelsettings.cpp
+++ b/src/plugins/cpptools/cppcodemodelsettings.cpp
@@ -29,6 +29,8 @@
#include "cpptoolsconstants.h"
#include "cpptoolsreuse.h"
+#include <coreplugin/icore.h>
+
#include <utils/algorithm.h>
#include <utils/qtcassert.h>
@@ -172,9 +174,6 @@ void CppCodeModelSettings::fromSettings(QSettings *s)
const QVariant indexerFileSizeLimit = s->value(indexerFileSizeLimitKey(), 5);
setIndexerFileSizeLimitInMb(indexerFileSizeLimit.toInt());
- setUseClangd(s->value(useClangdKey(), false).toBool());
- setClangdFilePath(FilePath::fromString(s->value(clangdPathKey()).toString()));
-
s->endGroup();
if (write)
@@ -198,8 +197,6 @@ void CppCodeModelSettings::toSettings(QSettings *s)
s->setValue(interpretAmbiguousHeadersAsCHeadersKey(), interpretAmbigiousHeadersAsCHeaders());
s->setValue(skipIndexingBigFilesKey(), skipIndexingBigFiles());
s->setValue(indexerFileSizeLimitKey(), indexerFileSizeLimitInMb());
- s->setValue(useClangdKey(), useClangd());
- s->setValue(clangdPathKey(), m_clangdFilePath.toString());
s->endGroup();
@@ -300,14 +297,60 @@ void CppCodeModelSettings::setEnableLowerClazyLevels(bool yesno)
m_enableLowerClazyLevels = yesno;
}
-void CppCodeModelSettings::setDefaultClangdPath(const Utils::FilePath &filePath)
+
+static bool operator==(const ClangdSettings::Data &s1, const ClangdSettings::Data &s2)
+{
+ return s1.useClangd == s2.useClangd && s1.executableFilePath == s2.executableFilePath;
+}
+static bool operator!=(const ClangdSettings::Data &s1, const ClangdSettings::Data &s2)
+{
+ return !(s1 == s2);
+}
+
+ClangdSettings &ClangdSettings::instance()
+{
+ static ClangdSettings settings;
+ return settings;
+}
+
+void ClangdSettings::setDefaultClangdPath(const Utils::FilePath &filePath)
{
g_defaultClangdFilePath = filePath;
}
-FilePath CppCodeModelSettings::clangdFilePath() const
+FilePath ClangdSettings::clangdFilePath()
{
- if (!m_clangdFilePath.isEmpty())
- return m_clangdFilePath;
+ if (!instance().m_data.executableFilePath.isEmpty())
+ return instance().m_data.executableFilePath;
return fallbackClangdFilePath();
}
+
+void ClangdSettings::setData(const Data &data)
+{
+ if (data != instance().m_data) {
+ instance().m_data = data;
+ instance().saveSettings();
+ }
+}
+
+void ClangdSettings::loadSettings()
+{
+ QSettings * const s = Core::ICore::settings();
+ m_data.useClangd = s->value(useClangdKey(), false).toBool();
+ m_data.executableFilePath = FilePath::fromString(s->value(clangdPathKey()).toString());
+}
+
+void ClangdSettings::saveSettings()
+{
+ QSettings * const s = Core::ICore::settings();
+ s->setValue(useClangdKey(), useClangd());
+ s->setValue(clangdPathKey(), m_data.executableFilePath.toString());
+}
+
+#ifdef WITH_TESTS
+void ClangdSettings::setUseClangd(bool use) { instance().m_data.useClangd = use; }
+void ClangdSettings::setClangdFilePath(const Utils::FilePath &filePath)
+{
+ instance().m_data.executableFilePath = filePath;
+}
+#endif