Clang/ClangTools: Separate custom diagnostic configs

Add a separate pool of custom diagnostic configs for the
ClangTools plugin. That is, the diagnostic configs in

  Menu: Tools > C++ > Code Model

are not shared anymore with the configs at

  Menu: Tools > Analyzer > ClangTools

On plugin initialization of ClangTools, move tidy/clazy related configs
to ClangTools.

Change-Id: Id06087a58b53e466a3d7bbac669550c5fbe9899d
Reviewed-by: Cristian Adam <cristian.adam@qt.io>
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
This commit is contained in:
Nikolai Kosjar
2019-09-25 15:46:15 +02:00
parent d2648db914
commit b895dfa382
35 changed files with 523 additions and 443 deletions

View File

@@ -39,7 +39,6 @@
#include <cpptools/builtincursorinfo.h>
#include <cpptools/clangdiagnosticconfigsmodel.h>
#include <cpptools/clangdiagnosticconfigsmodel.h>
#include <cpptools/compileroptionsbuilder.h>
#include <cpptools/cppcodemodelsettings.h>
#include <cpptools/cppmodelmanager.h>
@@ -480,8 +479,8 @@ private:
ClangProjectSettings &projectSettings = getProjectSettings(m_projectPart.project);
if (!projectSettings.useGlobalConfig()) {
const Core::Id warningConfigId = projectSettings.warningConfigId();
const CppTools::ClangDiagnosticConfigsModel configsModel(
CppTools::codeModelSettings()->clangCustomDiagnosticConfigs());
const CppTools::ClangDiagnosticConfigsModel configsModel
= CppTools::diagnosticConfigsModel();
if (configsModel.hasConfigWithId(warningConfigId)) {
addDiagnosticOptionsForConfig(configsModel.configWithId(warningConfigId));
return;
@@ -500,42 +499,6 @@ private:
: CppTools::UseBuildSystemWarnings::No;
m_options.append(diagnosticConfig.clangOptions());
addClangTidyOptions(diagnosticConfig);
addClazyOptions(diagnosticConfig.clazyChecks());
}
void addClangTidyOptions(const CppTools::ClangDiagnosticConfig &diagnosticConfig)
{
using Mode = CppTools::ClangDiagnosticConfig::TidyMode;
Mode tidyMode = diagnosticConfig.clangTidyMode();
if (tidyMode == Mode::Disabled)
return;
m_options.append(CppTools::XclangArgs({"-add-plugin", "clang-tidy"}));
if (tidyMode == Mode::File)
return;
const QString checks = diagnosticConfig.clangTidyChecks();
if (!checks.isEmpty())
m_options.append(CppTools::XclangArgs({"-plugin-arg-clang-tidy", "-checks=" + checks}));
}
void addClazyOptions(const QString &checks)
{
if (checks.isEmpty())
return;
m_options.append(CppTools::XclangArgs({"-add-plugin",
"clazy",
"-plugin-arg-clazy",
"enable-all-fixits",
"-plugin-arg-clazy",
"no-autowrite-fixits",
"-plugin-arg-clazy",
checks,
"-plugin-arg-clazy",
"ignore-included-files"}));
}
void addGlobalDiagnosticOptions()

View File

@@ -64,6 +64,17 @@ ClangProjectSettingsWidget::ClangProjectSettingsWidget(ProjectExplorer::Project
connect(m_ui.clangDiagnosticConfigsSelectionWidget,
&ClangDiagnosticConfigsSelectionWidget::currentConfigChanged,
this, &ClangProjectSettingsWidget::onCurrentWarningConfigChanged);
connect(m_ui.clangDiagnosticConfigsSelectionWidget,
&ClangDiagnosticConfigsSelectionWidget::diagnosticConfigsEdited,
this, [this](const ClangDiagnosticConfigs &configs){
QSharedPointer<CppCodeModelSettings> cmSettings = CppTools::codeModelSettings();
const ClangDiagnosticConfigsModel configsModel = CppTools::diagnosticConfigsModel(configs);
if (!configsModel.hasConfigWithId(cmSettings->clangDiagnosticConfigId()))
cmSettings->resetClangDiagnosticConfigId();
cmSettings->setClangCustomDiagnosticConfigs(configs);
cmSettings->toSettings(Core::ICore::settings());
refreshDiagnosticConfigsWidgetFromSettings();
});
connect(m_ui.delayedTemplateParseCheckBox, &QCheckBox::toggled,
this, &ClangProjectSettingsWidget::onDelayedTemplateParseClicked);
@@ -146,7 +157,9 @@ void ClangProjectSettingsWidget::syncOtherWidgetsToComboBox()
void ClangProjectSettingsWidget::refreshDiagnosticConfigsWidgetFromSettings()
{
m_ui.clangDiagnosticConfigsSelectionWidget->refresh(configIdForProject(m_projectSettings));
m_ui.clangDiagnosticConfigsSelectionWidget->refresh(CppTools::diagnosticConfigsModel(),
configIdForProject(m_projectSettings),
/*showTidyClazyUi=*/false);
}
} // namespace Internal

View File

@@ -139,7 +139,7 @@ ClangDiagnosticConfig diagnosticConfig(ClangProjectSettings &projectSettings,
currentConfigId = globalSettings.clangDiagnosticConfigId();
// Get config
ClangDiagnosticConfigsModel configsModel(globalSettings.clangCustomDiagnosticConfigs());
ClangDiagnosticConfigsModel configsModel = CppTools::diagnosticConfigsModel();
QTC_ASSERT(configsModel.hasConfigWithId(currentConfigId), return {});
return configsModel.configWithId(currentConfigId);
}
@@ -174,7 +174,7 @@ void disableDiagnosticInCurrentProjectConfig(const ClangBackEnd::DiagnosticConta
// Get config
ClangDiagnosticConfig config = diagnosticConfig(projectSettings, *globalSettings);
ClangDiagnosticConfigsModel configsModel(globalSettings->clangCustomDiagnosticConfigs());
ClangDiagnosticConfigsModel configsModel = CppTools::diagnosticConfigsModel();
// Create copy if needed
if (config.isReadOnly()) {