diff --git a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp
index 84667dd6522..813bd44583f 100644
--- a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp
+++ b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp
@@ -570,6 +570,17 @@ static QStringList warningOptions(CppTools::ProjectPart *projectPart)
return CppTools::codeModelSettings()->clangDiagnosticConfig().commandLineWarnings();
}
+static void addXclangArg(QStringList &list, const QString &argName,
+ const QString &argValue = QString())
+{
+ list.append("-Xclang");
+ list.append(argName);
+ if (!argValue.isEmpty()) {
+ list.append("-Xclang");
+ list.append(argValue);
+ }
+}
+
static QStringList tidyCommandLine()
{
const QString tidyChecks = CppTools::codeModelSettings()->tidyChecks();
@@ -578,14 +589,8 @@ static QStringList tidyCommandLine()
return QStringList();
QStringList result;
- result.append("-Xclang");
- result.append("-add-plugin");
- result.append("-Xclang");
- result.append("clang-tidy");
- result.append("-Xclang");
- result.append("-plugin-arg-clang-tidy");
- result.append("-Xclang");
- result.append("-checks='-*" + tidyChecks + "'");
+ addXclangArg(result, "-add-plugin", "clang-tidy");
+ addXclangArg(result, "-plugin-arg-clang-tidy", "-checks='-*" + tidyChecks + "'");
return result;
}
@@ -597,14 +602,8 @@ static QStringList clazyCommandLine()
return QStringList();
QStringList result;
- result.append("-Xclang");
- result.append("-add-plugin");
- result.append("-Xclang");
- result.append("clang-lazy");
- result.append("-Xclang");
- result.append("-plugin-arg-clang-lazy");
- result.append("-Xclang");
- result.append(clazyChecks);
+ addXclangArg(result, "-add-plugin", "clang-lazy");
+ addXclangArg(result, "-plugin-arg-clang-lazy", clazyChecks);
return result;
}
diff --git a/src/plugins/cpptools/clazychecks.ui b/src/plugins/cpptools/clazychecks.ui
index 7008201b4a7..86a3e049abf 100644
--- a/src/plugins/cpptools/clazychecks.ui
+++ b/src/plugins/cpptools/clazychecks.ui
@@ -7,7 +7,7 @@
0
0
503
- 40
+ 73
@@ -19,7 +19,7 @@
Form
-
+
0
@@ -73,6 +73,42 @@
+ -
+
+
+ 10
+
+
-
+
+
+
+ 0
+ 0
+
+
+
+
+
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+ QSizePolicy::Expanding
+
+
+
+ 10
+ 20
+
+
+
+
diff --git a/src/plugins/cpptools/cppcodemodelsettingspage.cpp b/src/plugins/cpptools/cppcodemodelsettingspage.cpp
index d9bc8c9370f..34ba3ff1f5d 100644
--- a/src/plugins/cpptools/cppcodemodelsettingspage.cpp
+++ b/src/plugins/cpptools/cppcodemodelsettingspage.cpp
@@ -87,6 +87,7 @@ void CppCodeModelSettingsWidget::setupClangCodeModelWidgets()
m_settings->clangDiagnosticConfigId());
m_ui->clangSettingsGroupBox->layout()->addWidget(m_clangDiagnosticConfigsWidget);
+ m_ui->clangPlugins->setEnabled(isClangActive);
setupPluginsWidgets();
}
@@ -100,14 +101,14 @@ void CppCodeModelSettingsWidget::setupPluginsWidgets()
m_tidyChecksWidget = new QWidget();
m_tidyChecks->setupUi(m_tidyChecksWidget);
- m_ui->pluginChecks->layout()->addWidget(m_tidyChecksWidget);
- m_ui->pluginChecks->layout()->addWidget(m_clazyChecksWidget);
- m_clazyChecksWidget->setVisible(false);
+ m_ui->pluginChecks->addWidget(m_tidyChecksWidget);
+ m_ui->pluginChecks->addWidget(m_clazyChecksWidget);
+ m_ui->pluginChecks->setCurrentIndex(0);
+
connect(m_ui->pluginSelection,
static_cast(&QComboBox::currentIndexChanged),
[this](int index) {
- (index ? m_clazyChecksWidget : m_tidyChecksWidget)->setVisible(true);
- (!index ? m_clazyChecksWidget : m_tidyChecksWidget)->setVisible(false);
+ m_ui->pluginChecks->setCurrentIndex(index);
});
setupTidyChecks();
@@ -117,28 +118,47 @@ void CppCodeModelSettingsWidget::setupPluginsWidgets()
void CppCodeModelSettingsWidget::setupTidyChecks()
{
m_currentTidyChecks = m_settings->tidyChecks();
- for (QObject *child : m_tidyChecksWidget->children()) {
- auto *check = qobject_cast(child);
- if (!check)
- continue;
- if (m_currentTidyChecks.indexOf(check->text()) != -1)
- check->setChecked(true);
- connect(check, &QCheckBox::clicked, [this, check](bool checked) {
- const QString prefix = check->text();
- checked ? m_currentTidyChecks.append(',' + prefix)
- : m_currentTidyChecks.remove(',' + prefix);
- });
+ for (int row = 0; row < m_tidyChecks->checksList->count(); ++row) {
+ QListWidgetItem *item = m_tidyChecks->checksList->item(row);
+ item->setFlags(item->flags() | Qt::ItemIsUserCheckable);
+ if (m_currentTidyChecks.indexOf(item->text()) != -1)
+ item->setCheckState(Qt::Checked);
+ else
+ item->setCheckState(Qt::Unchecked);
}
+ connect(m_tidyChecks->checksList, &QListWidget::itemChanged, [this](QListWidgetItem *item) {
+ const QString prefix = item->text();
+ item->checkState() == Qt::Checked
+ ? m_currentTidyChecks.append(',' + prefix)
+ : m_currentTidyChecks.remove(',' + prefix);
+ });
}
void CppCodeModelSettingsWidget::setupClazyChecks()
{
+ // Levels descriptions are taken from https://github.com/KDE/clazy
+ static const std::array levelDescriptions {{
+ "",
+ tr("Very stable checks, 99.99% safe, no false-positives."),
+ tr("Similar to level0, but sometimes (rarely) there might be\n"
+ "some false-positives."),
+ tr("Sometimes has false-positives (20-30%)."),
+ tr("Not always correct, possibly very noisy, might require\n"
+ "a knowledgeable developer to review, might have a very big\n"
+ "rate of false-positives, might have bugs.")
+ }};
+
m_currentClazyChecks = m_settings->clazyChecks();
- if (!m_currentClazyChecks.isEmpty())
+ if (!m_currentClazyChecks.isEmpty()) {
m_clazyChecks->clazyLevel->setCurrentText(m_currentClazyChecks);
+ const unsigned index = static_cast(m_clazyChecks->clazyLevel->currentIndex());
+ m_clazyChecks->levelDescription->setText(levelDescriptions[index]);
+ }
+
connect(m_clazyChecks->clazyLevel,
static_cast(&QComboBox::currentIndexChanged),
[this](int index) {
+ m_clazyChecks->levelDescription->setText(levelDescriptions[static_cast(index)]);
if (index == 0) {
m_currentClazyChecks.clear();
return;
diff --git a/src/plugins/cpptools/cppcodemodelsettingspage.ui b/src/plugins/cpptools/cppcodemodelsettingspage.ui
index 443ba44804b..a53a1957374 100644
--- a/src/plugins/cpptools/cppcodemodelsettingspage.ui
+++ b/src/plugins/cpptools/cppcodemodelsettingspage.ui
@@ -7,7 +7,7 @@
0
0
629
- 374
+ 440
@@ -99,6 +99,12 @@
-
+
+
+ 0
+ 0
+
+
Clang Code Model Warnings
@@ -113,7 +119,7 @@
Clang Plugins
-
+
-
@@ -135,12 +141,7 @@
-
-
-
- Checks
-
-
-
+
diff --git a/src/plugins/cpptools/tidychecks.ui b/src/plugins/cpptools/tidychecks.ui
index 78c4878ae40..ee88173ea42 100644
--- a/src/plugins/cpptools/tidychecks.ui
+++ b/src/plugins/cpptools/tidychecks.ui
@@ -27,127 +27,87 @@
0
-
-
+
-
-
-
- android-*
-
-
+
+ android-*
+
-
-
-
- boost-
-
-
+
+ boost-*
+
-
-
-
- bugprone-*
-
-
+
+ bugprone-*
+
-
-
-
- cert-*
-
-
+
+ cert-*
+
-
-
-
- cppcoreguidelines-*
-
-
-
-
-
- -
-
-
-
-
-
- clang-analyzer-*
-
-
+
+ cppcoreguidelines-*
+
-
-
-
- clang-diagnostic-*
-
-
+
+ clang-analyzer-*
+
-
-
-
- google-*
-
-
+
+ clang-diagnostic-*
+
-
-
-
- hicpp-*
-
-
+
+ google-*
+
-
-
-
- llvm-*
-
-
-
-
-
- -
-
-
-
-
-
- misc-*
-
-
+
+ hicpp-*
+
-
-
-
- modernize-*
-
-
+
+ llvm-*
+
-
-
-
- mpi-*
-
-
+
+ misc-*
+
-
-
-
- objc-*
-
-
+
+ modernize-*
+
-
-
-
- performance-*
-
-
+
+ mpi-*
+
+
+ -
+
+ objc-*
+
+
+ -
+
+ performance-*
+
+
+ -
+
+ readability-*
+
-
-
- -
-
-
- readability-*
-