diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2022-05-19 14:48:09 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2022-05-23 12:15:40 +0000 |
commit | 760cf632afddbdbc6cf1ded0655e8286ccbffd1f (patch) | |
tree | 3fe249471dd30a39c035e14f748e94f81004c46e /src/plugins/cppeditor | |
parent | c117e3d3c9b5742148a0d0f3ed975705bbdb9118 (diff) |
Move clang diagnostics config settings to clangd settings page
It was confusing to have both "Clang Code Model" and "clangd" project
settings pages, so we merge them.
Along the way, a lot of code dropped off.
Change-Id: I780850b716195c3729403ae59f0794c11b5c556d
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: David Schulz <david.schulz@qt.io>
Diffstat (limited to 'src/plugins/cppeditor')
10 files changed, 120 insertions, 287 deletions
diff --git a/src/plugins/cppeditor/clangdiagnosticconfigsmodel.cpp b/src/plugins/cppeditor/clangdiagnosticconfigsmodel.cpp index c3794099b5..ead0ef97c9 100644 --- a/src/plugins/cppeditor/clangdiagnosticconfigsmodel.cpp +++ b/src/plugins/cppeditor/clangdiagnosticconfigsmodel.cpp @@ -87,23 +87,6 @@ const ClangDiagnosticConfig &ClangDiagnosticConfigsModel::configWithId(const Uti return m_diagnosticConfigs.at(indexOfConfig(id)); } -QVector<Utils::Id> ClangDiagnosticConfigsModel::changedOrRemovedConfigs( - const ClangDiagnosticConfigs &oldConfigs, const ClangDiagnosticConfigs &newConfigs) -{ - ClangDiagnosticConfigsModel newConfigsModel(newConfigs); - QVector<Utils::Id> changedConfigs; - - for (const ClangDiagnosticConfig &old: oldConfigs) { - const int i = newConfigsModel.indexOfConfig(old.id()); - if (i == -1) - changedConfigs.append(old.id()); // Removed - else if (newConfigsModel.allConfigs().value(i) != old) - changedConfigs.append(old.id()); // Changed - } - - return changedConfigs; -} - ClangDiagnosticConfig ClangDiagnosticConfigsModel::createCustomConfig( const ClangDiagnosticConfig &baseConfig, const QString &displayName) { diff --git a/src/plugins/cppeditor/clangdiagnosticconfigsmodel.h b/src/plugins/cppeditor/clangdiagnosticconfigsmodel.h index edc4b164d3..d4b2584d46 100644 --- a/src/plugins/cppeditor/clangdiagnosticconfigsmodel.h +++ b/src/plugins/cppeditor/clangdiagnosticconfigsmodel.h @@ -52,8 +52,6 @@ public: const ClangDiagnosticConfig &configWithId(const Utils::Id &id) const; int indexOfConfig(const Utils::Id &id) const; - static QVector<Utils::Id> changedOrRemovedConfigs(const ClangDiagnosticConfigs &oldConfigs, - const ClangDiagnosticConfigs &newConfigs); static ClangDiagnosticConfig createCustomConfig(const ClangDiagnosticConfig &baseConfig, const QString &displayName); static QStringList globalDiagnosticOptions(); diff --git a/src/plugins/cppeditor/clangdiagnosticconfigsselectionwidget.cpp b/src/plugins/cppeditor/clangdiagnosticconfigsselectionwidget.cpp index a1de9d125d..25d438f795 100644 --- a/src/plugins/cppeditor/clangdiagnosticconfigsselectionwidget.cpp +++ b/src/plugins/cppeditor/clangdiagnosticconfigsselectionwidget.cpp @@ -33,6 +33,7 @@ #include <QDialog> #include <QDialogButtonBox> +#include <QFormLayout> #include <QHBoxLayout> #include <QLabel> #include <QPushButton> @@ -41,20 +42,15 @@ namespace CppEditor { ClangDiagnosticConfigsSelectionWidget::ClangDiagnosticConfigsSelectionWidget(QWidget *parent) : QWidget(parent) - , m_label(new QLabel(tr("Diagnostic configuration:"))) - , m_button(new QPushButton) { - auto *layout = new QHBoxLayout(this); - layout->setContentsMargins(0, 0, 0, 0); - setLayout(layout); - layout->addWidget(m_label); - layout->addWidget(m_button, 1); - layout->addStretch(); + setUpUi(true); +} - connect(m_button, - &QPushButton::clicked, - this, - &ClangDiagnosticConfigsSelectionWidget::onButtonClicked); +ClangDiagnosticConfigsSelectionWidget::ClangDiagnosticConfigsSelectionWidget( + QFormLayout *parentLayout) +{ + setUpUi(false); + parentLayout->addRow(label(), this); } void ClangDiagnosticConfigsSelectionWidget::refresh(const ClangDiagnosticConfigsModel &model, @@ -79,6 +75,25 @@ ClangDiagnosticConfigs ClangDiagnosticConfigsSelectionWidget::customConfigs() co return m_diagnosticConfigsModel.customConfigs(); } +QString ClangDiagnosticConfigsSelectionWidget::label() const +{ + return tr("Diagnostic configuration:"); +} + +void ClangDiagnosticConfigsSelectionWidget::setUpUi(bool withLabel) +{ + m_button = new QPushButton; + const auto layout = new QHBoxLayout(this); + layout->setContentsMargins(0, 0, 0, 0); + if (withLabel) + layout->addWidget(new QLabel(label())); + layout->addWidget(m_button); + layout->addStretch(); + + connect(m_button, &QPushButton::clicked, + this, &ClangDiagnosticConfigsSelectionWidget::onButtonClicked); +} + void ClangDiagnosticConfigsSelectionWidget::onButtonClicked() { ClangDiagnosticConfigsWidget *widget = m_createEditWidget(m_diagnosticConfigsModel.allConfigs(), diff --git a/src/plugins/cppeditor/clangdiagnosticconfigsselectionwidget.h b/src/plugins/cppeditor/clangdiagnosticconfigsselectionwidget.h index 10fdd76039..e18006c890 100644 --- a/src/plugins/cppeditor/clangdiagnosticconfigsselectionwidget.h +++ b/src/plugins/cppeditor/clangdiagnosticconfigsselectionwidget.h @@ -34,7 +34,7 @@ #include <functional> QT_BEGIN_NAMESPACE -class QLabel; +class QFormLayout; class QPushButton; QT_END_NAMESPACE @@ -48,6 +48,7 @@ class CPPEDITOR_EXPORT ClangDiagnosticConfigsSelectionWidget : public QWidget public: explicit ClangDiagnosticConfigsSelectionWidget(QWidget *parent = nullptr); + explicit ClangDiagnosticConfigsSelectionWidget(QFormLayout *parentLayout); using CreateEditWidget = std::function<ClangDiagnosticConfigsWidget *(const ClangDiagnosticConfigs &configs, @@ -64,13 +65,14 @@ signals: void changed(); private: + QString label() const; + void setUpUi(bool withLabel); void onButtonClicked(); ClangDiagnosticConfigsModel m_diagnosticConfigsModel; Utils::Id m_currentConfigId; bool m_showTidyClazyUi = true; - QLabel *m_label = nullptr; QPushButton *m_button = nullptr; CreateEditWidget m_createEditWidget; diff --git a/src/plugins/cppeditor/clangdiagnosticconfigswidget.cpp b/src/plugins/cppeditor/clangdiagnosticconfigswidget.cpp index bf70ba4bb6..7e17171d5d 100644 --- a/src/plugins/cppeditor/clangdiagnosticconfigswidget.cpp +++ b/src/plugins/cppeditor/clangdiagnosticconfigswidget.cpp @@ -25,7 +25,7 @@ #include "clangdiagnosticconfigswidget.h" -#include "cppcodemodelsettings.h" +#include "clangdiagnosticconfigsmodel.h" #include "ui_clangdiagnosticconfigswidget.h" #include "ui_clangbasechecks.h" diff --git a/src/plugins/cppeditor/cppcodemodelsettings.cpp b/src/plugins/cppeditor/cppcodemodelsettings.cpp index f30469abfe..f33cc7bbd5 100644 --- a/src/plugins/cppeditor/cppcodemodelsettings.cpp +++ b/src/plugins/cppeditor/cppcodemodelsettings.cpp @@ -54,9 +54,6 @@ static Id initialClangDiagnosticConfigId() static CppCodeModelSettings::PCHUsage initialPchUsage() { return CppCodeModelSettings::PchUse_BuildSystem; } -static QString clangDiagnosticConfigKey() -{ return QStringLiteral("ClangDiagnosticConfig"); } - static QString enableLowerClazyLevelsKey() { return QLatin1String("enableLowerClazyLevels"); } @@ -83,6 +80,7 @@ static QString clangdSizeThresholdEnabledKey() { return QLatin1String("ClangdSiz static QString clangdSizeThresholdKey() { return QLatin1String("ClangdSizeThreshold"); } static QString clangdUseGlobalSettingsKey() { return QLatin1String("useGlobalSettings"); } static QString sessionsWithOneClangdKey() { return QLatin1String("SessionsWithOneClangd"); } +static QString diagnosticConfigIdKey() { return QLatin1String("diagnosticConfigId"); } static FilePath g_defaultClangdFilePath; static FilePath fallbackClangdFilePath() @@ -92,91 +90,10 @@ static FilePath fallbackClangdFilePath() return "clangd"; } -static Id clangDiagnosticConfigIdFromSettings(QSettings *s) -{ - QTC_ASSERT(s->group() == QLatin1String(Constants::CPPEDITOR_SETTINGSGROUP), return Id()); - - return Id::fromSetting( - s->value(clangDiagnosticConfigKey(), initialClangDiagnosticConfigId().toSetting())); -} - -// Removed since Qt Creator 4.11 -static ClangDiagnosticConfigs removedBuiltinConfigs() -{ - ClangDiagnosticConfigs configs; - - // Pedantic - ClangDiagnosticConfig config; - config.setId("Builtin.Pedantic"); - config.setDisplayName(QCoreApplication::translate("ClangDiagnosticConfigsModel", - "Pedantic checks")); - config.setIsReadOnly(true); - config.setClangOptions(QStringList{QStringLiteral("-Wpedantic")}); - config.setClangTidyMode(ClangDiagnosticConfig::TidyMode::UseCustomChecks); - config.setClazyMode(ClangDiagnosticConfig::ClazyMode::UseCustomChecks); - configs << config; - - // Everything with exceptions - config = ClangDiagnosticConfig(); - config.setId("Builtin.EverythingWithExceptions"); - config.setDisplayName(QCoreApplication::translate( - "ClangDiagnosticConfigsModel", - "Checks for almost everything")); - config.setIsReadOnly(true); - config.setClangOptions(QStringList{ - QStringLiteral("-Weverything"), - QStringLiteral("-Wno-c++98-compat"), - QStringLiteral("-Wno-c++98-compat-pedantic"), - QStringLiteral("-Wno-unused-macros"), - QStringLiteral("-Wno-newline-eof"), - QStringLiteral("-Wno-exit-time-destructors"), - QStringLiteral("-Wno-global-constructors"), - QStringLiteral("-Wno-gnu-zero-variadic-macro-arguments"), - QStringLiteral("-Wno-documentation"), - QStringLiteral("-Wno-shadow"), - QStringLiteral("-Wno-switch-enum"), - QStringLiteral("-Wno-missing-prototypes"), // Not optimal for C projects. - QStringLiteral("-Wno-used-but-marked-unused"), // e.g. QTest::qWait - }); - config.setClangTidyMode(ClangDiagnosticConfig::TidyMode::UseCustomChecks); - config.setClazyMode(ClangDiagnosticConfig::ClazyMode::UseCustomChecks); - configs << config; - - return configs; -} - -static ClangDiagnosticConfig convertToCustomConfig(const Id &id) -{ - const ClangDiagnosticConfig config - = findOrDefault(removedBuiltinConfigs(), [id](const ClangDiagnosticConfig &config) { - return config.id() == id; - }); - return ClangDiagnosticConfigsModel::createCustomConfig(config, config.displayName()); -} - void CppCodeModelSettings::fromSettings(QSettings *s) { s->beginGroup(QLatin1String(Constants::CPPEDITOR_SETTINGSGROUP)); - setClangCustomDiagnosticConfigs(diagnosticConfigsFromSettings(s)); - setClangDiagnosticConfigId(clangDiagnosticConfigIdFromSettings(s)); - - // Qt Creator 4.11 removes some built-in configs. - bool write = false; - const Id id = m_clangDiagnosticConfigId; - if (id == "Builtin.Pedantic" || id == "Builtin.EverythingWithExceptions") { - // If one of them was used, continue to use it, but convert it to a custom config. - const ClangDiagnosticConfig customConfig = convertToCustomConfig(id); - m_clangCustomDiagnosticConfigs.append(customConfig); - m_clangDiagnosticConfigId = customConfig.id(); - write = true; - } - - // Before Qt Creator 4.8, inconsistent settings might have been written. - const ClangDiagnosticConfigsModel model = diagnosticConfigsModel(m_clangCustomDiagnosticConfigs); - if (!model.hasConfigWithId(m_clangDiagnosticConfigId)) - setClangDiagnosticConfigId(initialClangDiagnosticConfigId()); - setEnableLowerClazyLevels(s->value(enableLowerClazyLevelsKey(), true).toBool()); const QVariant pchUsageVariant = s->value(pchUsageKey(), initialPchUsage()); @@ -194,21 +111,13 @@ void CppCodeModelSettings::fromSettings(QSettings *s) s->endGroup(); - if (write) - toSettings(s); - emit changed(); } void CppCodeModelSettings::toSettings(QSettings *s) { s->beginGroup(QLatin1String(Constants::CPPEDITOR_SETTINGSGROUP)); - const ClangDiagnosticConfigs previousConfigs = diagnosticConfigsFromSettings(s); - const Id previousConfigId = clangDiagnosticConfigIdFromSettings(s); - - diagnosticConfigsToSettings(s, m_clangCustomDiagnosticConfigs); - s->setValue(clangDiagnosticConfigKey(), clangDiagnosticConfigId().toSetting()); s->setValue(enableLowerClazyLevelsKey(), enableLowerClazyLevels()); s->setValue(pchUsageKey(), pchUsage()); @@ -218,53 +127,9 @@ void CppCodeModelSettings::toSettings(QSettings *s) s->endGroup(); - QVector<Id> invalidated - = ClangDiagnosticConfigsModel::changedOrRemovedConfigs(previousConfigs, - m_clangCustomDiagnosticConfigs); - - if (previousConfigId != clangDiagnosticConfigId() && !invalidated.contains(previousConfigId)) - invalidated.append(previousConfigId); - - if (!invalidated.isEmpty()) - emit clangDiagnosticConfigsInvalidated(invalidated); emit changed(); } -Id CppCodeModelSettings::clangDiagnosticConfigId() const -{ - if (!diagnosticConfigsModel().hasConfigWithId(m_clangDiagnosticConfigId)) - return defaultClangDiagnosticConfigId(); - return m_clangDiagnosticConfigId; -} - -void CppCodeModelSettings::setClangDiagnosticConfigId(const Id &configId) -{ - m_clangDiagnosticConfigId = configId; -} - -Id CppCodeModelSettings::defaultClangDiagnosticConfigId() -{ - return initialClangDiagnosticConfigId(); -} - -const ClangDiagnosticConfig CppCodeModelSettings::clangDiagnosticConfig() const -{ - const ClangDiagnosticConfigsModel configsModel = diagnosticConfigsModel( - m_clangCustomDiagnosticConfigs); - - return configsModel.configWithId(clangDiagnosticConfigId()); -} - -ClangDiagnosticConfigs CppCodeModelSettings::clangCustomDiagnosticConfigs() const -{ - return m_clangCustomDiagnosticConfigs; -} - -void CppCodeModelSettings::setClangCustomDiagnosticConfigs(const ClangDiagnosticConfigs &configs) -{ - m_clangCustomDiagnosticConfigs = configs; -} - CppCodeModelSettings::PCHUsage CppCodeModelSettings::pchUsage() const { return m_pchUsage; @@ -346,6 +211,14 @@ void ClangdSettings::setDefaultClangdPath(const FilePath &filePath) g_defaultClangdFilePath = filePath; } +void ClangdSettings::setCustomDiagnosticConfigs(const ClangDiagnosticConfigs &configs) +{ + if (instance().customDiagnosticConfigs() == configs) + return; + instance().m_data.customDiagnosticConfigs = configs; + instance().saveSettings(); +} + FilePath ClangdSettings::clangdFilePath() const { if (!m_data.executableFilePath.isEmpty()) @@ -358,6 +231,23 @@ bool ClangdSettings::sizeIsOkay(const Utils::FilePath &fp) const return !sizeThresholdEnabled() || sizeThresholdInKb() * 1024 >= fp.fileSize(); } +ClangDiagnosticConfigs ClangdSettings::customDiagnosticConfigs() const +{ + return m_data.customDiagnosticConfigs; +} + +Id ClangdSettings::diagnosticConfigId() const +{ + if (!diagnosticConfigsModel().hasConfigWithId(m_data.diagnosticConfigId)) + return initialClangDiagnosticConfigId(); + return m_data.diagnosticConfigId; +} + +ClangDiagnosticConfig ClangdSettings::diagnosticConfig() const +{ + return diagnosticConfigsModel(customDiagnosticConfigs()).configWithId(diagnosticConfigId()); +} + ClangdSettings::Granularity ClangdSettings::granularity() const { if (m_data.sessionsWithOneClangd.contains(ProjectExplorer::SessionManager::activeSession())) @@ -428,12 +318,30 @@ FilePath ClangdSettings::clangdUserConfigFilePath() void ClangdSettings::loadSettings() { - Utils::fromSettings(clangdSettingsKey(), {}, Core::ICore::settings(), &m_data); + const auto settings = Core::ICore::settings(); + Utils::fromSettings(clangdSettingsKey(), {}, settings, &m_data); + + settings->beginGroup(QLatin1String(Constants::CPPEDITOR_SETTINGSGROUP)); + m_data.customDiagnosticConfigs = diagnosticConfigsFromSettings(settings); + + // Pre-8.0 compat + static const QString oldKey("ClangDiagnosticConfig"); + const QVariant configId = settings->value(oldKey); + if (configId.isValid()) { + m_data.diagnosticConfigId = Id::fromSetting(configId); + settings->setValue(oldKey, {}); + } + + settings->endGroup(); } void ClangdSettings::saveSettings() { - Utils::toSettings(clangdSettingsKey(), {}, Core::ICore::settings(), &m_data); + const auto settings = Core::ICore::settings(); + Utils::toSettings(clangdSettingsKey(), {}, settings, &m_data); + settings->beginGroup(QLatin1String(Constants::CPPEDITOR_SETTINGSGROUP)); + diagnosticConfigsToSettings(settings, m_data.customDiagnosticConfigs); + settings->endGroup(); } #ifdef WITH_TESTS @@ -459,6 +367,9 @@ ClangdSettings::Data ClangdProjectSettings::settings() const // This property is global by definition. data.sessionsWithOneClangd = ClangdSettings::instance().data().sessionsWithOneClangd; + // This list exists only once. + data.customDiagnosticConfigs = ClangdSettings::instance().data().customDiagnosticConfigs; + return data; } @@ -466,6 +377,7 @@ void ClangdProjectSettings::setSettings(const ClangdSettings::Data &data) { m_customSettings = data; saveSettings(); + ClangdSettings::setCustomDiagnosticConfigs(data.customDiagnosticConfigs); emit ClangdSettings::instance().changed(); } @@ -476,6 +388,12 @@ void ClangdProjectSettings::setUseGlobalSettings(bool useGlobal) emit ClangdSettings::instance().changed(); } +void ClangdProjectSettings::setDiagnosticConfigId(Utils::Id configId) +{ + m_customSettings.diagnosticConfigId = configId; + saveSettings(); +} + void ClangdProjectSettings::loadSettings() { if (!m_project) @@ -511,6 +429,7 @@ QVariantMap ClangdSettings::Data::toMap() const map.insert(clangdSizeThresholdEnabledKey(), sizeThresholdEnabled); map.insert(clangdSizeThresholdKey(), sizeThresholdInKb); map.insert(sessionsWithOneClangdKey(), sessionsWithOneClangd); + map.insert(diagnosticConfigIdKey(), diagnosticConfigId.toSetting()); return map; } @@ -525,6 +444,8 @@ void ClangdSettings::Data::fromMap(const QVariantMap &map) sizeThresholdEnabled = map.value(clangdSizeThresholdEnabledKey(), false).toBool(); sizeThresholdInKb = map.value(clangdSizeThresholdKey(), 1024).toLongLong(); sessionsWithOneClangd = map.value(sessionsWithOneClangdKey()).toStringList(); + diagnosticConfigId = Id::fromSetting(map.value(diagnosticConfigIdKey(), + initialClangDiagnosticConfigId().toSetting())); } } // namespace CppEditor diff --git a/src/plugins/cppeditor/cppcodemodelsettings.h b/src/plugins/cppeditor/cppcodemodelsettings.h index 1e0750d861..1bf5b46616 100644 --- a/src/plugins/cppeditor/cppcodemodelsettings.h +++ b/src/plugins/cppeditor/cppcodemodelsettings.h @@ -25,9 +25,11 @@ #pragma once -#include "clangdiagnosticconfigsmodel.h" +#include "clangdiagnosticconfig.h" +#include "cppeditor_global.h" #include <utils/fileutils.h> +#include <utils/id.h> #include <QObject> #include <QStringList> @@ -56,14 +58,6 @@ public: void toSettings(QSettings *s); public: - Utils::Id clangDiagnosticConfigId() const; - void setClangDiagnosticConfigId(const Utils::Id &configId); - static Utils::Id defaultClangDiagnosticConfigId() ; - const ClangDiagnosticConfig clangDiagnosticConfig() const; - - ClangDiagnosticConfigs clangCustomDiagnosticConfigs() const; - void setClangCustomDiagnosticConfigs(const ClangDiagnosticConfigs &configs); - bool enableLowerClazyLevels() const; void setEnableLowerClazyLevels(bool yesno); @@ -91,8 +85,6 @@ private: bool m_interpretAmbigiousHeadersAsCHeaders = false; bool m_skipIndexingBigFiles = true; int m_indexerFileSizeLimitInMB = 5; - ClangDiagnosticConfigs m_clangCustomDiagnosticConfigs; - Utils::Id m_clangDiagnosticConfigId; bool m_enableLowerClazyLevels = true; // For UI behavior only bool m_categorizeFindReferences = false; // Ephemeral! }; @@ -112,6 +104,8 @@ public: return s1.useClangd == s2.useClangd && s1.executableFilePath == s2.executableFilePath && s1.sessionsWithOneClangd == s2.sessionsWithOneClangd + && s1.customDiagnosticConfigs == s2.customDiagnosticConfigs + && s1.diagnosticConfigId == s2.diagnosticConfigId && s1.workerThreadLimit == s2.workerThreadLimit && s1.enableIndexing == s2.enableIndexing && s1.autoIncludeHeaders == s2.autoIncludeHeaders @@ -123,6 +117,8 @@ public: Utils::FilePath executableFilePath; QStringList sessionsWithOneClangd; + ClangDiagnosticConfigs customDiagnosticConfigs; + Utils::Id diagnosticConfigId; int workerThreadLimit = 0; int documentUpdateThreshold = 500; qint64 sizeThresholdInKb = 1024; @@ -138,6 +134,7 @@ public: bool useClangd() const; static void setDefaultClangdPath(const Utils::FilePath &filePath); + static void setCustomDiagnosticConfigs(const ClangDiagnosticConfigs &configs); Utils::FilePath clangdFilePath() const; bool indexingEnabled() const { return m_data.enableIndexing; } bool autoIncludeHeaders() const { return m_data.autoIncludeHeaders; } @@ -146,6 +143,9 @@ public: qint64 sizeThresholdInKb() const { return m_data.sizeThresholdInKb; } bool sizeThresholdEnabled() const { return m_data.sizeThresholdEnabled; } bool sizeIsOkay(const Utils::FilePath &fp) const; + ClangDiagnosticConfigs customDiagnosticConfigs() const; + Utils::Id diagnosticConfigId() const; + ClangDiagnosticConfig diagnosticConfig() const; enum class Granularity { Project, Session }; Granularity granularity() const; @@ -184,6 +184,7 @@ public: void setSettings(const ClangdSettings::Data &data); bool useGlobalSettings() const { return m_useGlobalSettings; } void setUseGlobalSettings(bool useGlobal); + void setDiagnosticConfigId(Utils::Id configId); private: void loadSettings(); diff --git a/src/plugins/cppeditor/cppcodemodelsettingspage.cpp b/src/plugins/cppeditor/cppcodemodelsettingspage.cpp index 390c50a367..bbfbf8bdd4 100644 --- a/src/plugins/cppeditor/cppcodemodelsettingspage.cpp +++ b/src/plugins/cppeditor/cppcodemodelsettingspage.cpp @@ -26,9 +26,9 @@ #include "cppcodemodelsettingspage.h" #include "ui_cppcodemodelsettingspage.h" +#include "clangdiagnosticconfigsselectionwidget.h" #include "clangdiagnosticconfigswidget.h" #include "cppeditorconstants.h" -#include "cppmodelmanager.h" #include "cpptoolsreuse.h" #include <coreplugin/icore.h> @@ -67,10 +67,8 @@ private: void apply() final; void setupGeneralWidgets(); - void setupClangCodeModelWidgets(); bool applyGeneralWidgetsToSettings() const; - bool applyClangCodeModelWidgetsToSettings() const; Ui::CppCodeModelSettingsPage *m_ui = nullptr; CppCodeModelSettings *m_settings = nullptr; @@ -84,7 +82,6 @@ CppCodeModelSettingsWidget::CppCodeModelSettingsWidget(CppCodeModelSettings *s) m_settings = s; setupGeneralWidgets(); - setupClangCodeModelWidgets(); } CppCodeModelSettingsWidget::~CppCodeModelSettingsWidget() @@ -94,35 +91,10 @@ CppCodeModelSettingsWidget::~CppCodeModelSettingsWidget() void CppCodeModelSettingsWidget::apply() { - bool changed = false; - - changed |= applyGeneralWidgetsToSettings(); - changed |= applyClangCodeModelWidgetsToSettings(); - - if (changed) + if (applyGeneralWidgetsToSettings()) m_settings->toSettings(Core::ICore::settings()); } -void CppCodeModelSettingsWidget::setupClangCodeModelWidgets() -{ - m_ui->clangDiagnosticConfigsSelectionWidget - ->refresh(diagnosticConfigsModel(), - m_settings->clangDiagnosticConfigId(), - [](const ClangDiagnosticConfigs &configs, const Utils::Id &configToSelect) { - return new ClangDiagnosticConfigsWidget(configs, configToSelect); - }); - - const bool isClangActive = CppModelManager::instance()->isClangCodeModelActive(); - m_ui->clangCodeModelIsDisabledHint->setVisible(!isClangActive); - m_ui->clangCodeModelIsEnabledHint->setVisible(isClangActive); - - for (int i = 0; i < m_ui->clangDiagnosticConfigsSelectionWidget->layout()->count(); ++i) { - QWidget *widget = m_ui->clangDiagnosticConfigsSelectionWidget->layout()->itemAt(i)->widget(); - if (widget) - widget->setEnabled(isClangActive); - } -} - void CppCodeModelSettingsWidget::setupGeneralWidgets() { m_ui->interpretAmbiguousHeadersAsCHeaders->setChecked( @@ -135,28 +107,6 @@ void CppCodeModelSettingsWidget::setupGeneralWidgets() m_ui->ignorePCHCheckBox->setChecked(ignorePch); } -bool CppCodeModelSettingsWidget::applyClangCodeModelWidgetsToSettings() const -{ - bool changed = false; - - const Utils::Id oldConfigId = m_settings->clangDiagnosticConfigId(); - const Utils::Id currentConfigId = m_ui->clangDiagnosticConfigsSelectionWidget->currentConfigId(); - if (oldConfigId != currentConfigId) { - m_settings->setClangDiagnosticConfigId(currentConfigId); - changed = true; - } - - const ClangDiagnosticConfigs oldConfigs = m_settings->clangCustomDiagnosticConfigs(); - const ClangDiagnosticConfigs currentConfigs = m_ui->clangDiagnosticConfigsSelectionWidget - ->customConfigs(); - if (oldConfigs != currentConfigs) { - m_settings->setClangCustomDiagnosticConfigs(currentConfigs); - changed = true; - } - - return changed; -} - bool CppCodeModelSettingsWidget::applyGeneralWidgetsToSettings() const { bool settingsChanged = false; @@ -215,6 +165,7 @@ public: QSpinBox sizeThresholdSpinBox; Utils::PathChooser clangdChooser; Utils::InfoLabel versionWarningLabel; + ClangDiagnosticConfigsSelectionWidget *configSelectionWidget = nullptr; QGroupBox *sessionsGroupBox = nullptr; QStringListModel sessionsModel; }; @@ -283,8 +234,15 @@ ClangdSettingsWidget::ClangdSettingsWidget(const ClangdSettings::Data &settingsD sizeThresholdLayout->addWidget(&d->sizeThresholdSpinBox); sizeThresholdLayout->addStretch(1); formLayout->addRow(&d->sizeThresholdCheckBox, sizeThresholdLayout); - layout->addLayout(formLayout); + d->configSelectionWidget = new ClangDiagnosticConfigsSelectionWidget(formLayout); + d->configSelectionWidget->refresh( + diagnosticConfigsModel(settings.customDiagnosticConfigs()), + settings.diagnosticConfigId(), + [](const ClangDiagnosticConfigs &configs, const Utils::Id &configToSelect) { + return new CppEditor::ClangDiagnosticConfigsWidget(configs, configToSelect); + }); + layout->addLayout(formLayout); if (!isForProject) { d->sessionsModel.setStringList(settingsData.sessionsWithOneClangd); d->sessionsModel.sort(0); @@ -427,6 +385,8 @@ ClangdSettingsWidget::ClangdSettingsWidget(const ClangdSettings::Data &settingsD this, &ClangdSettingsWidget::settingsDataChanged); connect(&d->clangdChooser, &Utils::PathChooser::pathChanged, this, &ClangdSettingsWidget::settingsDataChanged); + connect(d->configSelectionWidget, &ClangDiagnosticConfigsSelectionWidget::changed, + this, &ClangdSettingsWidget::settingsDataChanged); } ClangdSettingsWidget::~ClangdSettingsWidget() @@ -446,6 +406,8 @@ ClangdSettings::Data ClangdSettingsWidget::settingsData() const data.sizeThresholdEnabled = d->sizeThresholdCheckBox.isChecked(); data.sizeThresholdInKb = d->sizeThresholdSpinBox.value(); data.sessionsWithOneClangd = d->sessionsModel.stringList(); + data.customDiagnosticConfigs = d->configSelectionWidget->customConfigs(); + data.diagnosticConfigId = d->configSelectionWidget->currentConfigId(); return data; } diff --git a/src/plugins/cppeditor/cppcodemodelsettingspage.ui b/src/plugins/cppeditor/cppcodemodelsettingspage.ui index e4cf04fcd2..43b9e70352 100644 --- a/src/plugins/cppeditor/cppcodemodelsettingspage.ui +++ b/src/plugins/cppeditor/cppcodemodelsettingspage.ui @@ -87,49 +87,6 @@ </widget> </item> <item> - <widget class="QGroupBox" name="groupBox"> - <property name="title"> - <string>Clang Code Model</string> - </property> - <layout class="QVBoxLayout" name="verticalLayout_3"> - <item> - <widget class="QLabel" name="clangCodeModelIsEnabledHint"> - <property name="text"> - <string><i>The Clang Code Model is enabled because the corresponding plugin is loaded.</i></string> - </property> - </widget> - </item> - <item> - <widget class="QLabel" name="clangCodeModelIsDisabledHint"> - <property name="text"> - <string><i>The Clang Code Model is disabled because the corresponding plugin is not loaded.</i></string> - </property> - </widget> - </item> - <item> - <widget class="CppEditor::ClangDiagnosticConfigsSelectionWidget" name="clangDiagnosticConfigsSelectionWidget" native="true"/> - </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_2"> - <item> - <spacer name="horizontalSpacer_2"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>40</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - </layout> - </item> - </layout> - </widget> - </item> - <item> <spacer name="verticalSpacer"> <property name="orientation"> <enum>Qt::Vertical</enum> @@ -144,13 +101,6 @@ </item> </layout> </widget> - <customwidgets> - <customwidget> - <class>CppEditor::ClangDiagnosticConfigsSelectionWidget</class> - <extends>QWidget</extends> - <header>cppeditor/clangdiagnosticconfigsselectionwidget.h</header> - </customwidget> - </customwidgets> <resources/> <connections/> </ui> diff --git a/src/plugins/cppeditor/cpptoolsreuse.cpp b/src/plugins/cppeditor/cpptoolsreuse.cpp index e2362efa58..34d4aac046 100644 --- a/src/plugins/cppeditor/cpptoolsreuse.cpp +++ b/src/plugins/cppeditor/cpptoolsreuse.cpp @@ -25,6 +25,7 @@ #include "cpptoolsreuse.h" +#include "clangdiagnosticconfigsmodel.h" #include "cppautocompleter.h" #include "cppcodemodelsettings.h" #include "cppeditorconstants.h" @@ -423,7 +424,7 @@ ClangDiagnosticConfigsModel diagnosticConfigsModel(const ClangDiagnosticConfigs ClangDiagnosticConfigsModel diagnosticConfigsModel() { - return diagnosticConfigsModel(codeModelSettings()->clangCustomDiagnosticConfigs()); + return diagnosticConfigsModel(ClangdSettings::instance().customDiagnosticConfigs()); } NSVisitor::NSVisitor(const CppRefactoringFile *file, const QStringList &namespaces, int symbolPos) |