aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/cppeditor
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2022-05-19 14:48:09 +0200
committerChristian Kandeler <christian.kandeler@qt.io>2022-05-23 12:15:40 +0000
commit760cf632afddbdbc6cf1ded0655e8286ccbffd1f (patch)
tree3fe249471dd30a39c035e14f748e94f81004c46e /src/plugins/cppeditor
parentc117e3d3c9b5742148a0d0f3ed975705bbdb9118 (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')
-rw-r--r--src/plugins/cppeditor/clangdiagnosticconfigsmodel.cpp17
-rw-r--r--src/plugins/cppeditor/clangdiagnosticconfigsmodel.h2
-rw-r--r--src/plugins/cppeditor/clangdiagnosticconfigsselectionwidget.cpp39
-rw-r--r--src/plugins/cppeditor/clangdiagnosticconfigsselectionwidget.h6
-rw-r--r--src/plugins/cppeditor/clangdiagnosticconfigswidget.cpp2
-rw-r--r--src/plugins/cppeditor/cppcodemodelsettings.cpp197
-rw-r--r--src/plugins/cppeditor/cppcodemodelsettings.h23
-rw-r--r--src/plugins/cppeditor/cppcodemodelsettingspage.cpp68
-rw-r--r--src/plugins/cppeditor/cppcodemodelsettingspage.ui50
-rw-r--r--src/plugins/cppeditor/cpptoolsreuse.cpp3
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>&lt;i&gt;The Clang Code Model is enabled because the corresponding plugin is loaded.&lt;/i&gt;</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="clangCodeModelIsDisabledHint">
- <property name="text">
- <string>&lt;i&gt;The Clang Code Model is disabled because the corresponding plugin is not loaded.&lt;/i&gt;</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)