diff --git a/src/plugins/clangtools/clangtool.cpp b/src/plugins/clangtools/clangtool.cpp index 0b8b9be21e6..daed8d5135c 100644 --- a/src/plugins/clangtools/clangtool.cpp +++ b/src/plugins/clangtools/clangtool.cpp @@ -66,8 +66,6 @@ using namespace Utils; namespace ClangTools { namespace Internal { -static ClangTool *s_instance; - static QString makeLink(const QString &text) { return QString("%1").arg(text); @@ -355,23 +353,17 @@ static RunSettings runSettings() return ClangToolsSettings::instance()->runSettings(); } -ClangTool *ClangTool::instance() +ClangTool::ClangTool(const QString &name, Utils::Id id) + : m_name(name), m_perspective{id.toString(), name} { - return s_instance; -} - -ClangTool::ClangTool() - : m_name("Clang-Tidy and Clazy") -{ - setObjectName("ClangTidyClazyTool"); - s_instance = this; + setObjectName(name); m_diagnosticModel = new ClangToolsDiagnosticModel(this); - auto action = new QAction(tr("Analyze Project..."), this); + auto action = new QAction(tr("Analyze Project with %1...").arg(name), this); action->setIcon(Utils::Icons::RUN_SELECTED_TOOLBAR.icon()); m_startAction = action; - action = new QAction(tr("Analyze Current File"), this); + action = new QAction(tr("Analyze Current File with %1").arg(name), this); action->setIcon(Utils::Icons::RUN_FILE.icon()); m_startOnCurrentFileAction = action; @@ -536,9 +528,9 @@ ClangTool::ClangTool() m_perspective.addWindow(mainWidget, Perspective::SplitVertical, nullptr); - action = new QAction(tr("Clang-Tidy and Clazy..."), this); + action = new QAction(name, this); action->setToolTip(toolTip); - menu->addAction(ActionManager::registerAction(action, "ClangTidyClazy.Action"), + menu->addAction(ActionManager::registerAction(action, id), Debugger::Constants::G_ANALYZER_TOOLS); QObject::connect(action, &QAction::triggered, this, [this] { startTool(FileSelectionType::AskUser); @@ -645,12 +637,12 @@ void ClangTool::startTool(ClangTool::FileSelection fileSelection, // Run control m_runControl = new RunControl(Constants::CLANGTIDYCLAZY_RUN_MODE); - m_runControl->setDisplayName(tr("Clang-Tidy and Clazy")); + m_runControl->setDisplayName(m_name); m_runControl->setIcon(ProjectExplorer::Icons::ANALYZER_START_SMALL_TOOLBAR); m_runControl->setTarget(project->activeTarget()); m_stopAction->disconnect(); connect(m_stopAction, &QAction::triggered, m_runControl, [this] { - emit m_runControl->appendMessage(tr("Clang-Tidy and Clazy tool stopped by user."), + emit m_runControl->appendMessage(tr("%1 tool stopped by user.").arg(m_name), NormalMessageFormat); m_runControl->initiateStop(); setState(State::StoppedByUser); @@ -662,7 +654,8 @@ void ClangTool::startTool(ClangTool::FileSelection fileSelection, || std::get(fileSelection) == FileSelectionType::CurrentFile; const bool buildBeforeAnalysis = !preventBuild && runSettings.buildBeforeAnalysis(); - m_runWorker = new ClangToolRunWorker(m_runControl, + m_runWorker = new ClangToolRunWorker(this, + m_runControl, runSettings, diagnosticConfig, fileInfos, @@ -1202,6 +1195,15 @@ void ClangTool::updateForCurrentState() m_infoBarWidget->setDiagText(diagText); } +ClangTidyTool::ClangTidyTool() : ClangTool(tr("Clang-Tidy"), "ClangTidy.Perspective") +{ + m_instance = this; +} +ClazyTool::ClazyTool() : ClangTool(tr("Clazy"), "Clazy.Perspective") +{ + m_instance = this; +} + } // namespace Internal } // namespace ClangTools diff --git a/src/plugins/clangtools/clangtool.h b/src/plugins/clangtools/clangtool.h index 34f5eafec15..dcb81e9c8e3 100644 --- a/src/plugins/clangtools/clangtool.h +++ b/src/plugins/clangtools/clangtool.h @@ -46,17 +46,11 @@ class DiagnosticView; class RunSettings; class SelectFixitsCheckBox; -const char ClangTidyClazyPerspectiveId[] = "ClangTidyClazy.Perspective"; - class ClangTool : public QObject { Q_OBJECT public: - static ClangTool *instance(); - - ClangTool(); - void selectPerspective(); enum class FileSelectionType { @@ -93,6 +87,9 @@ public: signals: void finished(const QString &errorText); // For testing. +protected: + ClangTool(const QString &name, Utils::Id id); + private: enum class State { Initial, @@ -132,6 +129,7 @@ private: FileInfoProviders fileInfoProviders(ProjectExplorer::Project *project, const FileInfos &allFileInfos); + const QString m_name; ClangToolsDiagnosticModel *m_diagnosticModel = nullptr; ProjectExplorer::RunControl *m_runControl = nullptr; ClangToolRunWorker *m_runWorker = nullptr; @@ -161,11 +159,27 @@ private: QAction *m_clear = nullptr; QAction *m_expandCollapse = nullptr; - Utils::Perspective m_perspective{ClangTidyClazyPerspectiveId, - ::ClangTools::Internal::ClangTool::tr("Clang-Tidy and Clazy")}; + Utils::Perspective m_perspective; +}; + +class ClangTidyTool : public ClangTool +{ +public: + ClangTidyTool(); + static ClangTool *instance() { return m_instance; } private: - const QString m_name; + static inline ClangTool *m_instance = nullptr; +}; + +class ClazyTool : public ClangTool +{ +public: + ClazyTool(); + static ClangTool *instance() { return m_instance; } + +private: + static inline ClangTool *m_instance = nullptr; }; } // namespace Internal diff --git a/src/plugins/clangtools/clangtoolruncontrol.cpp b/src/plugins/clangtools/clangtoolruncontrol.cpp index b9917fc1dfb..a5a4d775f03 100644 --- a/src/plugins/clangtools/clangtoolruncontrol.cpp +++ b/src/plugins/clangtools/clangtoolruncontrol.cpp @@ -55,11 +55,6 @@ static Q_LOGGING_CATEGORY(LOG, "qtc.clangtools.runcontrol", QtWarningMsg) namespace ClangTools { namespace Internal { -static ClangTool *tool() -{ - return ClangTool::instance(); -} - class ProjectBuilder : public RunWorker { public: @@ -138,12 +133,13 @@ static QDebug operator<<(QDebug debug, const AnalyzeUnits &analyzeUnits) } -ClangToolRunWorker::ClangToolRunWorker(RunControl *runControl, +ClangToolRunWorker::ClangToolRunWorker(ClangTool *tool, RunControl *runControl, const RunSettings &runSettings, const CppEditor::ClangDiagnosticConfig &diagnosticConfig, const FileInfos &fileInfos, bool buildBeforeAnalysis) : RunWorker(runControl) + , m_tool(tool) , m_runSettings(runSettings) , m_diagnosticConfig(diagnosticConfig) , m_fileInfos(fileInfos) @@ -174,15 +170,9 @@ ClangToolRunWorker::ClangToolRunWorker(RunControl *runControl, QList ClangToolRunWorker::runnerCreators() { - QList creators; - - if (m_diagnosticConfig.isClangTidyEnabled()) - creators << [this] { return createRunner(); }; - - if (m_diagnosticConfig.isClazyEnabled()) - creators << [this] { return createRunner(); }; - - return creators; + if (m_tool == ClangTidyTool::instance()) + return {[this] { return createRunner(); }}; + return {[this] { return createRunner(); }}; } void ClangToolRunWorker::start() @@ -195,7 +185,7 @@ void ClangToolRunWorker::start() return; } - const QString &toolName = tool()->name(); + const QString &toolName = m_tool->name(); Project *project = runControl()->project(); m_projectInfo = CppEditor::CppModelManager::instance()->projectInfo(project); if (!m_projectInfo) { @@ -334,7 +324,7 @@ void ClangToolRunWorker::onRunnerFinishedWithSuccess(ClangToolRunner *runner, emit runnerFinished(); QString errorMessage; - const Diagnostics diagnostics = tool()->read(runner->outputFileFormat(), + const Diagnostics diagnostics = m_tool->read(runner->outputFileFormat(), outputFilePath, m_projectFiles, &errorMessage); @@ -353,7 +343,7 @@ void ClangToolRunWorker::onRunnerFinishedWithSuccess(ClangToolRunner *runner, // do not generate marks when we always analyze open files since marks from that // analysis should be more up to date const bool generateMarks = !m_runSettings.analyzeOpenFiles(); - tool()->onNewDiagnosticsAvailable(diagnostics, generateMarks); + m_tool->onNewDiagnosticsAvailable(diagnostics, generateMarks); } } @@ -401,7 +391,7 @@ void ClangToolRunWorker::updateProgressValue() void ClangToolRunWorker::finalize() { - const QString toolName = tool()->name(); + const QString toolName = m_tool->name(); if (m_filesNotAnalyzed.size() != 0) { appendMessage(tr("Error: Failed to analyze %n files.", nullptr, m_filesNotAnalyzed.size()), ErrorMessageFormat); diff --git a/src/plugins/clangtools/clangtoolruncontrol.h b/src/plugins/clangtools/clangtoolruncontrol.h index 549e901e90d..68bfffb932e 100644 --- a/src/plugins/clangtools/clangtoolruncontrol.h +++ b/src/plugins/clangtools/clangtoolruncontrol.h @@ -19,7 +19,7 @@ namespace ClangTools { namespace Internal { - +class ClangTool; class ClangToolRunner; class ProjectBuilder; @@ -46,7 +46,8 @@ class ClangToolRunWorker : public ProjectExplorer::RunWorker Q_OBJECT public: - ClangToolRunWorker(ProjectExplorer::RunControl *runControl, + ClangToolRunWorker(ClangTool *tool, + ProjectExplorer::RunControl *runControl, const RunSettings &runSettings, const CppEditor::ClangDiagnosticConfig &diagnosticConfig, const FileInfos &fileInfos, @@ -85,6 +86,7 @@ private: void finalize(); private: + ClangTool * const m_tool; RunSettings m_runSettings; CppEditor::ClangDiagnosticConfig m_diagnosticConfig; FileInfos m_fileInfos; diff --git a/src/plugins/clangtools/clangtoolsconstants.h b/src/plugins/clangtools/clangtoolsconstants.h index 3aa1a619790..0253b1acb7f 100644 --- a/src/plugins/clangtools/clangtoolsconstants.h +++ b/src/plugins/clangtools/clangtoolsconstants.h @@ -8,8 +8,10 @@ namespace Constants { const char PROJECT_PANEL_ID[] = "ClangTools"; -const char RUN_ON_PROJECT[] = "ClangTools.RunOnProject"; -const char RUN_ON_CURRENT_FILE[] = "ClangTools.RunOnCurrentFile"; +const char RUN_CLANGTIDY_ON_PROJECT[] = "ClangTools.ClangTidy.RunOnProject"; +const char RUN_CLAZY_ON_PROJECT[] = "ClangTools.Clazy.RunOnProject"; +const char RUN_CLANGTIDY_ON_CURRENT_FILE[] = "ClangTools.ClangTidy.RunOnCurrentFile"; +const char RUN_CLAZY_ON_CURRENT_FILE[] = "ClangTools.Clazy.RunOnCurrentFile"; const char SETTINGS_PAGE_ID[] = "Analyzer.ClangTools.Settings"; const char SETTINGS_ID[] = "ClangTools"; diff --git a/src/plugins/clangtools/clangtoolsplugin.cpp b/src/plugins/clangtools/clangtoolsplugin.cpp index 4269edf9f21..bb395070eb2 100644 --- a/src/plugins/clangtools/clangtoolsplugin.cpp +++ b/src/plugins/clangtools/clangtoolsplugin.cpp @@ -75,7 +75,8 @@ public: return nullptr; } - ClangTool clangTool; + ClangTidyTool clangTidyTool; + ClazyTool clazyTool; ClangToolsOptionsPage optionsPage; QMap documentRunners; DocumentQuickFixFactory quickFixFactory; @@ -133,22 +134,31 @@ void ClangToolsPlugin::onCurrentEditorChanged() void ClangToolsPlugin::registerAnalyzeActions() { - ActionManager::registerAction(d->clangTool.startAction(), Constants::RUN_ON_PROJECT); - Command *cmd = ActionManager::registerAction(d->clangTool.startOnCurrentFileAction(), - Constants::RUN_ON_CURRENT_FILE); - ActionContainer *mtoolscpp = ActionManager::actionContainer(CppEditor::Constants::M_TOOLS_CPP); - if (mtoolscpp) - mtoolscpp->addAction(cmd); + for (const auto &toolInfo : {std::make_tuple(ClangTidyTool::instance(), + Constants::RUN_CLANGTIDY_ON_PROJECT, + Constants::RUN_CLANGTIDY_ON_CURRENT_FILE), + std::make_tuple(ClazyTool::instance(), + Constants::RUN_CLAZY_ON_PROJECT, + Constants::RUN_CLAZY_ON_CURRENT_FILE)}) { + ClangTool * const tool = std::get<0>(toolInfo); + ActionManager::registerAction(tool->startAction(), std::get<1>(toolInfo)); + Command *cmd = ActionManager::registerAction(tool->startOnCurrentFileAction(), + std::get<2>(toolInfo)); + ActionContainer *mtoolscpp = ActionManager::actionContainer(CppEditor::Constants::M_TOOLS_CPP); + if (mtoolscpp) + mtoolscpp->addAction(cmd); - Core::ActionContainer *mcontext = Core::ActionManager::actionContainer( - CppEditor::Constants::M_CONTEXT); - if (mcontext) - mcontext->addAction(cmd, CppEditor::Constants::G_CONTEXT_FIRST); + Core::ActionContainer *mcontext = Core::ActionManager::actionContainer( + CppEditor::Constants::M_CONTEXT); + if (mcontext) + mcontext->addAction(cmd, CppEditor::Constants::G_CONTEXT_FIRST); + } // add button to tool bar of C++ source files - connect(EditorManager::instance(), &EditorManager::editorOpened, this, [this, cmd](IEditor *editor) { + connect(EditorManager::instance(), &EditorManager::editorOpened, this, + [this](IEditor *editor) { if (editor->document()->filePath().isEmpty() - || !Utils::mimeTypeForName(editor->document()->mimeType()).inherits("text/x-c++src")) + || !Utils::mimeTypeForName(editor->document()->mimeType()).inherits("text/x-c++src")) return; auto *textEditor = qobject_cast(editor); if (!textEditor) @@ -157,12 +167,25 @@ void ClangToolsPlugin::registerAnalyzeActions() if (!widget) return; const QIcon icon = Utils::Icon({{":/debugger/images/debugger_singleinstructionmode.png", - Utils::Theme::IconsBaseColor}}) - .icon(); - QAction *action = widget->toolBar()->addAction(icon, tr("Analyze File"), [this, editor] { - d->clangTool.startTool(editor->document()->filePath()); - }); - cmd->augmentActionWithShortcutToolTip(action); + Utils::Theme::IconsBaseColor}}).icon(); + const auto button = new QToolButton; + button->setPopupMode(QToolButton::InstantPopup); + button->setIcon(icon); + button->setToolTip(tr("Analyze File...")); + widget->toolBar()->addWidget(button); + const auto toolsMenu = new QMenu(widget); + button->setMenu(toolsMenu); + for (const auto &toolInfo : {std::make_pair(ClangTidyTool::instance(), + Constants::RUN_CLANGTIDY_ON_CURRENT_FILE), + std::make_pair(ClazyTool::instance(), + Constants::RUN_CLAZY_ON_CURRENT_FILE)}) { + ClangTool * const tool = toolInfo.first; + Command * const cmd = ActionManager::command(toolInfo.second); + QAction * const action = toolsMenu->addAction(tool->name(), [this, editor, tool] { + tool->startTool(editor->document()->filePath()); + }); + cmd->augmentActionWithShortcutToolTip(action); + } }); } diff --git a/src/plugins/clangtools/clangtoolspreconfiguredsessiontests.cpp b/src/plugins/clangtools/clangtoolspreconfiguredsessiontests.cpp index 3a2c45099bb..6c1c0d1386b 100644 --- a/src/plugins/clangtools/clangtoolspreconfiguredsessiontests.cpp +++ b/src/plugins/clangtools/clangtoolspreconfiguredsessiontests.cpp @@ -99,13 +99,15 @@ void PreconfiguredSessionTests::testPreconfiguredSession() QVERIFY(switchToProjectAndTarget(project, target)); - ClangTool::instance()->startTool(ClangTool::FileSelectionType::AllFiles); - QSignalSpy waitUntilAnalyzerFinished(ClangTool::instance(), SIGNAL(finished(bool))); - QVERIFY(waitUntilAnalyzerFinished.wait(30000)); - const QList arguments = waitUntilAnalyzerFinished.takeFirst(); - const bool analyzerFinishedSuccessfully = arguments.first().toBool(); - QVERIFY(analyzerFinishedSuccessfully); - QCOMPARE(ClangTool::instance()->diagnostics().count(), 0); + for (ClangTool * const tool : {ClangTidyTool::instance(), ClazyTool::instance()}) { + tool->startTool(ClangTool::FileSelectionType::AllFiles); + QSignalSpy waitUntilAnalyzerFinished(tool, SIGNAL(finished(bool))); + QVERIFY(waitUntilAnalyzerFinished.wait(30000)); + const QList arguments = waitUntilAnalyzerFinished.takeFirst(); + const bool analyzerFinishedSuccessfully = arguments.first().toBool(); + QVERIFY(analyzerFinishedSuccessfully); + QCOMPARE(tool->diagnostics().count(), 0); + } } static const QList validProjects(const QList projectsOfSession) diff --git a/src/plugins/clangtools/clangtoolsprojectsettingswidget.cpp b/src/plugins/clangtools/clangtoolsprojectsettingswidget.cpp index 82ecff437db..8405d7e0acb 100644 --- a/src/plugins/clangtools/clangtoolsprojectsettingswidget.cpp +++ b/src/plugins/clangtools/clangtoolsprojectsettingswidget.cpp @@ -54,8 +54,10 @@ ClangToolsProjectSettingsWidget::ClangToolsProjectSettingsWidget(ProjectExplorer setGlobalSettingsId(ClangTools::Constants::SETTINGS_PAGE_ID); m_restoreGlobal = new QPushButton(tr("Restore Global Settings")); - auto gotoAnalyzerModeLabel = - new QLabel("" + tr("Go to Analyzer") + ""); + const auto gotoClangTidyModeLabel + = new QLabel("" + tr("Go to Clang-Tidy") + ""); + const auto gotoClazyModeLabel + = new QLabel("" + tr("Go to Clazy") + ""); m_runSettingsWidget = new ClangTools::Internal::RunSettingsWidget(this); @@ -67,7 +69,7 @@ ClangToolsProjectSettingsWidget::ClangToolsProjectSettingsWidget(ProjectExplorer using namespace Utils::Layouting; Column { - Row { m_restoreGlobal, st, gotoAnalyzerModeLabel }, + Row { m_restoreGlobal, st, gotoClangTidyModeLabel, gotoClazyModeLabel }, m_runSettingsWidget, @@ -96,8 +98,11 @@ ClangToolsProjectSettingsWidget::ClangToolsProjectSettingsWidget(ProjectExplorer m_runSettingsWidget->fromSettings(ClangToolsSettings::instance()->runSettings()); }); - connect(gotoAnalyzerModeLabel, &QLabel::linkActivated, [](const QString &) { - ClangTool::instance()->selectPerspective(); + connect(gotoClangTidyModeLabel, &QLabel::linkActivated, [](const QString &) { + ClangTidyTool::instance()->selectPerspective(); + }); + connect(gotoClazyModeLabel, &QLabel::linkActivated, [](const QString &) { + ClazyTool::instance()->selectPerspective(); }); // Run options diff --git a/src/plugins/clangtools/clangtoolsunittests.cpp b/src/plugins/clangtools/clangtoolsunittests.cpp index 617ba8cc5e7..47e6e318f89 100644 --- a/src/plugins/clangtools/clangtoolsunittests.cpp +++ b/src/plugins/clangtools/clangtoolsunittests.cpp @@ -86,7 +86,8 @@ static ClangDiagnosticConfig configFor(const QString &tidyChecks, void ClangToolsUnitTests::testProject() { QFETCH(QString, projectFilePath); - QFETCH(int, expectedDiagCount); + QFETCH(int, expectedDiagCountClangTidy); + QFETCH(int, expectedDiagCountClazy); QFETCH(ClangDiagnosticConfig, diagnosticConfig); if (projectFilePath.contains("mingw")) { const auto toolchain = ToolChainKitAspect::cxxToolChain(m_kit); @@ -98,71 +99,75 @@ void ClangToolsUnitTests::testProject() Tests::ProjectOpenerAndCloser projectManager; QVERIFY(projectManager.open(projectFilePath, true, m_kit)); - // Run tool - ClangTool *tool = ClangTool::instance(); - tool->startTool(ClangTool::FileSelectionType::AllFiles, - ClangToolsSettings::instance()->runSettings(), - diagnosticConfig); - QSignalSpy waitForFinishedTool(tool, &ClangTool::finished); - QVERIFY(waitForFinishedTool.wait(m_timeout)); + // Run tools + for (ClangTool * const tool : {ClangTidyTool::instance(), ClazyTool::instance()}) { + tool->startTool(ClangTool::FileSelectionType::AllFiles, + ClangToolsSettings::instance()->runSettings(), + diagnosticConfig); + QSignalSpy waitForFinishedTool(tool, &ClangTool::finished); + QVERIFY(waitForFinishedTool.wait(m_timeout)); - // Check for errors - const QString errorText = waitForFinishedTool.takeFirst().constFirst().toString(); - const bool finishedSuccessfully = errorText.isEmpty(); - if (!finishedSuccessfully) - qWarning("Error: %s", qPrintable(errorText)); - QVERIFY(finishedSuccessfully); - QCOMPARE(tool->diagnostics().count(), expectedDiagCount); + // Check for errors + const QString errorText = waitForFinishedTool.takeFirst().constFirst().toString(); + const bool finishedSuccessfully = errorText.isEmpty(); + if (!finishedSuccessfully) + qWarning("Error: %s", qPrintable(errorText)); + QVERIFY(finishedSuccessfully); + QCOMPARE(tool->diagnostics().count(), tool == ClangTidyTool::instance() + ? expectedDiagCountClangTidy : expectedDiagCountClazy); + } } void ClangToolsUnitTests::testProject_data() { QTest::addColumn("projectFilePath"); - QTest::addColumn("expectedDiagCount"); + QTest::addColumn("expectedDiagCountClangTidy"); + QTest::addColumn("expectedDiagCountClazy"); QTest::addColumn("diagnosticConfig"); // Test simple C++ project. ClangDiagnosticConfig config = configFor("modernize-use-nullptr", QString()); - addTestRow("simple/simple.qbs", 1, config); - addTestRow("simple/simple.pro", 1, config); + addTestRow("simple/simple.qbs", 1, 0, config); + addTestRow("simple/simple.pro", 1, 0, config); // Test simple Qt project. config = configFor("readability-static-accessed-through-instance", QString()); - addTestRow("qt-widgets-app/qt-widgets-app.qbs", 1, config); - addTestRow("qt-widgets-app/qt-widgets-app.pro", 1, config); + addTestRow("qt-widgets-app/qt-widgets-app.qbs", 1, 0, config); + addTestRow("qt-widgets-app/qt-widgets-app.pro", 1, 0, config); // Test that libraries can be analyzed. config = configFor(QString(), QString()); - addTestRow("simple-library/simple-library.qbs", 0, config); - addTestRow("simple-library/simple-library.pro", 0, config); + addTestRow("simple-library/simple-library.qbs", 0, 0, config); + addTestRow("simple-library/simple-library.pro", 0, 0, config); // Test that standard headers can be parsed. - addTestRow("stdc++11-includes/stdc++11-includes.qbs", 0, config); - addTestRow("stdc++11-includes/stdc++11-includes.pro", 0, config); + addTestRow("stdc++11-includes/stdc++11-includes.qbs", 0, 0, config); + addTestRow("stdc++11-includes/stdc++11-includes.pro", 0, 0, config); // Test that qt essential headers can be parsed. - addTestRow("qt-essential-includes/qt-essential-includes.qbs", 0, config); - addTestRow("qt-essential-includes/qt-essential-includes.pro", 0, config); + addTestRow("qt-essential-includes/qt-essential-includes.qbs", 0, 0, config); + addTestRow("qt-essential-includes/qt-essential-includes.pro", 0, 0, config); // Test that mingw includes can be parsed. - addTestRow("mingw-includes/mingw-includes.qbs", 0, config); - addTestRow("mingw-includes/mingw-includes.pro", 0, config); + addTestRow("mingw-includes/mingw-includes.qbs", 0, 0, config); + addTestRow("mingw-includes/mingw-includes.pro", 0, 0, config); // Test that tidy and clazy diagnostics are emitted for the same project. addTestRow("clangtidy_clazy/clangtidy_clazy.pro", - 1 /*tidy*/ + 1 /*clazy*/, - configFor("misc-unconventional-assign-operator", "qgetenv")); + 1, 1, configFor("misc-unconventional-assign-operator", "qgetenv")); } void ClangToolsUnitTests::addTestRow(const QByteArray &relativeFilePath, - int expectedDiagCount, + int expectedDiagCountClangTidy, + int expectedDiagCountClazy, const ClangDiagnosticConfig &diagnosticConfig) { const QString absoluteFilePath = m_tmpDir->absolutePath(relativeFilePath); const QString fileName = QFileInfo(absoluteFilePath).fileName(); QTest::newRow(fileName.toUtf8().constData()) - << absoluteFilePath << expectedDiagCount << diagnosticConfig; + << absoluteFilePath << expectedDiagCountClangTidy << expectedDiagCountClazy + << diagnosticConfig; } int ClangToolsUnitTests::getTimeout() diff --git a/src/plugins/clangtools/clangtoolsunittests.h b/src/plugins/clangtools/clangtoolsunittests.h index d847e5764d8..59d8f742c6b 100644 --- a/src/plugins/clangtools/clangtoolsunittests.h +++ b/src/plugins/clangtools/clangtoolsunittests.h @@ -30,7 +30,7 @@ private slots: private: void addTestRow(const QByteArray &relativeFilePath, - int expectedDiagCount, + int expectedDiagCountClangTidy, int expectedDiagCountClazy, const CppEditor::ClangDiagnosticConfig &diagnosticConfig); private: