diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2024-02-21 15:49:10 +0100 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2024-02-26 14:49:59 +0000 |
commit | 3f692e2f1743d58bf7af6312a9199a857fc7ddee (patch) | |
tree | a12033673b74d64ee1a7aa52ff5d83df5958a184 /src/plugins/cppeditor | |
parent | 48a8fa4c5df86807506a0faa20feec1abb19ffc0 (diff) |
CppEditor: Refactor CppCodeModelSettings
Preparation for per-project settings.
Change-Id: I78ecf0cde6150e40353c4aea6a98717d119f05c7
Reviewed-by: David Schulz <david.schulz@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Diffstat (limited to 'src/plugins/cppeditor')
5 files changed, 123 insertions, 209 deletions
diff --git a/src/plugins/cppeditor/baseeditordocumentprocessor.cpp b/src/plugins/cppeditor/baseeditordocumentprocessor.cpp index f48c5a710b..d7da8251ee 100644 --- a/src/plugins/cppeditor/baseeditordocumentprocessor.cpp +++ b/src/plugins/cppeditor/baseeditordocumentprocessor.cpp @@ -35,9 +35,9 @@ BaseEditorDocumentProcessor::~BaseEditorDocumentProcessor() = default; void BaseEditorDocumentProcessor::run(bool projectsUpdated) { - const Utils::Language languagePreference = codeModelSettings()->interpretAmbigiousHeadersAsCHeaders() - ? Utils::Language::C - : Utils::Language::Cxx; + const Utils::Language languagePreference = codeModelSettings()->interpretAmbigiousHeadersAsC() + ? Utils::Language::C + : Utils::Language::Cxx; runImpl({CppModelManager::workingCopy(), ProjectExplorer::ProjectManager::startupProject(), diff --git a/src/plugins/cppeditor/clangdiagnosticconfigsselectionwidget.cpp b/src/plugins/cppeditor/clangdiagnosticconfigsselectionwidget.cpp index 3a3ceacad4..8cdc803f46 100644 --- a/src/plugins/cppeditor/clangdiagnosticconfigsselectionwidget.cpp +++ b/src/plugins/cppeditor/clangdiagnosticconfigsselectionwidget.cpp @@ -90,11 +90,7 @@ void ClangDiagnosticConfigsSelectionWidget::onButtonClicked() connect(buttonsBox, &QDialogButtonBox::accepted, &dialog, &QDialog::accept); connect(buttonsBox, &QDialogButtonBox::rejected, &dialog, &QDialog::reject); - const bool previousEnableLowerClazyLevels = codeModelSettings()->enableLowerClazyLevels(); if (dialog.exec() == QDialog::Accepted) { - if (previousEnableLowerClazyLevels != codeModelSettings()->enableLowerClazyLevels()) - codeModelSettings()->toSettings(Core::ICore::settings()); - m_diagnosticConfigsModel = ClangDiagnosticConfigsModel(widget->configs()); m_currentConfigId = widget->currentConfig().id(); m_button->setText(widget->currentConfig().displayName()); diff --git a/src/plugins/cppeditor/cppcodemodelsettings.cpp b/src/plugins/cppeditor/cppcodemodelsettings.cpp index e06272084d..2c57490701 100644 --- a/src/plugins/cppeditor/cppcodemodelsettings.cpp +++ b/src/plugins/cppeditor/cppcodemodelsettings.cpp @@ -71,135 +71,98 @@ static FilePath fallbackClangdFilePath() return Environment::systemEnvironment().searchInPath("clangd"); } -void CppCodeModelSettings::fromSettings(QtcSettings *s) +bool operator==(const CppEditor::CppCodeModelSettings::Data &s1, + const CppEditor::CppCodeModelSettings::Data &s2) { - fromMap(storeFromSettings(Constants::CPPEDITOR_SETTINGSGROUP, s)); - emit changed(); + return s1.pchUsage == s2.pchUsage + && s1.interpretAmbigiousHeadersAsC == s2.interpretAmbigiousHeadersAsC + && s1.skipIndexingBigFiles == s2.skipIndexingBigFiles + && s1.useBuiltinPreprocessor == s2.useBuiltinPreprocessor + && s1.indexerFileSizeLimitInMb == s2.indexerFileSizeLimitInMb + && s1.enableLowerClazyLevels == s2.enableLowerClazyLevels + && s1.categorizeFindReferences == s2.categorizeFindReferences + && s1.ignoreFiles == s2.ignoreFiles && s1.ignorePattern == s2.ignorePattern; } -void CppCodeModelSettings::toSettings(QtcSettings *s) +Store CppCodeModelSettings::Data::toMap() const { - storeToSettings(Constants::CPPEDITOR_SETTINGSGROUP, s, toMap()); - emit changed(); // TODO: Why? -} - -Store CppCodeModelSettings::toMap() const -{ - const CppCodeModelSettings def; + const CppCodeModelSettings::Data def; Store store; store.insertValueWithDefault(enableLowerClazyLevelsKey(), - enableLowerClazyLevels(), - def.enableLowerClazyLevels()); - store.insertValueWithDefault(pchUsageKey(), pchUsage(), def.pchUsage()); + enableLowerClazyLevels, + def.enableLowerClazyLevels); + store.insertValueWithDefault(pchUsageKey(), pchUsage, def.pchUsage); store.insertValueWithDefault(interpretAmbiguousHeadersAsCHeadersKey(), - interpretAmbigiousHeadersAsCHeaders(), - def.interpretAmbigiousHeadersAsCHeaders()); + interpretAmbigiousHeadersAsC, + def.interpretAmbigiousHeadersAsC); store.insertValueWithDefault(skipIndexingBigFilesKey(), - skipIndexingBigFiles(), - def.skipIndexingBigFiles()); - store.insertValueWithDefault(ignoreFilesKey(), ignoreFiles(), def.ignoreFiles()); - store.insertValueWithDefault(ignorePatternKey(), ignorePattern(), def.ignorePattern()); + skipIndexingBigFiles, + def.skipIndexingBigFiles); + store.insertValueWithDefault(ignoreFilesKey(), ignoreFiles, def.ignoreFiles); + store.insertValueWithDefault(ignorePatternKey(), ignorePattern, def.ignorePattern); store.insertValueWithDefault(useBuiltinPreprocessorKey(), - useBuiltinPreprocessor(), - def.useBuiltinPreprocessor()); + useBuiltinPreprocessor, + def.useBuiltinPreprocessor); store.insertValueWithDefault(indexerFileSizeLimitKey(), - indexerFileSizeLimitInMb(), - def.indexerFileSizeLimitInMb()); + indexerFileSizeLimitInMb, + def.indexerFileSizeLimitInMb); return store; } -void CppCodeModelSettings::fromMap(const Utils::Store &store) -{ - const CppCodeModelSettings def; - setEnableLowerClazyLevels( - store.value(enableLowerClazyLevelsKey(), def.enableLowerClazyLevels()).toBool()); - setPCHUsage(static_cast<PCHUsage>(store.value(pchUsageKey(), def.pchUsage()).toInt())); - setInterpretAmbigiousHeadersAsCHeaders(store - .value(interpretAmbiguousHeadersAsCHeadersKey(), - def.interpretAmbigiousHeadersAsCHeaders()) - .toBool()); - setSkipIndexingBigFiles( - store.value(skipIndexingBigFilesKey(), def.skipIndexingBigFiles()).toBool()); - setIgnoreFiles(store.value(ignoreFilesKey(), def.ignoreFiles()).toBool()); - setIgnorePattern(store.value(ignorePatternKey(), def.ignorePattern()).toString()); - setUseBuiltinPreprocessor( - store.value(useBuiltinPreprocessorKey(), def.useBuiltinPreprocessor()).toBool()); - setIndexerFileSizeLimitInMb( - store.value(indexerFileSizeLimitKey(), def.indexerFileSizeLimitInMb()).toInt()); -} - -CppCodeModelSettings::PCHUsage CppCodeModelSettings::pchUsage() const -{ - return m_pchUsage; -} - -void CppCodeModelSettings::setPCHUsage(CppCodeModelSettings::PCHUsage pchUsage) -{ - m_pchUsage = pchUsage; -} - -bool CppCodeModelSettings::interpretAmbigiousHeadersAsCHeaders() const -{ - return m_interpretAmbigiousHeadersAsCHeaders; -} - -void CppCodeModelSettings::setInterpretAmbigiousHeadersAsCHeaders(bool yesno) -{ - m_interpretAmbigiousHeadersAsCHeaders = yesno; -} - -bool CppCodeModelSettings::skipIndexingBigFiles() const +void CppCodeModelSettings::Data::fromMap(const Utils::Store &store) { - return m_skipIndexingBigFiles; + const CppCodeModelSettings::Data def; + enableLowerClazyLevels + = store.value(enableLowerClazyLevelsKey(), def.enableLowerClazyLevels).toBool(); + pchUsage = static_cast<PCHUsage>(store.value(pchUsageKey(), def.pchUsage).toInt()); + interpretAmbigiousHeadersAsC = store + .value(interpretAmbiguousHeadersAsCHeadersKey(), + def.interpretAmbigiousHeadersAsC) + .toBool(); + skipIndexingBigFiles = store.value(skipIndexingBigFilesKey(), def.skipIndexingBigFiles).toBool(); + ignoreFiles = store.value(ignoreFilesKey(), def.ignoreFiles).toBool(); + ignorePattern = store.value(ignorePatternKey(), def.ignorePattern).toString(); + useBuiltinPreprocessor + = store.value(useBuiltinPreprocessorKey(), def.useBuiltinPreprocessor).toBool(); + indexerFileSizeLimitInMb + = store.value(indexerFileSizeLimitKey(), def.indexerFileSizeLimitInMb).toInt(); } -void CppCodeModelSettings::setSkipIndexingBigFiles(bool yesno) -{ - m_skipIndexingBigFiles = yesno; -} - -int CppCodeModelSettings::indexerFileSizeLimitInMb() const -{ - return m_indexerFileSizeLimitInMB; -} - -void CppCodeModelSettings::setIndexerFileSizeLimitInMb(int sizeInMB) -{ - m_indexerFileSizeLimitInMB = sizeInMB; -} - -bool CppCodeModelSettings::ignoreFiles() const -{ - return m_ignoreFiles; -} - -void CppCodeModelSettings::setIgnoreFiles(bool ignoreFiles) +void CppCodeModelSettings::fromSettings(QtcSettings *s) { - m_ignoreFiles = ignoreFiles; + m_data.fromMap(storeFromSettings(Constants::CPPEDITOR_SETTINGSGROUP, s)); + emit changed(); } -QString CppCodeModelSettings::ignorePattern() const +void CppCodeModelSettings::toSettings(QtcSettings *s) { - return m_ignorePattern; + storeToSettings(Constants::CPPEDITOR_SETTINGSGROUP, s, m_data.toMap()); + emit changed(); // TODO: Why? } -void CppCodeModelSettings::setIgnorePattern(const QString& ignorePattern) +void CppCodeModelSettings::setData(const Data &data) { - m_ignorePattern = ignorePattern; + if (m_data != data) { + m_data = data; + toSettings(Core::ICore::settings()); + emit changed(); + } } - -bool CppCodeModelSettings::enableLowerClazyLevels() const +void CppCodeModelSettings::setEnableLowerClazyLevels(bool enable) { - return m_enableLowerClazyLevels; + Data d = data(); + d.enableLowerClazyLevels = enable; + setData(d); } -void CppCodeModelSettings::setEnableLowerClazyLevels(bool yesno) +void CppCodeModelSettings::setCategorizeFindReferences(bool categorize) { - m_enableLowerClazyLevels = yesno; + Data d = data(); + d.categorizeFindReferences = categorize; + setData(d); } - QString ClangdSettings::priorityToString(const IndexingPriority &priority) { switch (priority) { diff --git a/src/plugins/cppeditor/cppcodemodelsettings.h b/src/plugins/cppeditor/cppcodemodelsettings.h index fbca534c38..c81fbda6f0 100644 --- a/src/plugins/cppeditor/cppcodemodelsettings.h +++ b/src/plugins/cppeditor/cppcodemodelsettings.h @@ -34,54 +34,56 @@ public: PchUse_BuildSystem = 2 }; - CppCodeModelSettings(Utils::QtcSettings *s) { fromSettings(s); } - - void toSettings(Utils::QtcSettings *s); - - bool enableLowerClazyLevels() const; - void setEnableLowerClazyLevels(bool yesno); + class Data + { + public: + Utils::Store toMap() const; + void fromMap(const Utils::Store &store); - PCHUsage pchUsage() const; - void setPCHUsage(PCHUsage pchUsage); + friend bool operator==(const Data &s1, const Data &s2); + friend bool operator!=(const Data &s1, const Data &s2) { return !(s1 == s2); } - bool interpretAmbigiousHeadersAsCHeaders() const; - void setInterpretAmbigiousHeadersAsCHeaders(bool yesno); + PCHUsage pchUsage = PchUse_BuildSystem; + bool interpretAmbigiousHeadersAsC = false; + bool skipIndexingBigFiles = true; + bool useBuiltinPreprocessor = true; + int indexerFileSizeLimitInMb = 5; + bool enableLowerClazyLevels = true; // For UI behavior only + bool categorizeFindReferences = false; // Ephemeral! + bool ignoreFiles = false; + QString ignorePattern; + }; - bool skipIndexingBigFiles() const; - void setSkipIndexingBigFiles(bool yesno); + CppCodeModelSettings(Utils::QtcSettings *s) { fromSettings(s); } - bool useBuiltinPreprocessor() const { return m_useBuiltinPreprocessor; } - void setUseBuiltinPreprocessor(bool useBuiltin) { m_useBuiltinPreprocessor = useBuiltin; } + void setData(const Data &data); + Data data() const { return m_data; } - int indexerFileSizeLimitInMb() const; - void setIndexerFileSizeLimitInMb(int sizeInMB); + bool enableLowerClazyLevels() const { return m_data.enableLowerClazyLevels; } + PCHUsage pchUsage() const { return m_data.pchUsage; } + bool interpretAmbigiousHeadersAsC() const { return m_data.interpretAmbigiousHeadersAsC; } + bool skipIndexingBigFiles() const { return m_data.skipIndexingBigFiles; } + bool useBuiltinPreprocessor() const { return m_data.useBuiltinPreprocessor; } + int indexerFileSizeLimitInMb() const { return m_data.indexerFileSizeLimitInMb; } + bool categorizeFindReferences() const { return m_data.categorizeFindReferences; } + bool ignoreFiles() const { return m_data.ignoreFiles; } + QString ignorePattern() const { return m_data.ignorePattern; } - void setCategorizeFindReferences(bool categorize) { m_categorizeFindReferences = categorize; } - bool categorizeFindReferences() const { return m_categorizeFindReferences; } + // FIXME: Doesn't belong here. + void setEnableLowerClazyLevels(bool enable); - bool ignoreFiles() const; - void setIgnoreFiles(bool ignoreFiles); - QString ignorePattern() const; - void setIgnorePattern(const QString& ignorePattern); + void setCategorizeFindReferences(bool categorize); signals: void changed(); private: CppCodeModelSettings() = default; + + void toSettings(Utils::QtcSettings *s); void fromSettings(Utils::QtcSettings *s); - Utils::Store toMap() const; - void fromMap(const Utils::Store &store); - - PCHUsage m_pchUsage = PchUse_BuildSystem; - bool m_interpretAmbigiousHeadersAsCHeaders = false; - bool m_skipIndexingBigFiles = true; - bool m_useBuiltinPreprocessor = true; - int m_indexerFileSizeLimitInMB = 5; - bool m_enableLowerClazyLevels = true; // For UI behavior only - bool m_categorizeFindReferences = false; // Ephemeral! - bool m_ignoreFiles = false; - QString m_ignorePattern; + + Data m_data; }; class CPPEDITOR_EXPORT ClangdSettings : public QObject diff --git a/src/plugins/cppeditor/cppcodemodelsettingspage.cpp b/src/plugins/cppeditor/cppcodemodelsettingspage.cpp index b4a19ccaae..b267b66242 100644 --- a/src/plugins/cppeditor/cppcodemodelsettingspage.cpp +++ b/src/plugins/cppeditor/cppcodemodelsettingspage.cpp @@ -51,14 +51,13 @@ namespace CppEditor::Internal { class CppCodeModelSettingsWidget final : public Core::IOptionsPageWidget { public: - CppCodeModelSettingsWidget(); + CppCodeModelSettingsWidget(const CppCodeModelSettings::Data &data); private: - void apply() final; + void apply() final { codeModelSettings()->setData(data()); } - bool applyGeneralWidgetsToSettings() const; + CppCodeModelSettings::Data data() const; - CppCodeModelSettings *m_settings = nullptr; QCheckBox *m_interpretAmbiguousHeadersAsCHeaders; QCheckBox *m_ignorePchCheckBox; QCheckBox *m_useBuiltinPreprocessorCheckBox; @@ -68,19 +67,18 @@ private: QPlainTextEdit *m_ignorePatternTextEdit; }; -CppCodeModelSettingsWidget::CppCodeModelSettingsWidget() - : m_settings(&cppCodeModelSettings()) +CppCodeModelSettingsWidget::CppCodeModelSettingsWidget(const CppCodeModelSettings::Data &data) { m_interpretAmbiguousHeadersAsCHeaders = new QCheckBox(Tr::tr("Interpret ambiguous headers as C headers")); m_skipIndexingBigFilesCheckBox = new QCheckBox(Tr::tr("Do not index files greater than")); - m_skipIndexingBigFilesCheckBox->setChecked(m_settings->skipIndexingBigFiles()); + m_skipIndexingBigFilesCheckBox->setChecked(data.skipIndexingBigFiles); m_bigFilesLimitSpinBox = new QSpinBox; m_bigFilesLimitSpinBox->setSuffix(Tr::tr("MB")); m_bigFilesLimitSpinBox->setRange(1, 500); - m_bigFilesLimitSpinBox->setValue(m_settings->indexerFileSizeLimitInMb()); + m_bigFilesLimitSpinBox->setValue(data.indexerFileSizeLimitInMb); m_ignoreFilesCheckBox = new QCheckBox(Tr::tr("Ignore files")); m_ignoreFilesCheckBox->setToolTip( @@ -88,8 +86,8 @@ CppCodeModelSettingsWidget::CppCodeModelSettingsWidget() + Tr::tr("Ignore files that match these wildcard patterns, one wildcard per line.") + "</p></body></html>"); - m_ignoreFilesCheckBox->setChecked(m_settings->ignoreFiles()); - m_ignorePatternTextEdit = new QPlainTextEdit(m_settings->ignorePattern()); + m_ignoreFilesCheckBox->setChecked(data.ignoreFiles); + m_ignorePatternTextEdit = new QPlainTextEdit(data.ignorePattern); m_ignorePatternTextEdit->setToolTip(m_ignoreFilesCheckBox->toolTip()); m_ignorePatternTextEdit->setEnabled(m_ignoreFilesCheckBox->isChecked()); @@ -109,11 +107,9 @@ CppCodeModelSettingsWidget::CppCodeModelSettingsWidget() (Tr::tr("Uncheck this to invoke the actual compiler " "to show a pre-processed source file in the editor.")); - m_interpretAmbiguousHeadersAsCHeaders->setChecked( - m_settings->interpretAmbigiousHeadersAsCHeaders()); - - m_ignorePchCheckBox->setChecked(m_settings->pchUsage() == CppCodeModelSettings::PchUse_None); - m_useBuiltinPreprocessorCheckBox->setChecked(m_settings->useBuiltinPreprocessor()); + m_interpretAmbiguousHeadersAsCHeaders->setChecked(data.interpretAmbigiousHeadersAsC); + m_ignorePchCheckBox->setChecked(data.pchUsage == CppCodeModelSettings::PchUse_None); + m_useBuiltinPreprocessorCheckBox->setChecked(data.useBuiltinPreprocessor); using namespace Layouting; @@ -132,61 +128,18 @@ CppCodeModelSettingsWidget::CppCodeModelSettingsWidget() }.attachTo(this); } -void CppCodeModelSettingsWidget::apply() -{ - if (applyGeneralWidgetsToSettings()) - m_settings->toSettings(Core::ICore::settings()); -} - -bool CppCodeModelSettingsWidget::applyGeneralWidgetsToSettings() const +CppCodeModelSettings::Data CppCodeModelSettingsWidget::data() const { - bool settingsChanged = false; - - const bool newInterpretAmbiguousHeaderAsCHeaders - = m_interpretAmbiguousHeadersAsCHeaders->isChecked(); - if (m_settings->interpretAmbigiousHeadersAsCHeaders() - != newInterpretAmbiguousHeaderAsCHeaders) { - m_settings->setInterpretAmbigiousHeadersAsCHeaders(newInterpretAmbiguousHeaderAsCHeaders); - settingsChanged = true; - } - - const bool newSkipIndexingBigFiles = m_skipIndexingBigFilesCheckBox->isChecked(); - if (m_settings->skipIndexingBigFiles() != newSkipIndexingBigFiles) { - m_settings->setSkipIndexingBigFiles(newSkipIndexingBigFiles); - settingsChanged = true; - } - const bool newUseBuiltinPreprocessor = m_useBuiltinPreprocessorCheckBox->isChecked(); - if (m_settings->useBuiltinPreprocessor() != newUseBuiltinPreprocessor) { - m_settings->setUseBuiltinPreprocessor(newUseBuiltinPreprocessor); - settingsChanged = true; - } - const bool ignoreFiles = m_ignoreFilesCheckBox->isChecked(); - if (m_settings->ignoreFiles() != ignoreFiles) { - m_settings->setIgnoreFiles(ignoreFiles); - settingsChanged = true; - } - const QString ignorePattern = m_ignorePatternTextEdit->toPlainText(); - if (m_settings->ignorePattern() != ignorePattern) { - m_settings->setIgnorePattern(ignorePattern); - settingsChanged = true; - } - const int newFileSizeLimit = m_bigFilesLimitSpinBox->value(); - if (m_settings->indexerFileSizeLimitInMb() != newFileSizeLimit) { - m_settings->setIndexerFileSizeLimitInMb(newFileSizeLimit); - settingsChanged = true; - } - - const bool newIgnorePch = m_ignorePchCheckBox->isChecked(); - const bool previousIgnorePch = m_settings->pchUsage() == CppCodeModelSettings::PchUse_None; - if (newIgnorePch != previousIgnorePch) { - const CppCodeModelSettings::PCHUsage pchUsage = m_ignorePchCheckBox->isChecked() - ? CppCodeModelSettings::PchUse_None - : CppCodeModelSettings::PchUse_BuildSystem; - m_settings->setPCHUsage(pchUsage); - settingsChanged = true; - } - - return settingsChanged; + CppCodeModelSettings::Data data; + data.interpretAmbigiousHeadersAsC = m_interpretAmbiguousHeadersAsCHeaders->isChecked(); + data.skipIndexingBigFiles = m_skipIndexingBigFilesCheckBox->isChecked(); + data.useBuiltinPreprocessor = m_useBuiltinPreprocessorCheckBox->isChecked(); + data.ignoreFiles = m_ignoreFilesCheckBox->isChecked(); + data.ignorePattern = m_ignorePatternTextEdit->toPlainText(); + data.indexerFileSizeLimitInMb = m_bigFilesLimitSpinBox->value(); + data.pchUsage = m_ignorePchCheckBox->isChecked() ? CppCodeModelSettings::PchUse_None + : CppCodeModelSettings::PchUse_BuildSystem; + return data; } class CppCodeModelSettingsPage final : public Core::IOptionsPage @@ -199,7 +152,7 @@ public: setCategory(Constants::CPP_SETTINGS_CATEGORY); setDisplayCategory(Tr::tr("C++")); setCategoryIconPath(":/projectexplorer/images/settingscategory_cpp.png"); - setWidgetCreator([] { return new CppCodeModelSettingsWidget; }); + setWidgetCreator([] { return new CppCodeModelSettingsWidget(codeModelSettings()->data()); }); } }; |