forked from qt-creator/qt-creator
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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user