From 9f868c44ce56a5a18b75f79cb482cfae6736cf14 Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Thu, 1 Aug 2019 15:18:32 +0200 Subject: [PATCH] ClangTools: Use separate runners for tidy and clazy For a file to analyze, start one process for tidy and one for clazy. No functional change. Change-Id: I049faed5ddbe306e4690ec6831fad19de0de35f6 Reviewed-by: Cristian Adam Reviewed-by: Nikolai Kosjar --- .../clangtools/clangtidyclazyruncontrol.cpp | 14 ++++++++++---- .../clangtools/clangtidyclazyruncontrol.h | 2 +- src/plugins/clangtools/clangtidyclazyrunner.cpp | 17 +++++++++++++---- src/plugins/clangtools/clangtidyclazyrunner.h | 12 ++++++++++-- src/plugins/clangtools/clangtoolruncontrol.cpp | 3 ++- src/plugins/clangtools/clangtoolrunner.h | 1 + 6 files changed, 37 insertions(+), 12 deletions(-) diff --git a/src/plugins/clangtools/clangtidyclazyruncontrol.cpp b/src/plugins/clangtools/clangtidyclazyruncontrol.cpp index 3f1b2c4a0c6..c0b05d33501 100644 --- a/src/plugins/clangtools/clangtidyclazyruncontrol.cpp +++ b/src/plugins/clangtools/clangtidyclazyruncontrol.cpp @@ -45,14 +45,20 @@ ClangTidyClazyRunWorker::ClangTidyClazyRunWorker(RunControl *runControl, QList ClangTidyClazyRunWorker::runnerCreators() { - return { - [this]() { return createRunner(); } - }; + QList creators; + + if (!m_diagnosticConfig.clazyChecks().isEmpty()) + creators << [this]() { return createRunner(); }; + if (m_diagnosticConfig.clangTidyMode() != CppTools::ClangDiagnosticConfig::TidyMode::Disabled) + creators << [this]() { return createRunner(); }; + + return creators; } +template ClangToolRunner *ClangTidyClazyRunWorker::createRunner() { - auto runner = new ClangTidyClazyRunner(m_diagnosticConfig, this); + auto runner = new T(m_diagnosticConfig, this); runner->init(m_clangExecutable, m_temporaryDir.path(), m_environment); connect(runner, &ClangToolRunner::finishedWithSuccess, this, &ClangTidyClazyRunWorker::onRunnerFinishedWithSuccess); diff --git a/src/plugins/clangtools/clangtidyclazyruncontrol.h b/src/plugins/clangtools/clangtidyclazyruncontrol.h index d08292ea8a3..75b265dc531 100644 --- a/src/plugins/clangtools/clangtidyclazyruncontrol.h +++ b/src/plugins/clangtools/clangtidyclazyruncontrol.h @@ -46,7 +46,7 @@ protected: ClangTool *tool() final; private: - ClangToolRunner *createRunner(); + template ClangToolRunner *createRunner(); private: CppTools::ClangDiagnosticConfig m_diagnosticConfig; diff --git a/src/plugins/clangtools/clangtidyclazyrunner.cpp b/src/plugins/clangtools/clangtidyclazyrunner.cpp index ab257212a36..7615097b32b 100644 --- a/src/plugins/clangtools/clangtidyclazyrunner.cpp +++ b/src/plugins/clangtools/clangtidyclazyrunner.cpp @@ -100,19 +100,28 @@ static QStringList clazyPluginArguments(const ClangDiagnosticConfig diagnosticCo return arguments; } -ClangTidyClazyRunner::ClangTidyClazyRunner(const ClangDiagnosticConfig &config, - QObject *parent) +ClangTidyRunner::ClangTidyRunner(const ClangDiagnosticConfig &config, QObject *parent) : ClangToolRunner(parent) { - setName(tr("Clang-Tidy/Clazy")); + setName(tr("Clang-Tidy")); setArgsCreator([this, config](const QStringList &baseOptions) { return commonArguments(baseOptions, m_logFile, config) << tidyPluginArguments(config) - << clazyPluginArguments(config) << baseOptions << QDir::toNativeSeparators(filePath()); }); } +ClazyRunner::ClazyRunner(const ClangDiagnosticConfig &config, QObject *parent) + : ClangToolRunner(parent) +{ + setName(tr("Clazy")); + setArgsCreator([this, config](const QStringList &baseOptions) { + return commonArguments(baseOptions, m_logFile, config) + << clazyPluginArguments(config) << baseOptions + << QDir::toNativeSeparators(filePath()); + }); +} + } // namespace Internal } // namespace ClangTools diff --git a/src/plugins/clangtools/clangtidyclazyrunner.h b/src/plugins/clangtools/clangtidyclazyrunner.h index 6e5211a71ca..39bd80580d5 100644 --- a/src/plugins/clangtools/clangtidyclazyrunner.h +++ b/src/plugins/clangtools/clangtidyclazyrunner.h @@ -32,12 +32,20 @@ namespace ClangTools { namespace Internal { -class ClangTidyClazyRunner final : public ClangToolRunner +class ClangTidyRunner final : public ClangToolRunner { Q_OBJECT public: - ClangTidyClazyRunner(const CppTools::ClangDiagnosticConfig &config, QObject *parent = nullptr); + ClangTidyRunner(const CppTools::ClangDiagnosticConfig &config, QObject *parent = nullptr); +}; + +class ClazyRunner final : public ClangToolRunner +{ + Q_OBJECT + +public: + ClazyRunner(const CppTools::ClangDiagnosticConfig &config, QObject *parent = nullptr); }; } // namespace Internal diff --git a/src/plugins/clangtools/clangtoolruncontrol.cpp b/src/plugins/clangtools/clangtoolruncontrol.cpp index 991ef7b2d42..ebda77aa6b5 100644 --- a/src/plugins/clangtools/clangtoolruncontrol.cpp +++ b/src/plugins/clangtools/clangtoolruncontrol.cpp @@ -390,7 +390,8 @@ void ClangToolRunWorker::analyzeNextFile() m_runners.insert(runner); QTC_ASSERT(runner->run(unit.file, unit.arguments), return); - appendMessage(tr("Analyzing \"%1\".").arg(FilePath::fromString(unit.file).toUserOutput()), + appendMessage(tr("Analyzing \"%1\" [%2].") + .arg(FilePath::fromString(unit.file).toUserOutput(), runner->name()), Utils::StdOutFormat); } diff --git a/src/plugins/clangtools/clangtoolrunner.h b/src/plugins/clangtools/clangtoolrunner.h index 72bcc60f5fb..164ddb7729b 100644 --- a/src/plugins/clangtools/clangtoolrunner.h +++ b/src/plugins/clangtools/clangtoolrunner.h @@ -58,6 +58,7 @@ public: // (2) -o output-file bool run(const QString &filePath, const QStringList &compilerOptions = QStringList()); + QString name() const { return m_name; } QString filePath() const { return m_filePath; } QString logFilePath() const { return m_logFile; }