From ae0d895d968e2826264d3a02e3d88ae7642cd12f Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Thu, 10 Jan 2019 11:38:06 +0100 Subject: Clang: Warn of potentially expensive checks ...for the code model. If a diagnostic configuration with potentially expensive checks is selected in Options/Preferences > C++ > Code Model, show a warning below the combo box. Change-Id: I52c5c2e229fd50c0fd82f70154fb5b727726ba31 Reviewed-by: Leena Miettinen Reviewed-by: Ivan Donchevskii Reviewed-by: Eike Ziller --- src/plugins/cpptools/cppcodemodelsettingspage.cpp | 34 +++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'src/plugins/cpptools/cppcodemodelsettingspage.cpp') diff --git a/src/plugins/cpptools/cppcodemodelsettingspage.cpp b/src/plugins/cpptools/cppcodemodelsettingspage.cpp index c404c433d0..af5f6b1fd2 100644 --- a/src/plugins/cpptools/cppcodemodelsettingspage.cpp +++ b/src/plugins/cpptools/cppcodemodelsettingspage.cpp @@ -28,10 +28,13 @@ #include "clangdiagnosticconfigswidget.h" #include "cppmodelmanager.h" #include "cpptoolsconstants.h" +#include "cpptoolsreuse.h" #include "ui_cppcodemodelsettingspage.h" +#include // for opening the respective options page #include #include +#include #include @@ -43,6 +46,12 @@ CppCodeModelSettingsWidget::CppCodeModelSettingsWidget(QWidget *parent) , m_ui(new Ui::CppCodeModelSettingsPage) { m_ui->setupUi(this); + m_ui->expensiveChecksHintIcon->setPixmap(Utils::Icons::WARNING.pixmap()); + m_ui->expensiveChecksHintIcon->setVisible(false); + m_ui->expensiveChecksHintText->setVisible(false); + connect(m_ui->expensiveChecksHintText, &QLabel::linkActivated, [](const QString &){ + Core::ICore::showOptionsDialog(ClangTools::Constants::SETTINGS_PAGE_ID); + }); } CppCodeModelSettingsWidget::~CppCodeModelSettingsWidget() @@ -69,6 +78,20 @@ void CppCodeModelSettingsWidget::applyToSettings() const m_settings->toSettings(Core::ICore::settings()); } +static bool hasConfigExpensiveChecks(const Core::Id &configId) +{ + if (!configId.isValid()) + return false; + + const ClangDiagnosticConfig config + = ClangDiagnosticConfigsModel( + codeModelSettings()->clangCustomDiagnosticConfigs()) + .configWithId(configId); + + return !config.clazyChecks().isEmpty() + || config.clangTidyMode() != ClangDiagnosticConfig::TidyMode::Disabled; +} + void CppCodeModelSettingsWidget::setupClangCodeModelWidgets() { const bool isClangActive = CppModelManager::instance()->isClangCodeModelActive(); @@ -88,6 +111,17 @@ void CppCodeModelSettingsWidget::setupClangCodeModelWidgets() if (applyClangCodeModelWidgetsToSettings()) m_settings->toSettings(Core::ICore::settings()); }); + + const auto checkForExpensiveChecks = [this](const Core::Id &configId) { + const bool visible = hasConfigExpensiveChecks(configId); + m_ui->expensiveChecksHintIcon->setVisible(visible); + m_ui->expensiveChecksHintText->setVisible(visible); + }; + + checkForExpensiveChecks(m_ui->clangDiagnosticConfigsSelectionWidget->currentConfigId()); + connect(m_ui->clangDiagnosticConfigsSelectionWidget, + &ClangDiagnosticConfigsSelectionWidget::currentConfigChanged, + checkForExpensiveChecks); } void CppCodeModelSettingsWidget::setupGeneralWidgets() -- cgit v1.2.1