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 <nikolai.kosjar@qt.io>
This commit is contained in:
Ivan Donchevskii
2018-05-07 15:40:14 +02:00
parent 3737b6a124
commit 92fdbdc404
5 changed files with 113 additions and 13 deletions

View File

@@ -25,10 +25,13 @@
#include "clangtidyclazyrunner.h" #include "clangtidyclazyrunner.h"
#include "clangtoolssettings.h"
#include <cpptools/cppcodemodelsettings.h> #include <cpptools/cppcodemodelsettings.h>
#include <cpptools/cpptoolsreuse.h> #include <cpptools/cpptoolsreuse.h>
#include <utils/synchronousprocess.h> #include <utils/synchronousprocess.h>
#include <utils/qtcassert.h>
#include <QDebug> #include <QDebug>
#include <QDir> #include <QDir>
@@ -75,7 +78,12 @@ QStringList ClangTidyClazyRunner::constructCommandLineArguments(const QStringLis
<< QString("-serialize-diagnostics") << QString("-serialize-diagnostics")
<< QString(m_logFile); << 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(); const ClangDiagnosticConfig::TidyMode tidyMode = config.clangTidyMode();
if (tidyMode != ClangDiagnosticConfig::TidyMode::Disabled) { if (tidyMode != ClangDiagnosticConfig::TidyMode::Disabled) {

View File

@@ -28,6 +28,10 @@
#include "clangtoolsutils.h" #include "clangtoolsutils.h"
#include <cpptools/clangdiagnosticconfigswidget.h>
#include <cpptools/cppcodemodelsettings.h>
#include <cpptools/cpptoolsreuse.h>
#include <QDir> #include <QDir>
#include <QThread> #include <QThread>
@@ -55,6 +59,23 @@ ClangToolsConfigWidget::ClangToolsConfigWidget(
connect(m_ui->buildBeforeAnalysis, &QCheckBox::toggled, [settings](bool checked) { connect(m_ui->buildBeforeAnalysis, &QCheckBox::toggled, [settings](bool checked) {
settings->setBuildBeforeAnalysis(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 &currentConfigId) {
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() ClangToolsConfigWidget::~ClangToolsConfigWidget()

View File

@@ -19,16 +19,23 @@
<property name="title"> <property name="title">
<string>General</string> <string>General</string>
</property> </property>
<layout class="QFormLayout" name="formLayout"> <layout class="QVBoxLayout" name="verticalLayout_2">
<item row="1" column="0"> <item>
<widget class="QCheckBox" name="buildBeforeAnalysis">
<property name="text">
<string>Build the project before analysis</string>
</property>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="processesLayout">
<item>
<widget class="QLabel" name="label_2"> <widget class="QLabel" name="label_2">
<property name="text"> <property name="text">
<string>Simultaneous processes:</string> <string>Simultaneous processes:</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="1">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item> <item>
<widget class="QSpinBox" name="simultaneousProccessesSpinBox"> <widget class="QSpinBox" name="simultaneousProccessesSpinBox">
<property name="minimum"> <property name="minimum">
@@ -54,13 +61,40 @@
</item> </item>
</layout> </layout>
</item> </item>
<item row="0" column="0"> <item>
<widget class="QCheckBox" name="buildBeforeAnalysis"> <layout class="QHBoxLayout" name="clangDiagnosticsLayout">
<item>
<widget class="QLabel" name="clangDiagnosticsLabel">
<property name="text"> <property name="text">
<string>Build the project before analysis</string> <string>Diagnostic Configuration:</string>
</property> </property>
</widget> </widget>
</item> </item>
<item>
<widget class="CppTools::ClangDiagnosticConfigsSelectionWidget" name="clangDiagnosticConfigsSelectionWidget" native="true"/>
</item>
<item>
<widget class="QPushButton" name="manageButton">
<property name="text">
<string>Manage...</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<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> </layout>
</widget> </widget>
</item> </item>
@@ -79,6 +113,13 @@
</item> </item>
</layout> </layout>
</widget> </widget>
<customwidgets>
<customwidget>
<class>CppTools::ClangDiagnosticConfigsSelectionWidget</class>
<extends>QWidget</extends>
<header>cpptools/clangdiagnosticconfigsselectionwidget.h</header>
</customwidget>
</customwidgets>
<resources/> <resources/>
<connections/> <connections/>
</ui> </ui>

View File

@@ -37,6 +37,7 @@
static const char simultaneousProcessesKey[] = "simultaneousProcesses"; static const char simultaneousProcessesKey[] = "simultaneousProcesses";
static const char buildBeforeAnalysisKey[] = "buildBeforeAnalysis"; static const char buildBeforeAnalysisKey[] = "buildBeforeAnalysis";
static const char diagnosticConfigIdKey[] = "diagnosticConfigId";
namespace ClangTools { namespace ClangTools {
namespace Internal { namespace Internal {
@@ -82,6 +83,21 @@ void ClangToolsSettings::setBuildBeforeAnalysis(bool build)
m_buildBeforeAnalysis = 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() void ClangToolsSettings::updateSavedBuildBeforeAnalysiIfRequired()
{ {
if (m_savedBuildBeforeAnalysis == m_buildBeforeAnalysis) if (m_savedBuildBeforeAnalysis == m_buildBeforeAnalysis)
@@ -101,6 +117,10 @@ void ClangToolsSettings::readSettings()
defaultSimultaneousProcesses).toInt(); defaultSimultaneousProcesses).toInt();
m_buildBeforeAnalysis = settings->value(QString(buildBeforeAnalysisKey), true).toBool(); m_buildBeforeAnalysis = settings->value(QString(buildBeforeAnalysisKey), true).toBool();
m_savedDiagnosticConfigId = m_diagnosticConfigId
= Core::Id::fromSetting(settings->value(QString(diagnosticConfigIdKey)));
updateSavedBuildBeforeAnalysiIfRequired(); updateSavedBuildBeforeAnalysiIfRequired();
settings->endGroup(); settings->endGroup();
@@ -112,8 +132,10 @@ void ClangToolsSettings::writeSettings()
settings->beginGroup(QString(Constants::SETTINGS_ID)); settings->beginGroup(QString(Constants::SETTINGS_ID));
settings->setValue(QString(simultaneousProcessesKey), m_simultaneousProcesses); settings->setValue(QString(simultaneousProcessesKey), m_simultaneousProcesses);
settings->setValue(QString(buildBeforeAnalysisKey), m_buildBeforeAnalysis); settings->setValue(QString(buildBeforeAnalysisKey), m_buildBeforeAnalysis);
settings->setValue(QString(diagnosticConfigIdKey), m_diagnosticConfigId.toSetting());
m_savedSimultaneousProcesses = m_simultaneousProcesses; m_savedSimultaneousProcesses = m_simultaneousProcesses;
m_savedDiagnosticConfigId = m_diagnosticConfigId;
updateSavedBuildBeforeAnalysiIfRequired(); updateSavedBuildBeforeAnalysiIfRequired();
settings->endGroup(); settings->endGroup();

View File

@@ -25,6 +25,8 @@
#pragma once #pragma once
#include <coreplugin/id.h>
#include <QObject> #include <QObject>
#include <QString> #include <QString>
@@ -41,6 +43,7 @@ public:
int savedSimultaneousProcesses() const; int savedSimultaneousProcesses() const;
bool savedBuildBeforeAnalysis() const; bool savedBuildBeforeAnalysis() const;
Core::Id savedDiagnosticConfigId() const;
int simultaneousProcesses() const; int simultaneousProcesses() const;
void setSimultaneousProcesses(int processes); void setSimultaneousProcesses(int processes);
@@ -48,6 +51,9 @@ public:
int buildBeforeAnalysis() const; int buildBeforeAnalysis() const;
void setBuildBeforeAnalysis(bool build); void setBuildBeforeAnalysis(bool build);
Core::Id diagnosticConfigId() const;
void setDiagnosticConfigId(Core::Id id);
signals: signals:
void buildBeforeAnalysisChanged(bool checked) const; void buildBeforeAnalysisChanged(bool checked) const;
@@ -61,6 +67,8 @@ private:
int m_savedSimultaneousProcesses = -1; int m_savedSimultaneousProcesses = -1;
bool m_buildBeforeAnalysis = false; bool m_buildBeforeAnalysis = false;
bool m_savedBuildBeforeAnalysis= false; bool m_savedBuildBeforeAnalysis= false;
Core::Id m_diagnosticConfigId;
Core::Id m_savedDiagnosticConfigId;
}; };
} // namespace Internal } // namespace Internal