From 33b6fe812afb326e5cd54cf10c076144bff8e7db Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Fri, 26 Jan 2018 10:27:58 +0100 Subject: [PATCH] Clang: Make clazy/tidy options part of the diagnostic config As a side effect, clazy/tidy options become available for project specific customization in the projects mode. Change-Id: Id72762dedd857915139c15f532d2f1c6d1f43edb Reviewed-by: Ivan Donchevskii --- .../clangeditordocumentprocessor.cpp | 22 ++- .../cpptools/clangdiagnosticconfig.cpp | 32 ++++- src/plugins/cpptools/clangdiagnosticconfig.h | 14 +- .../cpptools/clangdiagnosticconfigsmodel.cpp | 6 +- .../cpptools/clangdiagnosticconfigswidget.cpp | 126 +++++++++++++++++- .../cpptools/clangdiagnosticconfigswidget.h | 27 +++- .../cpptools/clangdiagnosticconfigswidget.ui | 3 + src/plugins/cpptools/cppcodemodelsettings.cpp | 47 ++----- src/plugins/cpptools/cppcodemodelsettings.h | 9 -- .../cpptools/cppcodemodelsettingspage.cpp | 85 ------------ .../cpptools/cppcodemodelsettingspage.h | 18 --- .../cpptools/cppcodemodelsettingspage.ui | 12 -- src/plugins/cpptools/cpptoolsconstants.h | 2 - 13 files changed, 212 insertions(+), 191 deletions(-) diff --git a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp index 10dc2548fae..afee72f3e82 100644 --- a/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp +++ b/src/plugins/clangcodemodel/clangeditordocumentprocessor.cpp @@ -487,7 +487,10 @@ private: void addDiagnosticOptionsForConfig(const CppTools::ClangDiagnosticConfig &diagnosticConfig) { m_diagnosticConfigId = diagnosticConfig.id(); - m_options.append(diagnosticConfig.commandLineWarnings()); + + m_options.append(diagnosticConfig.clangOptions()); + addClangTidyOptions(diagnosticConfig.clangTidyChecks()); + addClazyOptions(diagnosticConfig.clazyChecks()); } void addXclangArg(const QString &argName, const QString &argValue = QString()) @@ -500,24 +503,22 @@ private: } } - void addTidyOptions() + void addClangTidyOptions(const QString &checks) { - const QString tidyChecks = CppTools::codeModelSettings()->tidyChecks(); - if (tidyChecks.isEmpty()) + if (checks.isEmpty()) return; addXclangArg("-add-plugin", "clang-tidy"); - addXclangArg("-plugin-arg-clang-tidy", "-checks='-*" + tidyChecks + "'"); + addXclangArg("-plugin-arg-clang-tidy", "-checks='-*" + checks + "'"); } - void addClazyOptions() + void addClazyOptions(const QString &checks) { - const QString clazyChecks = CppTools::codeModelSettings()->clazyChecks(); - if (clazyChecks.isEmpty()) + if (checks.isEmpty()) return; addXclangArg("-add-plugin", "clang-lazy"); - addXclangArg("-plugin-arg-clang-lazy", clazyChecks); + addXclangArg("-plugin-arg-clang-lazy", checks); } void addGlobalOptions() @@ -526,9 +527,6 @@ private: m_options.append(ClangProjectSettings::globalCommandLineOptions()); else m_options.append(getProjectSettings(m_projectPart.project).commandLineOptions()); - - addTidyOptions(); - addClazyOptions(); } void addPrecompiledHeaderOptions() diff --git a/src/plugins/cpptools/clangdiagnosticconfig.cpp b/src/plugins/cpptools/clangdiagnosticconfig.cpp index 55b85f59b84..c605d128008 100644 --- a/src/plugins/cpptools/clangdiagnosticconfig.cpp +++ b/src/plugins/cpptools/clangdiagnosticconfig.cpp @@ -47,14 +47,14 @@ void ClangDiagnosticConfig::setDisplayName(const QString &displayName) m_displayName = displayName; } -QStringList ClangDiagnosticConfig::commandLineWarnings() const +QStringList ClangDiagnosticConfig::clangOptions() const { - return m_commandLineWarnings; + return m_clangOptions; } -void ClangDiagnosticConfig::setCommandLineWarnings(const QStringList &warnings) +void ClangDiagnosticConfig::setClangOptions(const QStringList &options) { - m_commandLineWarnings = warnings; + m_clangOptions = options; } bool ClangDiagnosticConfig::isReadOnly() const @@ -71,7 +71,9 @@ bool ClangDiagnosticConfig::operator==(const ClangDiagnosticConfig &other) const { return m_id == other.m_id && m_displayName == other.m_displayName - && m_commandLineWarnings == other.m_commandLineWarnings + && m_clangOptions == other.m_clangOptions + && m_clangTidyChecks == other.m_clangTidyChecks + && m_clazyChecks == other.m_clazyChecks && m_isReadOnly == other.m_isReadOnly; } @@ -80,4 +82,24 @@ bool ClangDiagnosticConfig::operator!=(const ClangDiagnosticConfig &other) const return !(*this == other); } +QString ClangDiagnosticConfig::clangTidyChecks() const +{ + return m_clangTidyChecks; +} + +void ClangDiagnosticConfig::setClangTidyChecks(const QString &checks) +{ + m_clangTidyChecks = checks; +} + +QString ClangDiagnosticConfig::clazyChecks() const +{ + return m_clazyChecks; +} + +void ClangDiagnosticConfig::setClazyChecks(const QString &checks) +{ + m_clazyChecks = checks; +} + } // namespace CppTools diff --git a/src/plugins/cpptools/clangdiagnosticconfig.h b/src/plugins/cpptools/clangdiagnosticconfig.h index e2329a2054d..327d2f504ea 100644 --- a/src/plugins/cpptools/clangdiagnosticconfig.h +++ b/src/plugins/cpptools/clangdiagnosticconfig.h @@ -43,8 +43,14 @@ public: QString displayName() const; void setDisplayName(const QString &displayName); - QStringList commandLineWarnings() const; - void setCommandLineWarnings(const QStringList &commandLineWarnings); + QStringList clangOptions() const; + void setClangOptions(const QStringList &options); + + QString clangTidyChecks() const; + void setClangTidyChecks(const QString &checks); + + QString clazyChecks() const; + void setClazyChecks(const QString &checks); bool isReadOnly() const; void setIsReadOnly(bool isReadOnly); @@ -55,7 +61,9 @@ public: private: Core::Id m_id; QString m_displayName; - QStringList m_commandLineWarnings; + QStringList m_clangOptions; + QString m_clangTidyChecks; + QString m_clazyChecks; bool m_isReadOnly = false; }; diff --git a/src/plugins/cpptools/clangdiagnosticconfigsmodel.cpp b/src/plugins/cpptools/clangdiagnosticconfigsmodel.cpp index 0fff8ac7ac1..4580e82801d 100644 --- a/src/plugins/cpptools/clangdiagnosticconfigsmodel.cpp +++ b/src/plugins/cpptools/clangdiagnosticconfigsmodel.cpp @@ -45,7 +45,7 @@ static void addConfigForQuestionableConstructs(ClangDiagnosticConfigsModel &mode config.setDisplayName(QCoreApplication::translate("ClangDiagnosticConfigsModel", "Warnings for questionable constructs")); config.setIsReadOnly(true); - config.setCommandLineWarnings(QStringList{ + config.setClangOptions(QStringList{ QStringLiteral("-Wall"), QStringLiteral("-Wextra"), } + commonWarnings()); @@ -60,7 +60,7 @@ static void addConfigForPedanticWarnings(ClangDiagnosticConfigsModel &model) config.setDisplayName(QCoreApplication::translate("ClangDiagnosticConfigsModel", "Pedantic Warnings")); config.setIsReadOnly(true); - config.setCommandLineWarnings(QStringList{QStringLiteral("-Wpedantic")} + commonWarnings()); + config.setClangOptions(QStringList{QStringLiteral("-Wpedantic")} + commonWarnings()); model.appendOrUpdate(config); } @@ -72,7 +72,7 @@ static void addConfigForAlmostEveryWarning(ClangDiagnosticConfigsModel &model) config.setDisplayName(QCoreApplication::translate("ClangDiagnosticConfigsModel", "Warnings for almost everything")); config.setIsReadOnly(true); - config.setCommandLineWarnings(QStringList{ + config.setClangOptions(QStringList{ QStringLiteral("-Weverything"), QStringLiteral("-Wno-c++98-compat"), QStringLiteral("-Wno-c++98-compat-pedantic"), diff --git a/src/plugins/cpptools/clangdiagnosticconfigswidget.cpp b/src/plugins/cpptools/clangdiagnosticconfigswidget.cpp index 288b5e3a8d7..1cc623e3536 100644 --- a/src/plugins/cpptools/clangdiagnosticconfigswidget.cpp +++ b/src/plugins/cpptools/clangdiagnosticconfigswidget.cpp @@ -25,6 +25,8 @@ #include "clangdiagnosticconfigswidget.h" #include "ui_clangdiagnosticconfigswidget.h" +#include "ui_clazychecks.h" +#include "ui_tidychecks.h" #include #include @@ -45,6 +47,7 @@ ClangDiagnosticConfigsWidget::ClangDiagnosticConfigsWidget( , m_diagnosticConfigsModel(diagnosticConfigsModel) { m_ui->setupUi(this); + setupPluginsWidgets(); connectConfigChooserCurrentIndex(); connect(m_ui->copyButton, &QPushButton::clicked, @@ -108,6 +111,18 @@ void ClangDiagnosticConfigsWidget::onRemoveButtonClicked() syncConfigChooserToModel(); } +void ClangDiagnosticConfigsWidget::onClangTidyItemChanged(QListWidgetItem *item) +{ + const QString prefix = item->text(); + ClangDiagnosticConfig config = currentConfig(); + QString checks = config.clangTidyChecks(); + item->checkState() == Qt::Checked + ? checks.append(',' + prefix) + : checks.remove(',' + prefix); + config.setClangTidyChecks(checks); + updateConfig(config); +} + static bool isAcceptedWarningOption(const QString &option) { return option == "-w" @@ -162,10 +177,8 @@ void ClangDiagnosticConfigsWidget::onDiagnosticOptionsEdited() // Commit valid changes ClangDiagnosticConfig updatedConfig = currentConfig(); - updatedConfig.setCommandLineWarnings(normalizedOptions); - - m_diagnosticConfigsModel.appendOrUpdate(updatedConfig); - emit customConfigsChanged(customConfigs()); + updatedConfig.setClangOptions(normalizedOptions); + updateConfig(updatedConfig); } void ClangDiagnosticConfigsWidget::syncWidgetsToModel(const Core::Id &configToSelect) @@ -213,12 +226,74 @@ void ClangDiagnosticConfigsWidget::syncOtherWidgetsToComboBox() // Update main button row m_ui->removeButton->setEnabled(!config.isReadOnly()); - // Update child widgets + // Update Text Edit const QString options = m_notAcceptedOptions.contains(config.id()) ? m_notAcceptedOptions.value(config.id()) - : config.commandLineWarnings().join(QLatin1Char(' ')); + : config.clangOptions().join(QLatin1Char(' ')); setDiagnosticOptions(options); m_ui->diagnosticOptionsTextEdit->setReadOnly(config.isReadOnly()); + + syncClangTidyWidgets(config); + syncClazyWidgets(config); +} + +void ClangDiagnosticConfigsWidget::syncClangTidyWidgets(const ClangDiagnosticConfig &config) +{ + disconnectClangTidyItemChanged(); + + const QString tidyChecks = config.clangTidyChecks(); + for (int row = 0; row < m_tidyChecks->checksList->count(); ++row) { + QListWidgetItem *item = m_tidyChecks->checksList->item(row); + + Qt::ItemFlags flags = item->flags(); + flags |= Qt::ItemIsUserCheckable; + if (config.isReadOnly()) + flags &= ~Qt::ItemIsEnabled; + else + flags |= Qt::ItemIsEnabled; + item->setFlags(flags); + + if (tidyChecks.indexOf(item->text()) != -1) + item->setCheckState(Qt::Checked); + else + item->setCheckState(Qt::Unchecked); + } + + connectClangTidyItemChanged(); +} + +void ClangDiagnosticConfigsWidget::syncClazyWidgets(const ClangDiagnosticConfig &config) +{ + const QString clazyChecks = config.clazyChecks(); + if (clazyChecks.isEmpty()) + m_clazyChecks->clazyLevel->setCurrentIndex(0); + else + m_clazyChecks->clazyLevel->setCurrentText(clazyChecks); + m_clazyChecksWidget->setEnabled(!config.isReadOnly()); +} + +void ClangDiagnosticConfigsWidget::setClazyLevelDescription(int index) +{ + // Levels descriptions are taken from https://github.com/KDE/clazy + static const QString levelDescriptions[] { + QString(), + tr("Very stable checks, 99.99% safe, no false-positives."), + tr("Similar to level 0, 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.") + }; + + QTC_ASSERT(m_clazyChecks, return); + m_clazyChecks->levelDescription->setText(levelDescriptions[static_cast(index)]); +} + +void ClangDiagnosticConfigsWidget::updateConfig(const ClangDiagnosticConfig &config) +{ + m_diagnosticConfigsModel.appendOrUpdate(config); + emit customConfigsChanged(customConfigs()); } bool ClangDiagnosticConfigsWidget::isConfigChooserEmpty() const @@ -264,6 +339,18 @@ void ClangDiagnosticConfigsWidget::updateValidityWidgets(const QString &errorMes m_ui->validationResultLabel->setStyleSheet(styleSheet); } +void ClangDiagnosticConfigsWidget::connectClangTidyItemChanged() +{ + connect(m_tidyChecks->checksList, &QListWidget::itemChanged, + this, &ClangDiagnosticConfigsWidget::onClangTidyItemChanged); +} + +void ClangDiagnosticConfigsWidget::disconnectClangTidyItemChanged() +{ + disconnect(m_tidyChecks->checksList, &QListWidget::itemChanged, + this, &ClangDiagnosticConfigsWidget::onClangTidyItemChanged); +} + void ClangDiagnosticConfigsWidget::connectConfigChooserCurrentIndex() { connect(m_ui->configChooserComboBox, @@ -314,4 +401,31 @@ void ClangDiagnosticConfigsWidget::refresh( syncWidgetsToModel(configToSelect); } +void ClangDiagnosticConfigsWidget::setupPluginsWidgets() +{ + m_clazyChecks.reset(new CppTools::Ui::ClazyChecks); + m_clazyChecksWidget = new QWidget(); + m_clazyChecks->setupUi(m_clazyChecksWidget); + connect(m_clazyChecks->clazyLevel, + static_cast(&QComboBox::currentIndexChanged), + [this](int index) { + setClazyLevelDescription(index); + ClangDiagnosticConfig config = currentConfig(); + if (index == 0) + config.setClazyChecks(QString()); + else + config.setClazyChecks(m_clazyChecks->clazyLevel->itemText(index)); + updateConfig(config); + }); + + m_tidyChecks.reset(new CppTools::Ui::TidyChecks); + m_tidyChecksWidget = new QWidget(); + m_tidyChecks->setupUi(m_tidyChecksWidget); + connectClangTidyItemChanged(); + + m_ui->pluginChecksTabs->addTab(m_tidyChecksWidget, tr("Clang-Tidy")); + m_ui->pluginChecksTabs->addTab(m_clazyChecksWidget, tr("Clazy")); + m_ui->pluginChecksTabs->setCurrentIndex(0); +} + } // CppTools namespace diff --git a/src/plugins/cpptools/clangdiagnosticconfigswidget.h b/src/plugins/cpptools/clangdiagnosticconfigswidget.h index ff11815a229..40d574b9442 100644 --- a/src/plugins/cpptools/clangdiagnosticconfigswidget.h +++ b/src/plugins/cpptools/clangdiagnosticconfigswidget.h @@ -33,9 +33,17 @@ #include #include +#include + +QT_FORWARD_DECLARE_CLASS(QListWidgetItem) + namespace CppTools { -namespace Ui { class ClangDiagnosticConfigsWidget; } +namespace Ui { +class ClangDiagnosticConfigsWidget; +class ClazyChecks; +class TidyChecks; +} class CPPTOOLS_EXPORT ClangDiagnosticConfigsWidget : public QWidget { @@ -59,15 +67,23 @@ signals: void customConfigsChanged(const CppTools::ClangDiagnosticConfigs &customConfigs); private: + void setupPluginsWidgets(); + void onCurrentConfigChanged(int); void onCopyButtonClicked(); void onRemoveButtonClicked(); + void onClangTidyItemChanged(QListWidgetItem *item); void onDiagnosticOptionsEdited(); void syncWidgetsToModel(const Core::Id &configToSelect = Core::Id()); void syncConfigChooserToModel(const Core::Id &configToSelect = Core::Id()); void syncOtherWidgetsToComboBox(); + void syncClangTidyWidgets(const ClangDiagnosticConfig &config); + void syncClazyWidgets(const ClangDiagnosticConfig &config); + + void setClazyLevelDescription(int index); + void updateConfig(const CppTools::ClangDiagnosticConfig &config); bool isConfigChooserEmpty() const; const ClangDiagnosticConfig ¤tConfig() const; @@ -75,6 +91,9 @@ private: void setDiagnosticOptions(const QString &options); void updateValidityWidgets(const QString &errorMessage); + void connectClangTidyItemChanged(); + void disconnectClangTidyItemChanged(); + void connectConfigChooserCurrentIndex(); void disconnectConfigChooserCurrentIndex(); void connectDiagnosticOptionsChanged(); @@ -84,6 +103,12 @@ private: Ui::ClangDiagnosticConfigsWidget *m_ui; ClangDiagnosticConfigsModel m_diagnosticConfigsModel; QHash m_notAcceptedOptions; + + std::unique_ptr m_clazyChecks; + QWidget *m_clazyChecksWidget = nullptr; + + std::unique_ptr m_tidyChecks; + QWidget *m_tidyChecksWidget = nullptr; }; } // CppTools namespace diff --git a/src/plugins/cpptools/clangdiagnosticconfigswidget.ui b/src/plugins/cpptools/clangdiagnosticconfigswidget.ui index 251868faca1..201a6f67ccf 100644 --- a/src/plugins/cpptools/clangdiagnosticconfigswidget.ui +++ b/src/plugins/cpptools/clangdiagnosticconfigswidget.ui @@ -93,6 +93,9 @@ + + + diff --git a/src/plugins/cpptools/cppcodemodelsettings.cpp b/src/plugins/cpptools/cppcodemodelsettings.cpp index 71205cc4275..cc39f001299 100644 --- a/src/plugins/cpptools/cppcodemodelsettings.cpp +++ b/src/plugins/cpptools/cppcodemodelsettings.cpp @@ -55,6 +55,12 @@ static QString clangDiagnosticConfigsArrayDisplayNameKey() static QString clangDiagnosticConfigsArrayWarningsKey() { return QLatin1String("diagnosticOptions"); } +static QString clangDiagnosticConfigsArrayClangTidyChecksKey() +{ return QLatin1String("clangTidyChecks"); } + +static QString clangDiagnosticConfigsArrayClazyChecksKey() +{ return QLatin1String("clazyChecks"); } + static QString pchUsageKey() { return QLatin1String(Constants::CPPTOOLS_MODEL_MANAGER_PCH_USAGE); } @@ -67,12 +73,6 @@ static QString skipIndexingBigFilesKey() static QString indexerFileSizeLimitKey() { return QLatin1String(Constants::CPPTOOLS_INDEXER_FILE_SIZE_LIMIT); } -static QString tidyChecksKey() -{ return QLatin1String(Constants::CPPTOOLS_TIDY_CHECKS); } - -static QString clazyChecksKey() -{ return QLatin1String(Constants::CPPTOOLS_CLAZY_CHECKS); } - static ClangDiagnosticConfigs customDiagnosticConfigsFromSettings(QSettings *s) { QTC_ASSERT(s->group() == QLatin1String(Constants::CPPTOOLS_SETTINGSGROUP), @@ -87,7 +87,9 @@ static ClangDiagnosticConfigs customDiagnosticConfigsFromSettings(QSettings *s) ClangDiagnosticConfig config; config.setId(Core::Id::fromSetting(s->value(clangDiagnosticConfigsArrayIdKey()))); config.setDisplayName(s->value(clangDiagnosticConfigsArrayDisplayNameKey()).toString()); - config.setCommandLineWarnings(s->value(clangDiagnosticConfigsArrayWarningsKey()).toStringList()); + config.setClangOptions(s->value(clangDiagnosticConfigsArrayWarningsKey()).toStringList()); + config.setClangTidyChecks(s->value(clangDiagnosticConfigsArrayClangTidyChecksKey()).toString()); + config.setClazyChecks(s->value(clangDiagnosticConfigsArrayClazyChecksKey()).toString()); configs.append(config); } s->endArray(); @@ -123,11 +125,6 @@ void CppCodeModelSettings::fromSettings(QSettings *s) const QVariant indexerFileSizeLimit = s->value(indexerFileSizeLimitKey(), 5); setIndexerFileSizeLimitInMb(indexerFileSizeLimit.toInt()); - const QVariant tidyChecks = s->value(tidyChecksKey(), QString()); - setTidyChecks(tidyChecks.toString()); - const QVariant clazyChecks = s->value(clazyChecksKey(), QString()); - setClazyChecks(clazyChecks.toString()); - s->endGroup(); emit changed(); @@ -146,7 +143,9 @@ void CppCodeModelSettings::toSettings(QSettings *s) s->setArrayIndex(i); s->setValue(clangDiagnosticConfigsArrayIdKey(), config.id().toSetting()); s->setValue(clangDiagnosticConfigsArrayDisplayNameKey(), config.displayName()); - s->setValue(clangDiagnosticConfigsArrayWarningsKey(), config.commandLineWarnings()); + s->setValue(clangDiagnosticConfigsArrayWarningsKey(), config.clangOptions()); + s->setValue(clangDiagnosticConfigsArrayClangTidyChecksKey(), config.clangTidyChecks()); + s->setValue(clangDiagnosticConfigsArrayClazyChecksKey(), config.clazyChecks()); } s->endArray(); @@ -156,8 +155,6 @@ void CppCodeModelSettings::toSettings(QSettings *s) s->setValue(interpretAmbiguousHeadersAsCHeadersKey(), interpretAmbigiousHeadersAsCHeaders()); s->setValue(skipIndexingBigFilesKey(), skipIndexingBigFiles()); s->setValue(indexerFileSizeLimitKey(), indexerFileSizeLimitInMb()); - s->setValue(tidyChecksKey(), tidyChecks()); - s->setValue(clazyChecksKey(), clazyChecks()); s->endGroup(); @@ -239,23 +236,3 @@ void CppCodeModelSettings::setIndexerFileSizeLimitInMb(int sizeInMB) { m_indexerFileSizeLimitInMB = sizeInMB; } - -QString CppCodeModelSettings::tidyChecks() const -{ - return m_tidyChecks; -} - -void CppCodeModelSettings::setTidyChecks(QString checks) -{ - m_tidyChecks = checks; -} - -QString CppCodeModelSettings::clazyChecks() const -{ - return m_clazyChecks; -} - -void CppCodeModelSettings::setClazyChecks(QString checks) -{ - m_clazyChecks = checks; -} diff --git a/src/plugins/cpptools/cppcodemodelsettings.h b/src/plugins/cpptools/cppcodemodelsettings.h index 44661b2a4a6..bc91fbd1b8e 100644 --- a/src/plugins/cpptools/cppcodemodelsettings.h +++ b/src/plugins/cpptools/cppcodemodelsettings.h @@ -72,12 +72,6 @@ public: int indexerFileSizeLimitInMb() const; void setIndexerFileSizeLimitInMb(int sizeInMB); - QString tidyChecks() const; - void setTidyChecks(QString checks); - - QString clazyChecks() const; - void setClazyChecks(QString checks); - signals: void clangDiagnosticConfigsInvalidated(const QVector &configId); void changed(); @@ -89,9 +83,6 @@ private: int m_indexerFileSizeLimitInMB = 5; ClangDiagnosticConfigs m_clangCustomDiagnosticConfigs; Core::Id m_clangDiagnosticConfigId; - - QString m_tidyChecks; - QString m_clazyChecks; }; } // namespace CppTools diff --git a/src/plugins/cpptools/cppcodemodelsettingspage.cpp b/src/plugins/cpptools/cppcodemodelsettingspage.cpp index d7f404fb03b..e6af115aed4 100644 --- a/src/plugins/cpptools/cppcodemodelsettingspage.cpp +++ b/src/plugins/cpptools/cppcodemodelsettingspage.cpp @@ -29,8 +29,6 @@ #include "cppmodelmanager.h" #include "cpptoolsconstants.h" #include "ui_cppcodemodelsettingspage.h" -#include "ui_clazychecks.h" -#include "ui_tidychecks.h" #include #include @@ -86,79 +84,6 @@ void CppCodeModelSettingsWidget::setupClangCodeModelWidgets() diagnosticConfigsModel, m_settings->clangDiagnosticConfigId()); m_ui->clangSettingsGroupBox->layout()->addWidget(m_clangDiagnosticConfigsWidget); - - m_ui->clangPlugins->setEnabled(isClangActive); - setupPluginsWidgets(); -} - -void CppCodeModelSettingsWidget::setupPluginsWidgets() -{ - m_clazyChecks.reset(new CppTools::Ui::ClazyChecks); - m_clazyChecksWidget = new QWidget(); - m_clazyChecks->setupUi(m_clazyChecksWidget); - - m_tidyChecks.reset(new CppTools::Ui::TidyChecks); - m_tidyChecksWidget = new QWidget(); - m_tidyChecks->setupUi(m_tidyChecksWidget); - - m_ui->pluginChecks->addTab(m_tidyChecksWidget, tr("ClangTidy")); - m_ui->pluginChecks->addTab(m_clazyChecksWidget, tr("Clazy")); - m_ui->pluginChecks->setCurrentIndex(0); - - setupTidyChecks(); - setupClazyChecks(); -} - -void CppCodeModelSettingsWidget::setupTidyChecks() -{ - m_currentTidyChecks = m_settings->tidyChecks(); - 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 {{ - QString(), - 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()) { - 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; - } - m_currentClazyChecks = m_clazyChecks->clazyLevel->itemText(index); - }); } void CppCodeModelSettingsWidget::setupGeneralWidgets() @@ -192,16 +117,6 @@ bool CppCodeModelSettingsWidget::applyClangCodeModelWidgetsToSettings() const settingsChanged = true; } - if (m_settings->tidyChecks() != m_currentTidyChecks) { - m_settings->setTidyChecks(m_currentTidyChecks); - settingsChanged = true; - } - - if (m_settings->clazyChecks() != m_currentClazyChecks) { - m_settings->setClazyChecks(m_currentClazyChecks); - settingsChanged = true; - } - return settingsChanged; } diff --git a/src/plugins/cpptools/cppcodemodelsettingspage.h b/src/plugins/cpptools/cppcodemodelsettingspage.h index 45728d487a8..7a56ca174b6 100644 --- a/src/plugins/cpptools/cppcodemodelsettingspage.h +++ b/src/plugins/cpptools/cppcodemodelsettingspage.h @@ -32,8 +32,6 @@ #include #include -#include - QT_FORWARD_DECLARE_CLASS(QComboBox) QT_FORWARD_DECLARE_CLASS(QSettings) @@ -41,11 +39,6 @@ namespace CppTools { class ClangDiagnosticConfigsWidget; -namespace Ui { -class ClazyChecks; -class TidyChecks; -} // namespace Ui - namespace Internal { namespace Ui { class CppCodeModelSettingsPage; } @@ -64,9 +57,6 @@ public: private: void setupGeneralWidgets(); void setupClangCodeModelWidgets(); - void setupPluginsWidgets(); - void setupTidyChecks(); - void setupClazyChecks(); bool applyGeneralWidgetsToSettings() const; bool applyClangCodeModelWidgetsToSettings() const; @@ -75,14 +65,6 @@ private: Ui::CppCodeModelSettingsPage *m_ui = nullptr; QPointer m_clangDiagnosticConfigsWidget; QSharedPointer m_settings; - - std::unique_ptr m_clazyChecks; - QWidget *m_clazyChecksWidget = nullptr; - QString m_currentClazyChecks; - - std::unique_ptr m_tidyChecks; - QWidget *m_tidyChecksWidget = nullptr; - QString m_currentTidyChecks; }; class CppCodeModelSettingsPage: public Core::IOptionsPage diff --git a/src/plugins/cpptools/cppcodemodelsettingspage.ui b/src/plugins/cpptools/cppcodemodelsettingspage.ui index 35d4c37a427..61351787f07 100644 --- a/src/plugins/cpptools/cppcodemodelsettingspage.ui +++ b/src/plugins/cpptools/cppcodemodelsettingspage.ui @@ -114,18 +114,6 @@ - - - - Clang Plugins - - - - - - - - diff --git a/src/plugins/cpptools/cpptoolsconstants.h b/src/plugins/cpptools/cpptoolsconstants.h index b5e9d86bdbf..dff6d2c6f04 100644 --- a/src/plugins/cpptools/cpptoolsconstants.h +++ b/src/plugins/cpptools/cpptoolsconstants.h @@ -56,8 +56,6 @@ const char CPPTOOLS_INTERPRET_AMBIGIUOUS_HEADERS_AS_C_HEADERS[] = "InterpretAmbiguousHeadersAsCHeaders"; const char CPPTOOLS_SKIP_INDEXING_BIG_FILES[] = "SkipIndexingBigFiles"; const char CPPTOOLS_INDEXER_FILE_SIZE_LIMIT[] = "IndexerFileSizeLimit"; -const char CPPTOOLS_TIDY_CHECKS[] = "TidyChecks"; -const char CPPTOOLS_CLAZY_CHECKS[] = "ClazyChecks"; const char CPP_CLANG_BUILTIN_CONFIG_ID_EVERYTHING_WITH_EXCEPTIONS[] = "Builtin.EverythingWithExceptions";