diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2022-05-19 14:48:09 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2022-05-23 12:15:40 +0000 |
commit | 760cf632afddbdbc6cf1ded0655e8286ccbffd1f (patch) | |
tree | 3fe249471dd30a39c035e14f748e94f81004c46e | |
parent | c117e3d3c9b5742148a0d0f3ed975705bbdb9118 (diff) |
Move clang diagnostics config settings to clangd settings page
It was confusing to have both "Clang Code Model" and "clangd" project
settings pages, so we merge them.
Along the way, a lot of code dropped off.
Change-Id: I780850b716195c3729403ae59f0794c11b5c556d
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: David Schulz <david.schulz@qt.io>
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><a href="target">Open Global Settings</a></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><i>The Clang Code Model is enabled because the corresponding plugin is loaded.</i></string> - </property> - </widget> - </item> - <item> - <widget class="QLabel" name="clangCodeModelIsDisabledHint"> - <property name="text"> - <string><i>The Clang Code Model is disabled because the corresponding plugin is not loaded.</i></string> - </property> - </widget> - </item> - <item> - <widget class="CppEditor::ClangDiagnosticConfigsSelectionWidget" name="clangDiagnosticConfigsSelectionWidget" native="true"/> - </item> - <item> - <layout class="QHBoxLayout" name="horizontalLayout_2"> - <item> - <spacer name="horizontalSpacer_2"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>40</width> - <height>20</height> - </size> - </property> - </spacer> - </item> - </layout> - </item> - </layout> - </widget> - </item> - <item> <spacer name="verticalSpacer"> <property name="orientation"> <enum>Qt::Vertical</enum> @@ -144,13 +101,6 @@ </item> </layout> </widget> - <customwidgets> - <customwidget> - <class>CppEditor::ClangDiagnosticConfigsSelectionWidget</class> - <extends>QWidget</extends> - <header>cppeditor/clangdiagnosticconfigsselectionwidget.h</header> - </customwidget> - </customwidgets> <resources/> <connections/> </ui> diff --git a/src/plugins/cppeditor/cpptoolsreuse.cpp b/src/plugins/cppeditor/cpptoolsreuse.cpp index e2362efa58..34d4aac046 100644 --- a/src/plugins/cppeditor/cpptoolsreuse.cpp +++ b/src/plugins/cppeditor/cpptoolsreuse.cpp @@ -25,6 +25,7 @@ #include "cpptoolsreuse.h" +#include "clangdiagnosticconfigsmodel.h" #include "cppautocompleter.h" #include "cppcodemodelsettings.h" #include "cppeditorconstants.h" @@ -423,7 +424,7 @@ ClangDiagnosticConfigsModel diagnosticConfigsModel(const ClangDiagnosticConfigs ClangDiagnosticConfigsModel diagnosticConfigsModel() { - return diagnosticConfigsModel(codeModelSettings()->clangCustomDiagnosticConfigs()); + return diagnosticConfigsModel(ClangdSettings::instance().customDiagnosticConfigs()); } NSVisitor::NSVisitor(const CppRefactoringFile *file, const QStringList &namespaces, int symbolPos) |