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 "cpptoolsconstants.h"
|
||||||
#include "cpptoolsreuse.h"
|
#include "cpptoolsreuse.h"
|
||||||
|
|
||||||
|
#include <utils/algorithm.h>
|
||||||
#include <utils/qtcassert.h>
|
#include <utils/qtcassert.h>
|
||||||
|
|
||||||
#include <QSettings>
|
#include <QSettings>
|
||||||
@@ -36,7 +37,7 @@
|
|||||||
using namespace CppTools;
|
using namespace CppTools;
|
||||||
|
|
||||||
static Core::Id initialClangDiagnosticConfigId()
|
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()
|
static CppCodeModelSettings::PCHUsage initialPchUsage()
|
||||||
{ return CppCodeModelSettings::PchUse_BuildSystem; }
|
{ return CppCodeModelSettings::PchUse_BuildSystem; }
|
||||||
@@ -67,6 +68,56 @@ static Core::Id clangDiagnosticConfigIdFromSettings(QSettings *s)
|
|||||||
s->value(clangDiagnosticConfigKey(), initialClangDiagnosticConfigId().toSetting()));
|
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)
|
void CppCodeModelSettings::fromSettings(QSettings *s)
|
||||||
{
|
{
|
||||||
s->beginGroup(QLatin1String(Constants::CPPTOOLS_SETTINGSGROUP));
|
s->beginGroup(QLatin1String(Constants::CPPTOOLS_SETTINGSGROUP));
|
||||||
@@ -74,12 +125,21 @@ void CppCodeModelSettings::fromSettings(QSettings *s)
|
|||||||
setClangCustomDiagnosticConfigs(diagnosticConfigsFromSettings(s));
|
setClangCustomDiagnosticConfigs(diagnosticConfigsFromSettings(s));
|
||||||
setClangDiagnosticConfigId(clangDiagnosticConfigIdFromSettings(s));
|
setClangDiagnosticConfigId(clangDiagnosticConfigIdFromSettings(s));
|
||||||
|
|
||||||
{ // Before Qt Creator 4.8, inconsistent settings might have been written.
|
// Qt Creator 4.11 removes some built-in configs.
|
||||||
const ClangDiagnosticConfigsModel model = diagnosticConfigsModel(
|
bool write = false;
|
||||||
m_clangCustomDiagnosticConfigs);
|
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))
|
if (!model.hasConfigWithId(m_clangDiagnosticConfigId))
|
||||||
setClangDiagnosticConfigId(initialClangDiagnosticConfigId());
|
setClangDiagnosticConfigId(initialClangDiagnosticConfigId());
|
||||||
}
|
|
||||||
|
|
||||||
setEnableLowerClazyLevels(s->value(enableLowerClazyLevelsKey(), true).toBool());
|
setEnableLowerClazyLevels(s->value(enableLowerClazyLevelsKey(), true).toBool());
|
||||||
|
|
||||||
@@ -98,6 +158,9 @@ void CppCodeModelSettings::fromSettings(QSettings *s)
|
|||||||
|
|
||||||
s->endGroup();
|
s->endGroup();
|
||||||
|
|
||||||
|
if (write)
|
||||||
|
toSettings(s);
|
||||||
|
|
||||||
emit changed();
|
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_SKIP_INDEXING_BIG_FILES[] = "SkipIndexingBigFiles";
|
||||||
const char CPPTOOLS_INDEXER_FILE_SIZE_LIMIT[] = "IndexerFileSizeLimit";
|
const char CPPTOOLS_INDEXER_FILE_SIZE_LIMIT[] = "IndexerFileSizeLimit";
|
||||||
|
|
||||||
const char CPP_CLANG_BUILTIN_CONFIG_ID_EVERYTHING_WITH_EXCEPTIONS[]
|
const char CPP_CLANG_DIAG_CONFIG_QUESTIONABLE[] = "Builtin.Questionable";
|
||||||
= "Builtin.EverythingWithExceptions";
|
|
||||||
|
|
||||||
const char CPP_CODE_STYLE_SETTINGS_ID[] = "A.Cpp.Code Style";
|
const char CPP_CODE_STYLE_SETTINGS_ID[] = "A.Cpp.Code Style";
|
||||||
const char CPP_CODE_STYLE_SETTINGS_NAME[] = QT_TRANSLATE_NOOP("CppTools", "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)
|
static void addBuiltinConfigs(ClangDiagnosticConfigsModel &model)
|
||||||
{
|
{
|
||||||
// Pedantic
|
|
||||||
ClangDiagnosticConfig config;
|
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
|
// Questionable constructs
|
||||||
config = ClangDiagnosticConfig();
|
config = ClangDiagnosticConfig();
|
||||||
config.setId("Builtin.Questionable");
|
config.setId(Constants::CPP_CLANG_DIAG_CONFIG_QUESTIONABLE);
|
||||||
config.setDisplayName(QCoreApplication::translate(
|
config.setDisplayName(QCoreApplication::translate(
|
||||||
"ClangDiagnosticConfigsModel",
|
"ClangDiagnosticConfigsModel",
|
||||||
"Checks for questionable constructs"));
|
"Checks for questionable constructs"));
|
||||||
config.setIsReadOnly(true);
|
config.setIsReadOnly(true);
|
||||||
config.setClangOptions(QStringList{
|
config.setClangOptions({
|
||||||
QStringLiteral("-Wall"),
|
"-Wall",
|
||||||
QStringLiteral("-Wextra"),
|
"-Wextra",
|
||||||
});
|
});
|
||||||
model.appendOrUpdate(config);
|
model.appendOrUpdate(config);
|
||||||
|
|
||||||
// Everything with exceptions
|
// Warning flags from build system
|
||||||
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
|
|
||||||
config = ClangDiagnosticConfig();
|
config = ClangDiagnosticConfig();
|
||||||
config.setId("Builtin.BuildSystem");
|
config.setId("Builtin.BuildSystem");
|
||||||
config.setDisplayName(QCoreApplication::translate("ClangDiagnosticConfigsModel",
|
config.setDisplayName(QCoreApplication::translate("ClangDiagnosticConfigsModel",
|
||||||
|
Reference in New Issue
Block a user