forked from qt-creator/qt-creator
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:
@@ -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();
|
||||
}
|
||||
|
||||
|
@@ -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");
|
||||
|
@@ -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",
|
||||
|
Reference in New Issue
Block a user