From 63ea3ac004aa6839ba827affeeeeaa6b06721ce9 Mon Sep 17 00:00:00 2001 From: Ivan Donchevskii Date: Thu, 16 Nov 2017 14:53:09 +0100 Subject: [PATCH] Clang: Improve code model plugins settings UI Describe clazy levels, improve layouts. Change-Id: I4895682ea7d10ea910c2d53725073c9c870bb306 Reviewed-by: Nikolai Kosjar --- .../clangeditordocumentprocessor.cpp | 31 ++-- src/plugins/cpptools/clazychecks.ui | 40 ++++- .../cpptools/cppcodemodelsettingspage.cpp | 54 +++++-- .../cpptools/cppcodemodelsettingspage.ui | 17 +- src/plugins/cpptools/tidychecks.ui | 150 +++++++----------- 5 files changed, 154 insertions(+), 138 deletions(-) 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-* -