Merge remote-tracking branch 'origin/4.7'

Change-Id: Ifec1f8dc20a18f432ec6ccf68153f31fff3f8b29
This commit is contained in:
Eike Ziller
2018-06-25 11:07:03 +02:00
78 changed files with 754 additions and 290 deletions

View File

@@ -113,6 +113,13 @@
\" </magic>\",
\" </mime-type>\",
\" <mime-type type=\'text/x-dsrc\'>\",
\" <comment>D source code</comment>\",
\" <sub-class-of type=\'text/plain\'/>\",
\" <glob pattern=\'*.d\'/>\",
\" <glob pattern=\'*.di\'/>\",
\" </mime-type>\",
\"</mime-info>\"
]
}

View File

@@ -37,8 +37,9 @@ static void addConfigForQuestionableConstructs(ClangDiagnosticConfigsModel &mode
{
ClangDiagnosticConfig config;
config.setId("Builtin.Questionable");
config.setDisplayName(QCoreApplication::translate("ClangDiagnosticConfigsModel",
"Warnings for questionable constructs"));
config.setDisplayName(QCoreApplication::translate(
"ClangDiagnosticConfigsModel",
"Clang-only checks for questionable constructs"));
config.setIsReadOnly(true);
config.setClangOptions(QStringList{
QStringLiteral("-Wall"),
@@ -53,19 +54,33 @@ static void addConfigForPedanticWarnings(ClangDiagnosticConfigsModel &model)
ClangDiagnosticConfig config;
config.setId("Builtin.Pedantic");
config.setDisplayName(QCoreApplication::translate("ClangDiagnosticConfigsModel",
"Pedantic Warnings"));
"Clang-only pedantic checks"));
config.setIsReadOnly(true);
config.setClangOptions(QStringList{QStringLiteral("-Wpedantic")});
model.appendOrUpdate(config);
}
constexpr const char *DEFAULT_TIDY_CHECKS = "-*,"
"bugprone-*,"
"cppcoreguidelines-*,"
"misc-*,"
"modernize-*,"
"performance-*,"
"readability-*,"
"-cppcoreguidelines-owning-memory,"
"-readability-braces-around-statements,"
"-readability-implicit-bool-conversion,"
"-readability-named-parameter";
constexpr const char *DEFAULT_CLAZY_CHECKS = "level0";
static void addConfigForAlmostEveryWarning(ClangDiagnosticConfigsModel &model)
{
ClangDiagnosticConfig config;
config.setId(Constants::CPP_CLANG_BUILTIN_CONFIG_ID_EVERYTHING_WITH_EXCEPTIONS);
config.setDisplayName(QCoreApplication::translate("ClangDiagnosticConfigsModel",
"Warnings for almost everything"));
config.setDisplayName(QCoreApplication::translate(
"ClangDiagnosticConfigsModel",
"Clang-only checks for almost everything"));
config.setIsReadOnly(true);
config.setClangOptions(QStringList{
QStringLiteral("-Weverything"),
@@ -86,11 +101,75 @@ static void addConfigForAlmostEveryWarning(ClangDiagnosticConfigsModel &model)
model.appendOrUpdate(config);
}
static void addConfigForTidy(ClangDiagnosticConfigsModel &model)
{
ClangDiagnosticConfig config;
config.setId("Builtin.Tidy");
config.setDisplayName(QCoreApplication::translate("ClangDiagnosticConfigsModel",
"Clang-Tidy thorough checks"));
config.setIsReadOnly(true);
config.setClangOptions(QStringList{QStringLiteral("-w")});
config.setClangTidyMode(ClangDiagnosticConfig::TidyMode::ChecksPrefixList);
config.setClangTidyChecks(QString::fromUtf8(DEFAULT_TIDY_CHECKS));
model.appendOrUpdate(config);
}
static void addConfigForClangAnalyze(ClangDiagnosticConfigsModel &model)
{
ClangDiagnosticConfig config;
config.setId("Builtin.TidyClangAnalyze");
config.setDisplayName(QCoreApplication::translate(
"ClangDiagnosticConfigsModel",
"Clang-Tidy static analyzer checks"));
config.setIsReadOnly(true);
config.setClangOptions(QStringList{
QStringLiteral("-w"),
});
config.setClangTidyMode(ClangDiagnosticConfig::TidyMode::ChecksPrefixList);
config.setClangTidyChecks("-*,clang-analyzer-*");
model.appendOrUpdate(config);
}
static void addConfigForClazy(ClangDiagnosticConfigsModel &model)
{
ClangDiagnosticConfig config;
config.setId("Builtin.Clazy");
config.setDisplayName(QCoreApplication::translate("ClangDiagnosticConfigsModel",
"Clazy level0 checks"));
config.setIsReadOnly(true);
config.setClangOptions(QStringList{QStringLiteral("-w")});
config.setClazyChecks(QString::fromUtf8(DEFAULT_CLAZY_CHECKS));
model.appendOrUpdate(config);
}
static void addConfigForTidyAndClazy(ClangDiagnosticConfigsModel &model)
{
ClangDiagnosticConfig config;
config.setId("Builtin.TidyAndClazy");
config.setDisplayName(QCoreApplication::translate("ClangDiagnosticConfigsModel",
"Clang-Tidy and Clazy preselected checks"));
config.setIsReadOnly(true);
config.setClangOptions(QStringList{QStringLiteral("-w")});
config.setClangTidyMode(ClangDiagnosticConfig::TidyMode::ChecksPrefixList);
config.setClangTidyChecks(QString::fromUtf8(DEFAULT_TIDY_CHECKS));
config.setClazyChecks(QString::fromUtf8(DEFAULT_CLAZY_CHECKS));
model.appendOrUpdate(config);
}
static void addBuiltinConfigs(ClangDiagnosticConfigsModel &model)
{
addConfigForPedanticWarnings(model);
addConfigForQuestionableConstructs(model);
addConfigForAlmostEveryWarning(model);
addConfigForTidy(model);
addConfigForClangAnalyze(model);
addConfigForClazy(model);
addConfigForTidyAndClazy(model);
}
ClangDiagnosticConfigsModel::ClangDiagnosticConfigsModel(const ClangDiagnosticConfigs &customConfigs)

View File

@@ -112,7 +112,7 @@ public:
const QModelIndex index = indexForCheck(check);
if (!index.isValid())
continue;
auto node = static_cast<ProjectExplorer::Tree *>(index.internalPointer());
auto *node = static_cast<ProjectExplorer::Tree *>(index.internalPointer());
node->checked = state;
propagateUp(index);
propagateDown(index);
@@ -161,6 +161,18 @@ public:
return ProjectExplorer::SelectableFilesModel::data(index, role);
}
void setEnabled(bool enabled)
{
m_enabled = enabled;
}
bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override
{
if (role == Qt::CheckStateRole && !m_enabled)
return false;
return ProjectExplorer::SelectableFilesModel::setData(index, value, role);
}
private:
// TODO: Remove/replace this method after base class refactoring is done.
@@ -220,6 +232,8 @@ private:
for (const ProjectExplorer::Tree *t : root->childDirectories)
collectChecks(t, checks);
}
bool m_enabled = true;
};
ClangDiagnosticConfigsWidget::ClangDiagnosticConfigsWidget(const Core::Id &configToSelect,
@@ -489,7 +503,11 @@ void ClangDiagnosticConfigsWidget::syncClangTidyWidgets(const ClangDiagnosticCon
break;
}
m_tidyChecksWidget->setEnabled(!config.isReadOnly());
const bool enabled = !config.isReadOnly();
m_tidyChecks->tidyMode->setEnabled(enabled);
m_tidyChecks->plainTextEditButton->setText(enabled ? tr("Edit Checks as String...")
: tr("View Checks as String..."));
m_tidyTreeModel->setEnabled(enabled);
connectClangTidyItemChanged();
}
@@ -650,12 +668,17 @@ void ClangDiagnosticConfigsWidget::setupTabs()
m_tidyChecks->checksPrefixesTree->header()->setStretchLastSection(false);
m_tidyChecks->checksPrefixesTree->header()->setSectionResizeMode(0, QHeaderView::Stretch);
connect(m_tidyChecks->plainTextEditButton, &QPushButton::clicked, this, [this]() {
const bool readOnly = selectedConfig().isReadOnly();
QDialog dialog;
dialog.setWindowTitle(tr("Checks"));
dialog.setLayout(new QVBoxLayout);
auto *textEdit = new QTextEdit(&dialog);
textEdit->setReadOnly(readOnly);
dialog.layout()->addWidget(textEdit);
auto *buttonsBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
auto *buttonsBox = new QDialogButtonBox(QDialogButtonBox::Ok
| (readOnly ? QDialogButtonBox::NoButton
: QDialogButtonBox::Cancel));
dialog.layout()->addWidget(buttonsBox);
QObject::connect(buttonsBox, &QDialogButtonBox::accepted, &dialog, &QDialog::accept);
QObject::connect(buttonsBox, &QDialogButtonBox::rejected, &dialog, &QDialog::reject);

View File

@@ -487,10 +487,6 @@ QString CompilerOptionsBuilder::includeOption() const
bool CompilerOptionsBuilder::excludeDefineDirective(const ProjectExplorer::Macro &macro) const
{
// TODO: Remove in QtCreator 4.7
if (macro.key == "__cplusplus")
return true;
// Ignore for all compiler toolchains since LLVM has it's own implementation for
// __has_include(STR) and __has_include_next(STR)
if (macro.key.startsWith("__has_include"))