From 92fdbdc404271a4f8638f6831ada448ce830eb72 Mon Sep 17 00:00:00 2001 From: Ivan Donchevskii Date: Mon, 7 May 2018 15:40:14 +0200 Subject: [PATCH] ClangTools: Use separate diagnostic settings for ClangTools Share diagnostic configuration profiles between ClangTools and ClangCodeModel but keep the unique configuration index for each of them. Change-Id: I86d95f7f220e929d60a53f3633167adfcd62a2da Reviewed-by: Nikolai Kosjar --- .../clangtools/clangtidyclazyrunner.cpp | 10 ++- .../clangtools/clangtoolsconfigwidget.cpp | 21 ++++++ .../clangtools/clangtoolsconfigwidget.ui | 65 +++++++++++++++---- src/plugins/clangtools/clangtoolssettings.cpp | 22 +++++++ src/plugins/clangtools/clangtoolssettings.h | 8 +++ 5 files changed, 113 insertions(+), 13 deletions(-) diff --git a/src/plugins/clangtools/clangtidyclazyrunner.cpp b/src/plugins/clangtools/clangtidyclazyrunner.cpp index c3418525c45..9c524cf2c57 100644 --- a/src/plugins/clangtools/clangtidyclazyrunner.cpp +++ b/src/plugins/clangtools/clangtidyclazyrunner.cpp @@ -25,10 +25,13 @@ #include "clangtidyclazyrunner.h" +#include "clangtoolssettings.h" + #include #include #include +#include #include #include @@ -75,7 +78,12 @@ QStringList ClangTidyClazyRunner::constructCommandLineArguments(const QStringLis << QString("-serialize-diagnostics") << QString(m_logFile); - const ClangDiagnosticConfig config = CppTools::codeModelSettings()->clangDiagnosticConfig(); + const ClangDiagnosticConfigsModel configsModel( + CppTools::codeModelSettings()->clangCustomDiagnosticConfigs()); + const Core::Id configId = ClangToolsSettings::instance()->savedDiagnosticConfigId(); + QTC_ASSERT(configsModel.hasConfigWithId(configId), return arguments;); + + const ClangDiagnosticConfig &config = configsModel.configWithId(configId); const ClangDiagnosticConfig::TidyMode tidyMode = config.clangTidyMode(); if (tidyMode != ClangDiagnosticConfig::TidyMode::Disabled) { diff --git a/src/plugins/clangtools/clangtoolsconfigwidget.cpp b/src/plugins/clangtools/clangtoolsconfigwidget.cpp index d99c81c6ac6..45e7b4041ca 100644 --- a/src/plugins/clangtools/clangtoolsconfigwidget.cpp +++ b/src/plugins/clangtools/clangtoolsconfigwidget.cpp @@ -28,6 +28,10 @@ #include "clangtoolsutils.h" +#include +#include +#include + #include #include @@ -55,6 +59,23 @@ ClangToolsConfigWidget::ClangToolsConfigWidget( connect(m_ui->buildBeforeAnalysis, &QCheckBox::toggled, [settings](bool checked) { settings->setBuildBeforeAnalysis(checked); }); + + m_ui->clangDiagnosticConfigsSelectionWidget->refresh(settings->savedDiagnosticConfigId()); + + CppTools::connectToClangDiagnosticConfigsDialog(m_ui->manageButton); + + connect(m_ui->clangDiagnosticConfigsSelectionWidget, + &CppTools::ClangDiagnosticConfigsSelectionWidget::currentConfigChanged, + this, [this](const Core::Id ¤tConfigId) { + m_settings->setDiagnosticConfigId(currentConfigId); + }); + + connect(CppTools::codeModelSettings().data(), &CppTools::CppCodeModelSettings::changed, + this, [this]() { + // Settings were applied so apply also the current selection if possible. + m_ui->clangDiagnosticConfigsSelectionWidget->refresh(m_settings->diagnosticConfigId()); + m_settings->writeSettings(); + }); } ClangToolsConfigWidget::~ClangToolsConfigWidget() diff --git a/src/plugins/clangtools/clangtoolsconfigwidget.ui b/src/plugins/clangtools/clangtoolsconfigwidget.ui index 2f7e41e5b55..6d78aad6f4c 100644 --- a/src/plugins/clangtools/clangtoolsconfigwidget.ui +++ b/src/plugins/clangtools/clangtoolsconfigwidget.ui @@ -19,16 +19,23 @@ General - - - + + + - Simultaneous processes: + Build the project before analysis - - + + + + + + Simultaneous processes: + + + @@ -54,12 +61,39 @@ - - - - Build the project before analysis - - + + + + + + Diagnostic Configuration: + + + + + + + + + + Manage... + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + @@ -79,6 +113,13 @@ + + + CppTools::ClangDiagnosticConfigsSelectionWidget + QWidget +
cpptools/clangdiagnosticconfigsselectionwidget.h
+
+
diff --git a/src/plugins/clangtools/clangtoolssettings.cpp b/src/plugins/clangtools/clangtoolssettings.cpp index af4fa263367..87b00d9d64e 100644 --- a/src/plugins/clangtools/clangtoolssettings.cpp +++ b/src/plugins/clangtools/clangtoolssettings.cpp @@ -37,6 +37,7 @@ static const char simultaneousProcessesKey[] = "simultaneousProcesses"; static const char buildBeforeAnalysisKey[] = "buildBeforeAnalysis"; +static const char diagnosticConfigIdKey[] = "diagnosticConfigId"; namespace ClangTools { namespace Internal { @@ -82,6 +83,21 @@ void ClangToolsSettings::setBuildBeforeAnalysis(bool build) m_buildBeforeAnalysis = build; } +Core::Id ClangToolsSettings::savedDiagnosticConfigId() const +{ + return m_savedDiagnosticConfigId; +} + +Core::Id ClangToolsSettings::diagnosticConfigId() const +{ + return m_diagnosticConfigId; +} + +void ClangToolsSettings::setDiagnosticConfigId(Core::Id id) +{ + m_diagnosticConfigId = id; +} + void ClangToolsSettings::updateSavedBuildBeforeAnalysiIfRequired() { if (m_savedBuildBeforeAnalysis == m_buildBeforeAnalysis) @@ -101,6 +117,10 @@ void ClangToolsSettings::readSettings() defaultSimultaneousProcesses).toInt(); m_buildBeforeAnalysis = settings->value(QString(buildBeforeAnalysisKey), true).toBool(); + + m_savedDiagnosticConfigId = m_diagnosticConfigId + = Core::Id::fromSetting(settings->value(QString(diagnosticConfigIdKey))); + updateSavedBuildBeforeAnalysiIfRequired(); settings->endGroup(); @@ -112,8 +132,10 @@ void ClangToolsSettings::writeSettings() settings->beginGroup(QString(Constants::SETTINGS_ID)); settings->setValue(QString(simultaneousProcessesKey), m_simultaneousProcesses); settings->setValue(QString(buildBeforeAnalysisKey), m_buildBeforeAnalysis); + settings->setValue(QString(diagnosticConfigIdKey), m_diagnosticConfigId.toSetting()); m_savedSimultaneousProcesses = m_simultaneousProcesses; + m_savedDiagnosticConfigId = m_diagnosticConfigId; updateSavedBuildBeforeAnalysiIfRequired(); settings->endGroup(); diff --git a/src/plugins/clangtools/clangtoolssettings.h b/src/plugins/clangtools/clangtoolssettings.h index 1bc72c968e9..8d3168338d2 100644 --- a/src/plugins/clangtools/clangtoolssettings.h +++ b/src/plugins/clangtools/clangtoolssettings.h @@ -25,6 +25,8 @@ #pragma once +#include + #include #include @@ -41,6 +43,7 @@ public: int savedSimultaneousProcesses() const; bool savedBuildBeforeAnalysis() const; + Core::Id savedDiagnosticConfigId() const; int simultaneousProcesses() const; void setSimultaneousProcesses(int processes); @@ -48,6 +51,9 @@ public: int buildBeforeAnalysis() const; void setBuildBeforeAnalysis(bool build); + Core::Id diagnosticConfigId() const; + void setDiagnosticConfigId(Core::Id id); + signals: void buildBeforeAnalysisChanged(bool checked) const; @@ -61,6 +67,8 @@ private: int m_savedSimultaneousProcesses = -1; bool m_buildBeforeAnalysis = false; bool m_savedBuildBeforeAnalysis= false; + Core::Id m_diagnosticConfigId; + Core::Id m_savedDiagnosticConfigId; }; } // namespace Internal