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

@@ -28,6 +28,11 @@
#include "clangtoolsconstants.h"
#include <coreplugin/icore.h>
#include <cpptools/clangdiagnosticconfig.h>
#include <cpptools/cppcodemodelsettings.h>
#include <cpptools/cpptoolsreuse.h>
#include <utils/algorithm.h>
#include <QThread>
@@ -39,11 +44,19 @@ static const char buildBeforeAnalysisKey[] = "BuildBeforeAnalysis";
static const char oldDiagnosticConfigIdKey[] = "diagnosticConfigId";
using namespace CppTools;
namespace ClangTools {
namespace Internal {
static Core::Id defaultDiagnosticId()
{
return ClangTools::Constants::DIAG_CONFIG_TIDY_AND_CLAZY;
}
RunSettings::RunSettings()
: m_parallelJobs(qMax(0, QThread::idealThreadCount() / 2))
: m_diagnosticConfigId(defaultDiagnosticId())
, m_parallelJobs(qMax(0, QThread::idealThreadCount() / 2))
{
}
@@ -61,6 +74,11 @@ void RunSettings::toMap(QVariantMap &map, const QString &prefix) const
map.insert(prefix + buildBeforeAnalysisKey, m_buildBeforeAnalysis);
}
void RunSettings::resetDiagnosticConfigId()
{
m_diagnosticConfigId = defaultDiagnosticId();
}
ClangToolsSettings::ClangToolsSettings()
{
readSettings();
@@ -89,14 +107,40 @@ static QVariantMap convertToMapFromVersionBefore410(QSettings *s)
return map;
}
ClangDiagnosticConfigs importDiagnosticConfigsFromCodeModel()
{
const ClangDiagnosticConfigs configs = codeModelSettings()->clangCustomDiagnosticConfigs();
ClangDiagnosticConfigs tidyClazyConfigs;
ClangDiagnosticConfigs clangOnlyConfigs;
std::tie(tidyClazyConfigs, clangOnlyConfigs)
= Utils::partition(configs, [](const ClangDiagnosticConfig &config) {
return !config.clazyChecks().isEmpty()
|| config.clangTidyMode() != ClangDiagnosticConfig::TidyMode::Disabled;
});
if (!tidyClazyConfigs.isEmpty()) {
codeModelSettings()->setClangCustomDiagnosticConfigs(clangOnlyConfigs);
codeModelSettings()->toSettings(Core::ICore::settings());
}
return tidyClazyConfigs;
}
void ClangToolsSettings::readSettings()
{
// Transfer tidy/clazy configs from code model
bool write = false;
ClangDiagnosticConfigs importedConfigs = importDiagnosticConfigsFromCodeModel();
m_diagnosticConfigs.append(importedConfigs);
if (!importedConfigs.isEmpty())
write = true;
QSettings *s = Core::ICore::settings();
s->beginGroup(Constants::SETTINGS_ID);
m_clangTidyExecutable = s->value(clangTidyExecutableKey).toString();
m_clazyStandaloneExecutable = s->value(clazyStandaloneExecutableKey).toString();
bool write = false;
m_diagnosticConfigs.append(diagnosticConfigsFromSettings(s));
QVariantMap map;
if (!s->value(oldDiagnosticConfigIdKey).isNull()) {
@@ -128,6 +172,7 @@ void ClangToolsSettings::writeSettings()
s->setValue(clangTidyExecutableKey, m_clangTidyExecutable);
s->setValue(clazyStandaloneExecutableKey, m_clazyStandaloneExecutable);
diagnosticConfigsToSettings(s, m_diagnosticConfigs);
QVariantMap map;
m_runSettings.toMap(map);
@@ -135,6 +180,8 @@ void ClangToolsSettings::writeSettings()
s->setValue(it.key(), it.value());
s->endGroup();
emit changed();
}
} // namespace Internal