aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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)