diff --git a/src/plugins/clangtools/clangtoolsconstants.h b/src/plugins/clangtools/clangtoolsconstants.h index 25e058a293f..6bfe64ca870 100644 --- a/src/plugins/clangtools/clangtoolsconstants.h +++ b/src/plugins/clangtools/clangtoolsconstants.h @@ -28,6 +28,7 @@ namespace ClangTools { namespace Constants { +const char SETTINGS_PAGE_ID[] = "Analyzer.ClangTools.Settings"; const char SETTINGS_ID[] = "ClangTools"; const char CLANGTIDYCLAZY_RUN_MODE[] = "ClangTidyClazy.RunMode"; diff --git a/src/plugins/clangtools/clangtoolsplugin.cpp b/src/plugins/clangtools/clangtoolsplugin.cpp index e3f5653da3c..02dec92e37a 100644 --- a/src/plugins/clangtools/clangtoolsplugin.cpp +++ b/src/plugins/clangtools/clangtoolsplugin.cpp @@ -73,7 +73,7 @@ class ClangToolsOptionsPage : public Core::IOptionsPage public: explicit ClangToolsOptionsPage() { - setId("Analyzer.ClangTools.Settings"); + setId(Constants::SETTINGS_PAGE_ID); setDisplayName(QCoreApplication::translate( "ClangTools::Internal::ClangToolsOptionsPage", "Clang Tools")); diff --git a/src/plugins/cpptools/cppcodemodelsettingspage.cpp b/src/plugins/cpptools/cppcodemodelsettingspage.cpp index c404c433d01..af5f6b1fd2d 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() diff --git a/src/plugins/cpptools/cppcodemodelsettingspage.ui b/src/plugins/cpptools/cppcodemodelsettingspage.ui index fc81fc3609c..64baa51c72e 100644 --- a/src/plugins/cpptools/cppcodemodelsettingspage.ui +++ b/src/plugins/cpptools/cppcodemodelsettingspage.ui @@ -6,7 +6,7 @@ 0 0 - 629 + 647 440 @@ -106,6 +106,40 @@ + + + + + + + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + + + + + The selected configuration has potentially expensive Clang-Tidy or Clazy checks enabled.<br/>Consider to run these in a separate <a href="target">Clang-Tidy and Clazy analyzer</a> run. + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + +