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: