aboutsummaryrefslogtreecommitdiffstats
path: root/src
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
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')
-rw-r--r--src/plugins/clangcodemodel/CMakeLists.txt2
-rw-r--r--src/plugins/clangcodemodel/clangcodemodel.qbs5
-rw-r--r--src/plugins/clangcodemodel/clangcodemodelplugin.cpp20
-rw-r--r--src/plugins/clangcodemodel/clangdclient.cpp10
-rw-r--r--src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp1
-rw-r--r--src/plugins/clangcodemodel/clangmodelmanagersupport.cpp69
-rw-r--r--src/plugins/clangcodemodel/clangmodelmanagersupport.h9
-rw-r--r--src/plugins/clangcodemodel/clangprojectsettings.cpp147
-rw-r--r--src/plugins/clangcodemodel/clangprojectsettings.h75
-rw-r--r--src/plugins/clangcodemodel/clangprojectsettingswidget.cpp159
-rw-r--r--src/plugins/clangcodemodel/clangprojectsettingswidget.h61
-rw-r--r--src/plugins/clangcodemodel/clangprojectsettingswidget.ui98
-rw-r--r--src/plugins/clangcodemodel/clangtextmark.cpp40
-rw-r--r--src/plugins/clangcodemodel/clangutils.cpp35
-rw-r--r--src/plugins/clangcodemodel/clangutils.h3
-rw-r--r--src/plugins/clangtools/clangtoolssettings.cpp9
-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
26 files changed, 145 insertions, 1005 deletions
diff --git a/src/plugins/clangcodemodel/CMakeLists.txt b/src/plugins/clangcodemodel/CMakeLists.txt
index 9d08105a6a..7bcfb4e7a9 100644
--- a/src/plugins/clangcodemodel/CMakeLists.txt
+++ b/src/plugins/clangcodemodel/CMakeLists.txt
@@ -25,8 +25,6 @@ add_qtc_plugin(ClangCodeModel
clangdlocatorfilters.cpp clangdlocatorfilters.h
clangmodelmanagersupport.cpp clangmodelmanagersupport.h
clangpreprocessorassistproposalitem.cpp clangpreprocessorassistproposalitem.h
- clangprojectsettings.cpp clangprojectsettings.h
- clangprojectsettingswidget.cpp clangprojectsettingswidget.h clangprojectsettingswidget.ui
clangtextmark.cpp clangtextmark.h
clanguiheaderondiskmanager.cpp clanguiheaderondiskmanager.h
clangutils.cpp clangutils.h
diff --git a/src/plugins/clangcodemodel/clangcodemodel.qbs b/src/plugins/clangcodemodel/clangcodemodel.qbs
index 1c0ad2e764..f1d2c89497 100644
--- a/src/plugins/clangcodemodel/clangcodemodel.qbs
+++ b/src/plugins/clangcodemodel/clangcodemodel.qbs
@@ -50,11 +50,6 @@ QtcPlugin {
"clangmodelmanagersupport.h",
"clangpreprocessorassistproposalitem.cpp",
"clangpreprocessorassistproposalitem.h",
- "clangprojectsettings.cpp",
- "clangprojectsettings.h",
- "clangprojectsettingswidget.cpp",
- "clangprojectsettingswidget.h",
- "clangprojectsettingswidget.ui",
"clangtextmark.cpp",
"clangtextmark.h",
"clanguiheaderondiskmanager.cpp",
diff --git a/src/plugins/clangcodemodel/clangcodemodelplugin.cpp b/src/plugins/clangcodemodel/clangcodemodelplugin.cpp
index 17cd0b6ba9..3b26d7b82c 100644
--- a/src/plugins/clangcodemodel/clangcodemodelplugin.cpp
+++ b/src/plugins/clangcodemodel/clangcodemodelplugin.cpp
@@ -26,7 +26,6 @@
#include "clangcodemodelplugin.h"
#include "clangconstants.h"
-#include "clangprojectsettingswidget.h"
#include "clangutils.h"
#ifdef WITH_TESTS
@@ -42,6 +41,7 @@
#include <coreplugin/messagemanager.h>
#include <coreplugin/progressmanager/progressmanager.h>
+#include <cppeditor/clangdiagnosticconfig.h>
#include <cppeditor/cppmodelmanager.h>
#include <projectexplorer/buildconfiguration.h>
@@ -58,16 +58,6 @@ using namespace Utils;
namespace ClangCodeModel {
namespace Internal {
-static void addProjectPanelWidget()
-{
- auto panelFactory = new ProjectExplorer::ProjectPanelFactory();
- panelFactory->setPriority(60);
- panelFactory->setDisplayName(ClangProjectSettingsWidget::tr("Clang Code Model"));
- panelFactory->setCreateWidgetFunction(
- [&](ProjectExplorer::Project *project) { return new ClangProjectSettingsWidget(project); });
- ProjectExplorer::ProjectPanelFactory::registerFactory(panelFactory);
-}
-
void ClangCodeModelPlugin::generateCompilationDB()
{
using namespace CppEditor;
@@ -80,13 +70,11 @@ void ClangCodeModelPlugin::generateCompilationDB()
if (!projectInfo)
return;
- const CppEditor::ClangDiagnosticConfig warningsConfig
- = warningsConfigForProject(target->project());
QFuture<GenerateCompilationDbResult> task
= Utils::runAsync(&Internal::generateCompilationDB, projectInfo,
projectInfo->buildRoot(), CompilationDbPurpose::Project,
- warningsConfig,
- optionsForProject(target->project(), warningsConfig),
+ warningsConfigForProject(target->project()),
+ globalClangOptions(),
FilePath());
Core::ProgressManager::addTask(task, tr("Generating Compilation DB"), "generate compilation db");
m_generatorWatcher.setFuture(task);
@@ -121,8 +109,6 @@ bool ClangCodeModelPlugin::initialize(const QStringList &arguments, QString *err
CppEditor::CppModelManager::instance()->activateClangCodeModel(&m_modelManagerSupportProvider);
- addProjectPanelWidget();
-
createCompilationDBButton();
return true;
diff --git a/src/plugins/clangcodemodel/clangdclient.cpp b/src/plugins/clangcodemodel/clangdclient.cpp
index 921949ecc0..153aa84f48 100644
--- a/src/plugins/clangcodemodel/clangdclient.cpp
+++ b/src/plugins/clangcodemodel/clangdclient.cpp
@@ -1163,13 +1163,12 @@ ClangdClient::ClangdClient(Project *project, const Utils::FilePath &jsonDbDir)
QJsonObject initOptions;
const Utils::FilePath includeDir
= CppEditor::ClangdSettings(d->settings).clangdIncludePath();
- const CppEditor::ClangDiagnosticConfig warningsConfig = warningsConfigForProject(nullptr);
CppEditor::CompilerOptionsBuilder optionsBuilder = clangOptionsBuilder(
*CppEditor::CppModelManager::instance()->fallbackProjectPart(),
- warningsConfig, includeDir);
+ warningsConfigForProject(nullptr), includeDir);
const CppEditor::UsePrecompiledHeaders usePch = CppEditor::getPchUsage();
const QJsonArray projectPartOptions = fullProjectPartOptions(
- optionsBuilder, optionsForProject(nullptr, warningsConfig));
+ optionsBuilder, globalClangOptions());
const QJsonArray clangOptions = clangOptionsForFile({}, optionsBuilder.projectPart(),
projectPartOptions, usePch);
initOptions.insert("fallbackFlags", clangOptions);
@@ -1608,13 +1607,12 @@ void ClangdClient::updateParserConfig(const Utils::FilePath &filePath,
return;
QJsonObject cdbChanges;
const Utils::FilePath includeDir = CppEditor::ClangdSettings(d->settings).clangdIncludePath();
- const CppEditor::ClangDiagnosticConfig warningsConfig = warningsConfigForProject(project());
CppEditor::CompilerOptionsBuilder optionsBuilder = clangOptionsBuilder(
- *projectPart, warningsConfig, includeDir);
+ *projectPart, warningsConfigForProject(project()), includeDir);
const CppEditor::ProjectFile file(filePath.toString(),
CppEditor::ProjectFile::classify(filePath.toString()));
const QJsonArray projectPartOptions = fullProjectPartOptions(
- optionsBuilder, optionsForProject(project(), warningsConfig));
+ optionsBuilder, globalClangOptions());
addToCompilationDb(cdbChanges, *projectPart, CppEditor::getPchUsage(), projectPartOptions,
filePath.parentDir(), file);
QJsonObject settings;
diff --git a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp
index 2d3eba9e62..bff5b85e23 100644
--- a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp
+++ b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp
@@ -25,7 +25,6 @@
#include "clangeditordocumentprocessor.h"
-#include "clangprojectsettings.h"
#include "clangdiagnostictooltipwidget.h"
#include "clangfixitoperation.h"
#include "clangmodelmanagersupport.h"
diff --git a/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp b/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp
index 7966622e5a..1a25ef2a88 100644
--- a/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp
+++ b/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp
@@ -30,7 +30,6 @@
#include "clangdquickfixfactory.h"
#include "clangeditordocumentprocessor.h"
#include "clangdlocatorfilters.h"
-#include "clangprojectsettings.h"
#include "clangutils.h"
#include <coreplugin/documentmanager.h>
@@ -137,19 +136,12 @@ ClangModelManagerSupport::ClangModelManagerSupport()
});
auto *sessionManager = ProjectExplorer::SessionManager::instance();
- connect(sessionManager, &ProjectExplorer::SessionManager::projectAdded,
- this, &ClangModelManagerSupport::onProjectAdded);
- connect(sessionManager, &ProjectExplorer::SessionManager::aboutToRemoveProject,
- this, &ClangModelManagerSupport::onAboutToRemoveProject);
connect(sessionManager, &ProjectExplorer::SessionManager::projectRemoved,
this, [this] { claimNonProjectSources(clientForProject(fallbackProject())); });
CppEditor::ClangdSettings::setDefaultClangdPath(Core::ICore::clangdExecutable(CLANG_BINDIR));
connect(&CppEditor::ClangdSettings::instance(), &CppEditor::ClangdSettings::changed,
this, &ClangModelManagerSupport::onClangdSettingsChanged);
- CppEditor::CppCodeModelSettings *settings = CppEditor::codeModelSettings();
- connect(settings, &CppEditor::CppCodeModelSettings::clangDiagnosticConfigsInvalidated,
- this, &ClangModelManagerSupport::onDiagnosticConfigsInvalidated);
if (CppEditor::ClangdSettings::instance().useClangd())
createClient(nullptr, {});
@@ -160,7 +152,6 @@ ClangModelManagerSupport::ClangModelManagerSupport()
ClangModelManagerSupport::~ClangModelManagerSupport()
{
- QTC_CHECK(m_projectSettings.isEmpty());
m_generatorSynchronizer.waitForFinished();
m_instance = nullptr;
}
@@ -427,11 +418,10 @@ void ClangModelManagerSupport::updateLanguageClient(
});
const Utils::FilePath includeDir = settings.clangdIncludePath();
- const ClangDiagnosticConfig warningsConfig = warningsConfigForProject(project);
auto future = Utils::runAsync(&Internal::generateCompilationDB, projectInfo, jsonDbDir,
CompilationDbPurpose::CodeModel,
- warningsConfig, optionsForProject(project, warningsConfig),
- includeDir);
+ warningsConfigForProject(project),
+ globalClangOptions(), includeDir);
generatorWatcher->setFuture(future);
m_generatorSynchronizer.addFuture(future);
}
@@ -670,42 +660,6 @@ static ClangEditorDocumentProcessors clangProcessors()
return result;
}
-static ClangEditorDocumentProcessors
-clangProcessorsWithProject(const ProjectExplorer::Project *project)
-{
- return ::Utils::filtered(clangProcessors(), [project](ClangEditorDocumentProcessor *p) {
- return p->hasProjectPart() && p->projectPart()->belongsToProject(project);
- });
-}
-
-static void updateProcessors(const ClangEditorDocumentProcessors &processors)
-{
- CppEditor::CppModelManager *modelManager = cppModelManager();
- for (ClangEditorDocumentProcessor *processor : processors)
- modelManager->cppEditorDocument(processor->filePath())->resetProcessor();
- modelManager->updateCppEditorDocuments(/*projectsUpdated=*/ false);
-}
-
-void ClangModelManagerSupport::onProjectAdded(ProjectExplorer::Project *project)
-{
- QTC_ASSERT(!m_projectSettings.value(project), return);
-
- auto *settings = new Internal::ClangProjectSettings(project);
- connect(settings, &Internal::ClangProjectSettings::changed, [project]() {
- updateProcessors(clangProcessorsWithProject(project));
- });
-
- m_projectSettings.insert(project, settings);
-}
-
-void ClangModelManagerSupport::onAboutToRemoveProject(ProjectExplorer::Project *project)
-{
- ClangProjectSettings * const settings = m_projectSettings.value(project);
- QTC_ASSERT(settings, return);
- m_projectSettings.remove(project);
- delete settings;
-}
-
void ClangModelManagerSupport::onProjectPartsUpdated(ProjectExplorer::Project *project)
{
QTC_ASSERT(project, return);
@@ -765,19 +719,6 @@ void ClangModelManagerSupport::onClangdSettingsChanged()
}
}
-static ClangEditorDocumentProcessors clangProcessorsWithDiagnosticConfig(
- const QVector<::Utils::Id> &configIds)
-{
- return ::Utils::filtered(clangProcessors(), [configIds](ClangEditorDocumentProcessor *p) {
- return configIds.contains(p->diagnosticConfigId());
- });
-}
-
-void ClangModelManagerSupport::onDiagnosticConfigsInvalidated(const QVector<::Utils::Id> &configIds)
-{
- updateProcessors(clangProcessorsWithDiagnosticConfig(configIds));
-}
-
static ClangEditorDocumentProcessors
clangProcessorsWithProjectParts(const QStringList &projectPartIds)
{
@@ -805,12 +746,6 @@ QString ClangModelManagerSupport::dummyUiHeaderOnDiskPath(const QString &filePat
return m_uiHeaderOnDiskManager.mapPath(filePath);
}
-ClangProjectSettings &ClangModelManagerSupport::projectSettings(
- ProjectExplorer::Project *project) const
-{
- return *m_projectSettings.value(project);
-}
-
QString ClangModelManagerSupport::dummyUiHeaderOnDiskDirPath() const
{
return m_uiHeaderOnDiskManager.directoryPath();
diff --git a/src/plugins/clangcodemodel/clangmodelmanagersupport.h b/src/plugins/clangcodemodel/clangmodelmanagersupport.h
index 11baf781f8..4233f734b0 100644
--- a/src/plugins/clangcodemodel/clangmodelmanagersupport.h
+++ b/src/plugins/clangcodemodel/clangmodelmanagersupport.h
@@ -51,7 +51,6 @@ namespace ClangCodeModel {
namespace Internal {
class ClangdClient;
-class ClangProjectSettings;
class ClangModelManagerSupport:
public QObject,
@@ -74,8 +73,6 @@ public:
QString dummyUiHeaderOnDiskDirPath() const;
QString dummyUiHeaderOnDiskPath(const QString &filePath) const;
- ClangProjectSettings &projectSettings(ProjectExplorer::Project *project) const;
-
ClangdClient *clientForProject(const ProjectExplorer::Project *project) const;
ClangdClient *clientForFile(const Utils::FilePath &file) const;
@@ -111,15 +108,10 @@ private:
int lineNumber,
QMenu *menu);
- void onProjectAdded(ProjectExplorer::Project *project);
- void onAboutToRemoveProject(ProjectExplorer::Project *project);
-
void onProjectPartsUpdated(ProjectExplorer::Project *project);
void onProjectPartsRemoved(const QStringList &projectPartIds);
void onClangdSettingsChanged();
- void onDiagnosticConfigsInvalidated(const QVector<::Utils::Id> &configIds);
-
void reinitializeBackendDocuments(const QStringList &projectPartIds);
void connectTextDocumentToTranslationUnit(TextEditor::TextDocument *textDocument);
@@ -134,7 +126,6 @@ private:
UiHeaderOnDiskManager m_uiHeaderOnDiskManager;
- QHash<ProjectExplorer::Project *, ClangProjectSettings *> m_projectSettings;
Utils::FutureSynchronizer m_generatorSynchronizer;
QList<QPointer<ClangdClient>> m_clientsToRestart;
};
diff --git a/src/plugins/clangcodemodel/clangprojectsettings.cpp b/src/plugins/clangcodemodel/clangprojectsettings.cpp
deleted file mode 100644
index 0e7a98924b..0000000000
--- a/src/plugins/clangcodemodel/clangprojectsettings.cpp
+++ /dev/null
@@ -1,147 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-****************************************************************************/
-
-#include "clangprojectsettings.h"
-
-#include <cppeditor/cppcodemodelsettings.h>
-#include <cppeditor/cpptoolsreuse.h>
-
-#include <utils/qtcassert.h>
-#include <utils/hostosinfo.h>
-
-#include <QDebug>
-
-namespace ClangCodeModel {
-namespace Internal {
-
-static QString useGlobalConfigKey()
-{ return QStringLiteral("ClangCodeModel.UseGlobalConfig"); }
-
-static QString warningConfigIdKey()
-{ return QStringLiteral("ClangCodeModel.WarningConfigId"); }
-
-static QString customCommandLineKey()
-{ return QLatin1String("ClangCodeModel.CustomCommandLineKey"); }
-
-static bool useGlobalConfigFromSettings(ProjectExplorer::Project *project)
-{
- const QVariant useGlobalConfigVariant = project->namedSettings(useGlobalConfigKey());
- return useGlobalConfigVariant.isValid() ? useGlobalConfigVariant.toBool() : true;
-}
-
-static Utils::Id warningConfigIdFromSettings(ProjectExplorer::Project *project)
-{
- return Utils::Id::fromSetting(project->namedSettings(warningConfigIdKey()));
-}
-
-static QStringList customCommandLineFromSettings(ProjectExplorer::Project *project)
-{
- QStringList options = project->namedSettings(customCommandLineKey()).toStringList();
- if (options.empty())
- options = ClangProjectSettings::globalCommandLineOptions();
- return options;
-}
-
-ClangProjectSettings::ClangProjectSettings(ProjectExplorer::Project *project)
- : m_project(project)
-{
- load();
-
- connect(project, &ProjectExplorer::Project::settingsLoaded,
- this, &ClangProjectSettings::load);
- connect(project, &ProjectExplorer::Project::aboutToSaveSettings,
- this, &ClangProjectSettings::store);
-}
-
-Utils::Id ClangProjectSettings::warningConfigId() const
-{
- const CppEditor::ClangDiagnosticConfigsModel model = CppEditor::diagnosticConfigsModel();
- if (!model.hasConfigWithId(m_warningConfigId))
- return CppEditor::codeModelSettings()->defaultClangDiagnosticConfigId();
- return m_warningConfigId;
-}
-
-void ClangProjectSettings::setWarningConfigId(const Utils::Id &customConfigId)
-{
- m_warningConfigId = customConfigId;
-}
-
-bool ClangProjectSettings::useGlobalConfig() const
-{
- return m_useGlobalConfig;
-}
-
-void ClangProjectSettings::setUseGlobalConfig(bool useGlobalConfig)
-{
- m_useGlobalConfig = useGlobalConfig;
-}
-
-QStringList ClangProjectSettings::commandLineOptions() const
-{
- return m_useGlobalConfig ? globalCommandLineOptions()
- : m_customCommandLineOptions;
-}
-
-void ClangProjectSettings::setCommandLineOptions(const QStringList &options)
-{
- QTC_ASSERT(!m_useGlobalConfig, qDebug()
- << "setCommandLineOptions was called while using global project config");
- m_customCommandLineOptions = options;
-}
-
-void ClangProjectSettings::load()
-{
- setUseGlobalConfig(useGlobalConfigFromSettings(m_project));
- setWarningConfigId(warningConfigIdFromSettings(m_project));
- m_customCommandLineOptions = customCommandLineFromSettings(m_project);
-}
-
-void ClangProjectSettings::store()
-{
- bool settingsChanged = false;
- if (useGlobalConfig() != useGlobalConfigFromSettings(m_project))
- settingsChanged = true;
- if (warningConfigId() != warningConfigIdFromSettings(m_project))
- settingsChanged = true;
- if (commandLineOptions() != customCommandLineFromSettings(m_project))
- settingsChanged = true;
-
- m_project->setNamedSettings(useGlobalConfigKey(), useGlobalConfig());
- m_project->setNamedSettings(warningConfigIdKey(), warningConfigId().toSetting());
- m_project->setNamedSettings(customCommandLineKey(), m_customCommandLineOptions);
-
- if (settingsChanged)
- emit changed();
-}
-
-QStringList ClangProjectSettings::globalCommandLineOptions()
-{
- if (Utils::HostOsInfo::isWindowsHost())
- return {QLatin1String{GlobalWindowsCmdOptions}};
- return {};
-}
-
-} // namespace Internal
-} // namespace ClangCodeModel
diff --git a/src/plugins/clangcodemodel/clangprojectsettings.h b/src/plugins/clangcodemodel/clangprojectsettings.h
deleted file mode 100644
index 511ac60875..0000000000
--- a/src/plugins/clangcodemodel/clangprojectsettings.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-****************************************************************************/
-
-#pragma once
-
-#include <projectexplorer/project.h>
-
-#include <utils/id.h>
-
-#include <QObject>
-#include <QString>
-
-namespace ClangCodeModel {
-namespace Internal {
-
-class ClangProjectSettings: public QObject
-{
- Q_OBJECT
-
-public:
- constexpr static const char* DelayedTemplateParsing = "-fdelayed-template-parsing";
- constexpr static const char* NoDelayedTemplateParsing = "-fno-delayed-template-parsing";
- constexpr static const char* GlobalWindowsCmdOptions = NoDelayedTemplateParsing;
-
- ClangProjectSettings(ProjectExplorer::Project *project);
-
- bool useGlobalConfig() const;
- void setUseGlobalConfig(bool useGlobalConfig);
-
- ::Utils::Id warningConfigId() const;
- void setWarningConfigId(const ::Utils::Id &warningConfigId);
-
- QStringList commandLineOptions() const;
- void setCommandLineOptions(const QStringList &options);
-
- void load();
- void store();
-
- static QStringList globalCommandLineOptions();
-
-signals:
- void changed();
-
-private:
- ProjectExplorer::Project *m_project;
- bool m_useGlobalConfig = true;
- ::Utils::Id m_warningConfigId;
-
- QStringList m_customCommandLineOptions;
-};
-
-} // namespace Internal
-} // namespace ClangCodeModel
diff --git a/src/plugins/clangcodemodel/clangprojectsettingswidget.cpp b/src/plugins/clangcodemodel/clangprojectsettingswidget.cpp
deleted file mode 100644
index 38521163d2..0000000000
--- a/src/plugins/clangcodemodel/clangprojectsettingswidget.cpp
+++ /dev/null
@@ -1,159 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-****************************************************************************/
-
-#include "clangprojectsettingswidget.h"
-
-#include "clangmodelmanagersupport.h"
-#include "clangprojectsettings.h"
-
-#include <coreplugin/icore.h>
-
-#include <cppeditor/clangdiagnosticconfig.h>
-#include <cppeditor/clangdiagnosticconfigswidget.h>
-#include <cppeditor/cppeditorconstants.h>
-#include <cppeditor/cppcodemodelsettings.h>
-#include <cppeditor/cpptoolsreuse.h>
-
-#include <utils/hostosinfo.h>
-
-namespace ClangCodeModel {
-namespace Internal {
-
-static Utils::Id configIdForProject(ClangProjectSettings &projectSettings)
-{
- if (projectSettings.useGlobalConfig())
- return CppEditor::codeModelSettings()->clangDiagnosticConfigId();
- return projectSettings.warningConfigId();
-}
-
-ClangProjectSettingsWidget::ClangProjectSettingsWidget(ProjectExplorer::Project *project)
- : m_projectSettings(ClangModelManagerSupport::instance()->projectSettings(project))
-{
- m_ui.setupUi(this);
-
- using namespace CppEditor;
-
- m_ui.delayedTemplateParseCheckBox->setVisible(Utils::HostOsInfo::isWindowsHost());
-
- // Links
- connect(m_ui.gotoGlobalSettingsLabel, &QLabel::linkActivated, [](const QString &) {
- Core::ICore::showOptionsDialog(CppEditor::Constants::CPP_CODE_MODEL_SETTINGS_ID);
- });
-
- connect(m_ui.clangDiagnosticConfigsSelectionWidget,
- &ClangDiagnosticConfigsSelectionWidget::changed,
- this,
- [this]() {
- // Save project's config id
- const Utils::Id currentConfigId = m_ui.clangDiagnosticConfigsSelectionWidget
- ->currentConfigId();
- m_projectSettings.setWarningConfigId(currentConfigId);
-
- // Save global custom configs
- const ClangDiagnosticConfigs configs = m_ui.clangDiagnosticConfigsSelectionWidget
- ->customConfigs();
- CppEditor::codeModelSettings()->setClangCustomDiagnosticConfigs(configs);
- CppEditor::codeModelSettings()->toSettings(Core::ICore::settings());
- });
-
- connect(m_ui.delayedTemplateParseCheckBox, &QCheckBox::toggled,
- this, &ClangProjectSettingsWidget::onDelayedTemplateParseClicked);
- connect(m_ui.globalOrCustomComboBox,
- QOverload<int>::of(&QComboBox::currentIndexChanged),
- this, &ClangProjectSettingsWidget::onGlobalCustomChanged);
- connect(project, &ProjectExplorer::Project::aboutToSaveSettings,
- this, &ClangProjectSettingsWidget::onAboutToSaveProjectSettings);
-
- connect(&m_projectSettings, &ClangProjectSettings::changed,
- this, &ClangProjectSettingsWidget::syncWidgets);
- connect(CppEditor::codeModelSettings(), &CppEditor::CppCodeModelSettings::changed,
- this, &ClangProjectSettingsWidget::syncOtherWidgetsToComboBox);
-
- syncWidgets();
-}
-
-void ClangProjectSettingsWidget::onDelayedTemplateParseClicked(bool checked)
-{
- // Don't save it when we reset the global config in code
- if (m_projectSettings.useGlobalConfig())
- return;
-
- const QLatin1String extraFlag{checked ? ClangProjectSettings::DelayedTemplateParsing
- : ClangProjectSettings::NoDelayedTemplateParsing};
- QStringList options = m_projectSettings.commandLineOptions();
- options.removeAll(QLatin1String{ClangProjectSettings::DelayedTemplateParsing});
- options.removeAll(QLatin1String{ClangProjectSettings::NoDelayedTemplateParsing});
- options.append(extraFlag);
- m_projectSettings.setCommandLineOptions(options);
-}
-
-void ClangProjectSettingsWidget::onGlobalCustomChanged(int index)
-{
- m_projectSettings.setUseGlobalConfig(index == 0 ? true : false);
- syncOtherWidgetsToComboBox();
-}
-
-void ClangProjectSettingsWidget::onAboutToSaveProjectSettings()
-{
- CppEditor::codeModelSettings()->toSettings(Core::ICore::settings());
-}
-
-void ClangProjectSettingsWidget::syncWidgets()
-{
- syncGlobalCustomComboBox();
- syncOtherWidgetsToComboBox();
-}
-
-void ClangProjectSettingsWidget::syncGlobalCustomComboBox()
-{
- m_ui.globalOrCustomComboBox->setCurrentIndex(m_projectSettings.useGlobalConfig() ? 0 : 1);
-}
-
-void ClangProjectSettingsWidget::syncOtherWidgetsToComboBox()
-{
- const QStringList options = m_projectSettings.commandLineOptions();
- m_ui.delayedTemplateParseCheckBox->setChecked(
- options.contains(QLatin1String{ClangProjectSettings::DelayedTemplateParsing}));
-
- const bool isCustom = !m_projectSettings.useGlobalConfig();
- m_ui.delayedTemplateParseCheckBox->setEnabled(isCustom);
-
- for (int i = 0; i < m_ui.clangDiagnosticConfigsSelectionWidget->layout()->count(); ++i) {
- QWidget *widget = m_ui.clangDiagnosticConfigsSelectionWidget->layout()->itemAt(i)->widget();
- if (widget)
- widget->setEnabled(isCustom);
- }
-
- m_ui.clangDiagnosticConfigsSelectionWidget
- ->refresh(CppEditor::diagnosticConfigsModel(),
- configIdForProject(m_projectSettings),
- [](const CppEditor::ClangDiagnosticConfigs &configs,
- const Utils::Id &configToSelect) {
- return new CppEditor::ClangDiagnosticConfigsWidget(configs, configToSelect);
- });
-}
-
-} // namespace Internal
-} // namespace ClangCodeModel
diff --git a/src/plugins/clangcodemodel/clangprojectsettingswidget.h b/src/plugins/clangcodemodel/clangprojectsettingswidget.h
deleted file mode 100644
index c1127ee6cb..0000000000
--- a/src/plugins/clangcodemodel/clangprojectsettingswidget.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2016 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of Qt Creator.
-**
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3 as published by the Free Software
-** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-3.0.html.
-**
-****************************************************************************/
-
-#pragma once
-
-#include "ui_clangprojectsettingswidget.h"
-
-#include "clangprojectsettings.h"
-
-#include <QPointer>
-
-namespace ProjectExplorer { class Project; }
-
-namespace ClangCodeModel {
-namespace Internal {
-
-class ClangProjectSettingsWidget: public QWidget
-{
- Q_OBJECT
-
-public:
- explicit ClangProjectSettingsWidget(ProjectExplorer::Project *project);
-
-private:
- void onDelayedTemplateParseClicked(bool);
- void onGlobalCustomChanged(int index);
- void onAboutToSaveProjectSettings();
-
- void syncWidgets();
- void syncGlobalCustomComboBox();
- void syncOtherWidgetsToComboBox();
-
-private:
- Ui::ClangProjectSettingsWidget m_ui;
- ClangProjectSettings &m_projectSettings;
-};
-
-} // namespace Internal
-} // namespace ClangCodeModel
diff --git a/src/plugins/clangcodemodel/clangprojectsettingswidget.ui b/src/plugins/clangcodemodel/clangprojectsettingswidget.ui
deleted file mode 100644
index d21ac3c731..0000000000
--- a/src/plugins/clangcodemodel/clangprojectsettingswidget.ui
+++ /dev/null
@@ -1,98 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
- <class>ClangCodeModel::Internal::ClangProjectSettingsWidget</class>
- <widget class="QWidget" name="ClangCodeModel::Internal::ClangProjectSettingsWidget">
- <property name="enabled">
- <bool>true</bool>
- </property>
- <property name="geometry">
- <rect>
- <x>0</x>
- <y>0</y>
- <width>814</width>
- <height>330</height>
- </rect>
- </property>
- <layout class="QVBoxLayout" name="verticalLayout">
- <property name="leftMargin">
- <number>0</number>
- </property>
- <property name="topMargin">
- <number>0</number>
- </property>
- <property name="rightMargin">
- <number>0</number>
- </property>
- <property name="bottomMargin">
- <number>0</number>
- </property>
- <item>
- <layout class="QHBoxLayout" name="horizontalLayout">
- <item>
- <widget class="QComboBox" name="globalOrCustomComboBox">
- <property name="sizePolicy">
- <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- <item>
- <property name="text">
- <string>Use Global Settings</string>
- </property>
- </item>
- <item>
- <property name="text">
- <string>Use Customized Settings</string>
- </property>
- </item>
- </widget>
- </item>
- <item>
- <widget class="QLabel" name="gotoGlobalSettingsLabel">
- <property name="text">
- <string>&lt;a href=&quot;target&quot;&gt;Open Global Settings&lt;/a&gt;</string>
- </property>
- </widget>
- </item>
- </layout>
- </item>
- <item>
- <widget class="QCheckBox" name="delayedTemplateParseCheckBox">
- <property name="toolTip">
- <string>Parse templates in a MSVC-compliant way. This helps to parse headers for example from Active Template Library (ATL) or Windows Runtime Library (WRL).
-However, using the relaxed and extended rules means also that no highlighting/completion can be provided within template functions.</string>
- </property>
- <property name="text">
- <string>Enable MSVC-compliant template parsing</string>
- </property>
- </widget>
- </item>
- <item>
- <widget class="CppEditor::ClangDiagnosticConfigsSelectionWidget" name="clangDiagnosticConfigsSelectionWidget" native="true"/>
- </item>
- <item>
- <spacer name="verticalSpacer">
- <property name="orientation">
- <enum>Qt::Vertical</enum>
- </property>
- <property name="sizeHint" stdset="0">
- <size>
- <width>20</width>
- <height>40</height>
- </size>
- </property>
- </spacer>
- </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/clangcodemodel/clangtextmark.cpp b/src/plugins/clangcodemodel/clangtextmark.cpp
index c3ead0aa4c..6120e90e91 100644
--- a/src/plugins/clangcodemodel/clangtextmark.cpp
+++ b/src/plugins/clangcodemodel/clangtextmark.cpp
@@ -30,7 +30,6 @@
#include "clangdiagnostictooltipwidget.h"
#include "clangeditordocumentprocessor.h"
#include "clangmodelmanagersupport.h"
-#include "clangprojectsettings.h"
#include "clangutils.h"
#include <coreplugin/icore.h>
@@ -113,33 +112,18 @@ void disableDiagnosticInConfig(ClangDiagnosticConfig &config, const ClangDiagnos
}
}
-ClangDiagnosticConfig diagnosticConfig(const ClangProjectSettings &projectSettings,
- const CppCodeModelSettings &globalSettings)
+ClangDiagnosticConfig diagnosticConfig()
{
Project *project = projectForCurrentEditor();
QTC_ASSERT(project, return {});
-
- // Get config id
- Id currentConfigId = projectSettings.warningConfigId();
- if (projectSettings.useGlobalConfig())
- currentConfigId = globalSettings.clangDiagnosticConfigId();
-
- // Get config
- ClangDiagnosticConfigsModel configsModel = CppEditor::diagnosticConfigsModel();
- QTC_ASSERT(configsModel.hasConfigWithId(currentConfigId), return {});
- return configsModel.configWithId(currentConfigId);
+ return warningsConfigForProject(project);
}
bool isDiagnosticConfigChangable(Project *project, const ClangDiagnostic &diagnostic)
{
if (!project)
return false;
-
- ClangProjectSettings &projectSettings = ClangModelManagerSupport::instance()->projectSettings(
- project);
- const CppCodeModelSettings *globalSettings = codeModelSettings();
- const ClangDiagnosticConfig config = diagnosticConfig(projectSettings, *globalSettings);
-
+ const ClangDiagnosticConfig config = diagnosticConfig();
if (config.clangTidyMode() == ClangDiagnosticConfig::TidyMode::UseConfigFile
&& diagnosticType(diagnostic) == DiagnosticType::Tidy) {
return false;
@@ -152,13 +136,8 @@ void disableDiagnosticInCurrentProjectConfig(const ClangDiagnostic &diagnostic)
Project *project = projectForCurrentEditor();
QTC_ASSERT(project, return );
- // Get settings
- ClangProjectSettings &projectSettings = ClangModelManagerSupport::instance()->projectSettings(
- project);
- CppCodeModelSettings *globalSettings = codeModelSettings();
-
// Get config
- ClangDiagnosticConfig config = diagnosticConfig(projectSettings, *globalSettings);
+ ClangDiagnosticConfig config = diagnosticConfig();
ClangDiagnosticConfigsModel configsModel = CppEditor::diagnosticConfigsModel();
// Create copy if needed
@@ -174,14 +153,13 @@ void disableDiagnosticInCurrentProjectConfig(const ClangDiagnostic &diagnostic)
configsModel.appendOrUpdate(config);
// Set global settings
- globalSettings->setClangCustomDiagnosticConfigs(configsModel.customConfigs());
- globalSettings->toSettings(Core::ICore::settings());
+ ClangdSettings::setCustomDiagnosticConfigs(configsModel.customConfigs());
// Set project settings
- if (projectSettings.useGlobalConfig())
- projectSettings.setUseGlobalConfig(false);
- projectSettings.setWarningConfigId(config.id());
- projectSettings.store();
+ ClangdProjectSettings projectSettings(project);
+ if (projectSettings.useGlobalSettings())
+ projectSettings.setUseGlobalSettings(false);
+ projectSettings.setDiagnosticConfigId(config.id());
// Notify the user about changed project specific settings
const QString text
diff --git a/src/plugins/clangcodemodel/clangutils.cpp b/src/plugins/clangcodemodel/clangutils.cpp
index 664442cced..d2d5e69070 100644
--- a/src/plugins/clangcodemodel/clangutils.cpp
+++ b/src/plugins/clangcodemodel/clangutils.cpp
@@ -25,13 +25,12 @@
#include "clangutils.h"
-#include "clangeditordocumentprocessor.h"
#include "clangmodelmanagersupport.h"
-#include "clangprojectsettings.h"
#include <coreplugin/icore.h>
#include <coreplugin/idocument.h>
#include <cppeditor/baseeditordocumentparser.h>
+#include <cppeditor/clangdiagnosticconfigsmodel.h>
#include <cppeditor/compileroptionsbuilder.h>
#include <cppeditor/cppcodemodelsettings.h>
#include <cppeditor/cppmodelmanager.h>
@@ -276,14 +275,6 @@ QString DiagnosticTextInfo::clazyCheckName(const QString &option)
}
-namespace {
-static ClangProjectSettings &getProjectSettings(ProjectExplorer::Project *project)
-{
- QTC_CHECK(project);
- return ClangModelManagerSupport::instance()->projectSettings(project);
-}
-} // namespace
-
QJsonArray clangOptionsForFile(const ProjectFile &file, const ProjectPart &projectPart,
const QJsonArray &generalOptions, UsePrecompiledHeaders usePch)
{
@@ -308,30 +299,12 @@ QJsonArray clangOptionsForFile(const ProjectFile &file, const ProjectPart &proje
ClangDiagnosticConfig warningsConfigForProject(Project *project)
{
- if (project) {
- ClangProjectSettings &projectSettings = ClangModelManagerSupport::instance()
- ->projectSettings(project);
- if (!projectSettings.useGlobalConfig()) {
- const Utils::Id warningConfigId = projectSettings.warningConfigId();
- const CppEditor::ClangDiagnosticConfigsModel configsModel
- = CppEditor::diagnosticConfigsModel();
- if (configsModel.hasConfigWithId(warningConfigId))
- return configsModel.configWithId(warningConfigId);
- }
- }
- return CppEditor::codeModelSettings()->clangDiagnosticConfig();
+ return ClangdSettings(ClangdProjectSettings(project).settings()).diagnosticConfig();
}
-const QStringList optionsForProject(ProjectExplorer::Project *project,
- const ClangDiagnosticConfig &warningsConfig)
+const QStringList globalClangOptions()
{
- QStringList options = ClangDiagnosticConfigsModel::globalDiagnosticOptions();
- if (!warningsConfig.useBuildSystemWarnings()) {
- options += project
- ? getProjectSettings(project).commandLineOptions()
- : ClangProjectSettings::globalCommandLineOptions();
- }
- return options;
+ return ClangDiagnosticConfigsModel::globalDiagnosticOptions();
}
// 7.3.3: using typename(opt) nested-name-specifier unqualified-id ;
diff --git a/src/plugins/clangcodemodel/clangutils.h b/src/plugins/clangcodemodel/clangutils.h
index 71fa091971..4eef4b90dd 100644
--- a/src/plugins/clangcodemodel/clangutils.h
+++ b/src/plugins/clangcodemodel/clangutils.h
@@ -52,8 +52,7 @@ namespace ClangCodeModel {
namespace Internal {
CppEditor::ClangDiagnosticConfig warningsConfigForProject(ProjectExplorer::Project *project);
-const QStringList optionsForProject(ProjectExplorer::Project *project,
- const CppEditor::ClangDiagnosticConfig &warningsConfig);
+const QStringList globalClangOptions();
CppEditor::CompilerOptionsBuilder clangOptionsBuilder(
const CppEditor::ProjectPart &projectPart,
diff --git a/src/plugins/clangtools/clangtoolssettings.cpp b/src/plugins/clangtools/clangtoolssettings.cpp
index ee099ddfae..7578b25278 100644
--- a/src/plugins/clangtools/clangtoolssettings.cpp
+++ b/src/plugins/clangtools/clangtoolssettings.cpp
@@ -30,6 +30,7 @@
#include <coreplugin/icore.h>
#include <cppeditor/clangdiagnosticconfig.h>
+#include <cppeditor/clangdiagnosticconfigsmodel.h>
#include <cppeditor/cppcodemodelsettings.h>
#include <cppeditor/cpptoolsreuse.h>
@@ -123,7 +124,7 @@ static QVariantMap convertToMapFromVersionBefore410(QSettings *s)
ClangDiagnosticConfigs importDiagnosticConfigsFromCodeModel()
{
- const ClangDiagnosticConfigs configs = codeModelSettings()->clangCustomDiagnosticConfigs();
+ const ClangDiagnosticConfigs configs = ClangdSettings::instance().customDiagnosticConfigs();
ClangDiagnosticConfigs tidyClazyConfigs;
ClangDiagnosticConfigs clangOnlyConfigs;
@@ -132,12 +133,6 @@ ClangDiagnosticConfigs importDiagnosticConfigsFromCodeModel()
return !config.clazyChecks().isEmpty()
|| (!config.clangTidyChecks().isEmpty() && config.clangTidyChecks() != "-*");
});
-
- if (!tidyClazyConfigs.isEmpty()) {
- codeModelSettings()->setClangCustomDiagnosticConfigs(clangOnlyConfigs);
- codeModelSettings()->toSettings(Core::ICore::settings());
- }
-
return tidyClazyConfigs;
}
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)