Clang: Reduce built-in diagnostic configs

Change-Id: Ieb7c712916f0b3ddd08b04cccf97fc0fa1f828d4
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-27 13:50:40 +02:00
parent a0a39a0470
commit 092bdbc0a1
3 changed files with 75 additions and 44 deletions

View File

@@ -29,6 +29,7 @@
#include "cpptoolsconstants.h"
#include "cpptoolsreuse.h"
#include <utils/algorithm.h>
#include <utils/qtcassert.h>
#include <QSettings>
@@ -36,7 +37,7 @@
using namespace CppTools;
static Core::Id initialClangDiagnosticConfigId()
{ return {Constants::CPP_CLANG_BUILTIN_CONFIG_ID_EVERYTHING_WITH_EXCEPTIONS}; }
{ return Constants::CPP_CLANG_DIAG_CONFIG_QUESTIONABLE; }
static CppCodeModelSettings::PCHUsage initialPchUsage()
{ return CppCodeModelSettings::PchUse_BuildSystem; }
@@ -67,6 +68,56 @@ static Core::Id clangDiagnosticConfigIdFromSettings(QSettings *s)
s->value(clangDiagnosticConfigKey(), initialClangDiagnosticConfigId().toSetting()));
}
// Removed since Qt Creator 4.11
static ClangDiagnosticConfigs removedBuiltinConfigs()
{
ClangDiagnosticConfigs configs;
// Pedantic
ClangDiagnosticConfig config;
config.setId("Builtin.Pedantic");
config.setDisplayName(QCoreApplication::translate("ClangDiagnosticConfigsModel",
"Pedantic checks"));
config.setIsReadOnly(true);
config.setClangOptions(QStringList{QStringLiteral("-Wpedantic")});
configs << config;
// Everything with exceptions
config = ClangDiagnosticConfig();
config.setId("Builtin.EverythingWithExceptions");
config.setDisplayName(QCoreApplication::translate(
"ClangDiagnosticConfigsModel",
"Checks for almost everything"));
config.setIsReadOnly(true);
config.setClangOptions(QStringList{
QStringLiteral("-Weverything"),
QStringLiteral("-Wno-c++98-compat"),
QStringLiteral("-Wno-c++98-compat-pedantic"),
QStringLiteral("-Wno-unused-macros"),
QStringLiteral("-Wno-newline-eof"),
QStringLiteral("-Wno-exit-time-destructors"),
QStringLiteral("-Wno-global-constructors"),
QStringLiteral("-Wno-gnu-zero-variadic-macro-arguments"),
QStringLiteral("-Wno-documentation"),
QStringLiteral("-Wno-shadow"),
QStringLiteral("-Wno-switch-enum"),
QStringLiteral("-Wno-missing-prototypes"), // Not optimal for C projects.
QStringLiteral("-Wno-used-but-marked-unused"), // e.g. QTest::qWait
});
configs << config;
return configs;
}
static ClangDiagnosticConfig convertToCustomConfig(const Core::Id &id)
{
const ClangDiagnosticConfig config
= Utils::findOrDefault(removedBuiltinConfigs(), [id](const ClangDiagnosticConfig &config) {
return config.id() == id;
});
return ClangDiagnosticConfigsModel::createCustomConfig(config, config.displayName());
}
void CppCodeModelSettings::fromSettings(QSettings *s)
{
s->beginGroup(QLatin1String(Constants::CPPTOOLS_SETTINGSGROUP));
@@ -74,13 +125,22 @@ void CppCodeModelSettings::fromSettings(QSettings *s)
setClangCustomDiagnosticConfigs(diagnosticConfigsFromSettings(s));
setClangDiagnosticConfigId(clangDiagnosticConfigIdFromSettings(s));
{ // Before Qt Creator 4.8, inconsistent settings might have been written.
const ClangDiagnosticConfigsModel model = diagnosticConfigsModel(
m_clangCustomDiagnosticConfigs);
if (!model.hasConfigWithId(m_clangDiagnosticConfigId))
setClangDiagnosticConfigId(initialClangDiagnosticConfigId());
// Qt Creator 4.11 removes some built-in configs.
bool write = false;
const Core::Id id = m_clangDiagnosticConfigId;
if (id == "Builtin.Pedantic" || id == "Builtin.EverythingWithExceptions") {
// If one of them was used, continue to use it, but convert it to a custom config.
const ClangDiagnosticConfig customConfig = convertToCustomConfig(id);
m_clangCustomDiagnosticConfigs.append(customConfig);
m_clangDiagnosticConfigId = customConfig.id();
write = true;
}
// Before Qt Creator 4.8, inconsistent settings might have been written.
const ClangDiagnosticConfigsModel model = diagnosticConfigsModel(m_clangCustomDiagnosticConfigs);
if (!model.hasConfigWithId(m_clangDiagnosticConfigId))
setClangDiagnosticConfigId(initialClangDiagnosticConfigId());
setEnableLowerClazyLevels(s->value(enableLowerClazyLevelsKey(), true).toBool());
const QVariant pchUsageVariant = s->value(pchUsageKey(), initialPchUsage());
@@ -98,6 +158,9 @@ void CppCodeModelSettings::fromSettings(QSettings *s)
s->endGroup();
if (write)
toSettings(s);
emit changed();
}

View File

@@ -58,8 +58,7 @@ const char CPPTOOLS_INTERPRET_AMBIGIUOUS_HEADERS_AS_C_HEADERS[]
const char CPPTOOLS_SKIP_INDEXING_BIG_FILES[] = "SkipIndexingBigFiles";
const char CPPTOOLS_INDEXER_FILE_SIZE_LIMIT[] = "IndexerFileSizeLimit";
const char CPP_CLANG_BUILTIN_CONFIG_ID_EVERYTHING_WITH_EXCEPTIONS[]
= "Builtin.EverythingWithExceptions";
const char CPP_CLANG_DIAG_CONFIG_QUESTIONABLE[] = "Builtin.Questionable";
const char CPP_CODE_STYLE_SETTINGS_ID[] = "A.Cpp.Code Style";
const char CPP_CODE_STYLE_SETTINGS_NAME[] = QT_TRANSLATE_NOOP("CppTools", "Code Style");

View File

@@ -354,53 +354,22 @@ QString clazyChecksForLevel(int level)
static void addBuiltinConfigs(ClangDiagnosticConfigsModel &model)
{
// Pedantic
ClangDiagnosticConfig config;
config.setId("Builtin.Pedantic");
config.setDisplayName(QCoreApplication::translate("ClangDiagnosticConfigsModel",
"Pedantic checks"));
config.setIsReadOnly(true);
config.setClangOptions(QStringList{QStringLiteral("-Wpedantic")});
model.appendOrUpdate(config);
// Questionable constructs
config = ClangDiagnosticConfig();
config.setId("Builtin.Questionable");
config.setId(Constants::CPP_CLANG_DIAG_CONFIG_QUESTIONABLE);
config.setDisplayName(QCoreApplication::translate(
"ClangDiagnosticConfigsModel",
"Checks for questionable constructs"));
config.setIsReadOnly(true);
config.setClangOptions(QStringList{
QStringLiteral("-Wall"),
QStringLiteral("-Wextra"),
config.setClangOptions({
"-Wall",
"-Wextra",
});
model.appendOrUpdate(config);
// Everything with exceptions
config = ClangDiagnosticConfig();
config.setId(Constants::CPP_CLANG_BUILTIN_CONFIG_ID_EVERYTHING_WITH_EXCEPTIONS);
config.setDisplayName(QCoreApplication::translate(
"ClangDiagnosticConfigsModel",
"Checks for almost everything"));
config.setIsReadOnly(true);
config.setClangOptions(QStringList{
QStringLiteral("-Weverything"),
QStringLiteral("-Wno-c++98-compat"),
QStringLiteral("-Wno-c++98-compat-pedantic"),
QStringLiteral("-Wno-unused-macros"),
QStringLiteral("-Wno-newline-eof"),
QStringLiteral("-Wno-exit-time-destructors"),
QStringLiteral("-Wno-global-constructors"),
QStringLiteral("-Wno-gnu-zero-variadic-macro-arguments"),
QStringLiteral("-Wno-documentation"),
QStringLiteral("-Wno-shadow"),
QStringLiteral("-Wno-switch-enum"),
QStringLiteral("-Wno-missing-prototypes"), // Not optimal for C projects.
QStringLiteral("-Wno-used-but-marked-unused"), // e.g. QTest::qWait
});
model.appendOrUpdate(config);
// Build system
// Warning flags from build system
config = ClangDiagnosticConfig();
config.setId("Builtin.BuildSystem");
config.setDisplayName(QCoreApplication::translate("ClangDiagnosticConfigsModel",