diff options
author | Nikolai Kosjar <nikolai.kosjar@qt.io> | 2019-08-01 14:54:15 +0200 |
---|---|---|
committer | Nikolai Kosjar <nikolai.kosjar@qt.io> | 2019-09-11 08:47:07 +0000 |
commit | 217332a48f5110325ba7ebdffd520966ce2824fa (patch) | |
tree | 397fe96d7ac5234956c9b941f7d22c02d214826a /src/plugins/clangtools | |
parent | a4022c61569a4d286fc1624a4cca28857b403f06 (diff) | |
download | qt-creator-217332a48f5110325ba7ebdffd520966ce2824fa.tar.gz |
ClangTools: Prepare for more ClangToolRunners
Change-Id: I6bbdbff496c0604367896d279df1a197f8a041bd
Reviewed-by: David Schulz <david.schulz@qt.io>
Reviewed-by: hjk <hjk@qt.io>
Diffstat (limited to 'src/plugins/clangtools')
-rw-r--r-- | src/plugins/clangtools/clangtidyclazyruncontrol.cpp | 7 | ||||
-rw-r--r-- | src/plugins/clangtools/clangtidyclazyrunner.cpp | 63 | ||||
-rw-r--r-- | src/plugins/clangtools/clangtidyclazyrunner.h | 12 | ||||
-rw-r--r-- | src/plugins/clangtools/clangtoolrunner.cpp | 16 | ||||
-rw-r--r-- | src/plugins/clangtools/clangtoolrunner.h | 27 |
5 files changed, 64 insertions, 61 deletions
diff --git a/src/plugins/clangtools/clangtidyclazyruncontrol.cpp b/src/plugins/clangtools/clangtidyclazyruncontrol.cpp index 4422020df3..3f1b2c4a0c 100644 --- a/src/plugins/clangtools/clangtidyclazyruncontrol.cpp +++ b/src/plugins/clangtools/clangtidyclazyruncontrol.cpp @@ -52,11 +52,8 @@ QList<RunnerCreator> ClangTidyClazyRunWorker::runnerCreators() ClangToolRunner *ClangTidyClazyRunWorker::createRunner() { - auto runner = new ClangTidyClazyRunner(m_diagnosticConfig, - m_clangExecutable, - m_temporaryDir.path(), - m_environment, - this); + auto runner = new ClangTidyClazyRunner(m_diagnosticConfig, this); + runner->init(m_clangExecutable, m_temporaryDir.path(), m_environment); connect(runner, &ClangToolRunner::finishedWithSuccess, this, &ClangTidyClazyRunWorker::onRunnerFinishedWithSuccess); connect(runner, &ClangToolRunner::finishedWithFailure, diff --git a/src/plugins/clangtools/clangtidyclazyrunner.cpp b/src/plugins/clangtools/clangtidyclazyrunner.cpp index 2bb0caf3aa..ab257212a3 100644 --- a/src/plugins/clangtools/clangtidyclazyrunner.cpp +++ b/src/plugins/clangtools/clangtidyclazyrunner.cpp @@ -40,50 +40,52 @@ static Q_LOGGING_CATEGORY(LOG, "qtc.clangtools.runner", QtWarningMsg) +using namespace CppTools; + namespace ClangTools { namespace Internal { -ClangTidyClazyRunner::ClangTidyClazyRunner(const CppTools::ClangDiagnosticConfig &diagnosticConfig, - const QString &clangExecutable, - const QString &clangLogFileDir, - const Utils::Environment &environment, - QObject *parent) - : ClangToolRunner(clangExecutable, - clangLogFileDir, - environment, - tr("Clang-Tidy and Clazy"), - parent) - , m_diagnosticConfig(diagnosticConfig) -{ -} - -QStringList ClangTidyClazyRunner::constructCommandLineArguments(const QStringList &options) +static QStringList commonArguments(const QStringList &options, + const QString &logFile, + const ClangDiagnosticConfig diagnosticConfig) { - using namespace CppTools; QStringList arguments; - if (LOG().isDebugEnabled()) arguments << QLatin1String("-v"); - const QStringList serializeArgs{"-serialize-diagnostics", m_logFile}; + const QStringList serializeArgs{"-serialize-diagnostics", logFile}; if (options.contains("--driver-mode=cl")) arguments << clangArgsForCl(serializeArgs); else arguments << serializeArgs; arguments << ClangDiagnosticConfigsModel::globalDiagnosticOptions() - << m_diagnosticConfig.clangOptions(); + << diagnosticConfig.clangOptions(); + + return arguments; +} + +static QStringList tidyPluginArguments(const ClangDiagnosticConfig diagnosticConfig) +{ + QStringList arguments; - const ClangDiagnosticConfig::TidyMode tidyMode = m_diagnosticConfig.clangTidyMode(); + const ClangDiagnosticConfig::TidyMode tidyMode = diagnosticConfig.clangTidyMode(); if (tidyMode != ClangDiagnosticConfig::TidyMode::Disabled) { arguments << XclangArgs({"-add-plugin", "clang-tidy"}); if (tidyMode != ClangDiagnosticConfig::TidyMode::File) { - const QString tidyChecks = m_diagnosticConfig.clangTidyChecks(); + const QString tidyChecks = diagnosticConfig.clangTidyChecks(); arguments << XclangArgs({"-plugin-arg-clang-tidy", "-checks=" + tidyChecks}); } } - const QString clazyChecks = m_diagnosticConfig.clazyChecks(); + return arguments; +} + +static QStringList clazyPluginArguments(const ClangDiagnosticConfig diagnosticConfig) +{ + QStringList arguments; + + const QString clazyChecks = diagnosticConfig.clazyChecks(); if (!clazyChecks.isEmpty()) { arguments << XclangArgs({"-add-plugin", "clazy", @@ -92,12 +94,25 @@ QStringList ClangTidyClazyRunner::constructCommandLineArguments(const QStringLis "-plugin-arg-clazy", "no-autowrite-fixits", "-plugin-arg-clazy", - m_diagnosticConfig.clazyChecks()}); + diagnosticConfig.clazyChecks()}); } - arguments << options << QDir::toNativeSeparators(filePath()); return arguments; } +ClangTidyClazyRunner::ClangTidyClazyRunner(const ClangDiagnosticConfig &config, + QObject *parent) + : ClangToolRunner(parent) +{ + setName(tr("Clang-Tidy/Clazy")); + setArgsCreator([this, config](const QStringList &baseOptions) { + return commonArguments(baseOptions, m_logFile, config) + << tidyPluginArguments(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 507ac2977d..6e5211a71c 100644 --- a/src/plugins/clangtools/clangtidyclazyrunner.h +++ b/src/plugins/clangtools/clangtidyclazyrunner.h @@ -37,17 +37,7 @@ class ClangTidyClazyRunner final : public ClangToolRunner Q_OBJECT public: - ClangTidyClazyRunner(const CppTools::ClangDiagnosticConfig &diagnosticConfig, - const QString &clangExecutable, - const QString &clangLogFileDir, - const Utils::Environment &environment, - QObject *parent = nullptr); - -protected: - QStringList constructCommandLineArguments(const QStringList &options) final; - -private: - const CppTools::ClangDiagnosticConfig m_diagnosticConfig; + ClangTidyClazyRunner(const CppTools::ClangDiagnosticConfig &config, QObject *parent = nullptr); }; } // namespace Internal diff --git a/src/plugins/clangtools/clangtoolrunner.cpp b/src/plugins/clangtools/clangtoolrunner.cpp index c02d59a7da..09e5806cd8 100644 --- a/src/plugins/clangtools/clangtoolrunner.cpp +++ b/src/plugins/clangtools/clangtoolrunner.cpp @@ -58,16 +58,12 @@ QString finishedWithBadExitCode(const QString &name, int exitCode) return ClangToolRunner::tr("%1 finished with exit code: %2.").arg(name).arg(exitCode); } -ClangToolRunner::ClangToolRunner(const QString &clangExecutable, - const QString &clangLogFileDir, - const Utils::Environment &environment, - const QString &name, - QObject *parent) - : QObject(parent) - , m_clangExecutable(QDir::toNativeSeparators(clangExecutable)) - , m_clangLogFileDir(clangLogFileDir) - , m_name(name) +void ClangToolRunner::init(const QString &clangExecutable, + const QString &clangLogFileDir, + const Utils::Environment &environment) { + m_clangExecutable = QDir::toNativeSeparators(clangExecutable); + m_clangLogFileDir = clangLogFileDir; QTC_CHECK(!m_clangExecutable.isEmpty()); QTC_CHECK(!m_clangLogFileDir.isEmpty()); @@ -97,7 +93,7 @@ bool ClangToolRunner::run(const QString &filePath, const QStringList &compilerOp m_logFile = createLogFile(filePath); QTC_ASSERT(!m_logFile.isEmpty(), return false); - const QStringList arguments = constructCommandLineArguments(compilerOptions); + const QStringList arguments = m_argsCreator(compilerOptions); m_commandLine = Utils::QtcProcess::joinArgs(QStringList(m_clangExecutable) + arguments); qCDebug(LOG).noquote() << "Starting" << m_commandLine; diff --git a/src/plugins/clangtools/clangtoolrunner.h b/src/plugins/clangtools/clangtoolrunner.h index b0d0b605cc..72bcc60f5f 100644 --- a/src/plugins/clangtools/clangtoolrunner.h +++ b/src/plugins/clangtools/clangtoolrunner.h @@ -25,6 +25,8 @@ #pragma once +#include <memory> + #include <QString> #include <QProcess> @@ -33,6 +35,8 @@ namespace Utils { class Environment; } namespace ClangTools { namespace Internal { +using ArgsCreator = std::function<QStringList(const QStringList &baseOptions)>; + QString finishedWithBadExitCode(const QString &name, int exitCode); // exposed for tests class ClangToolRunner : public QObject @@ -40,13 +44,15 @@ class ClangToolRunner : public QObject Q_OBJECT public: - ClangToolRunner(const QString &clangExecutable, - const QString &clangLogFileDir, - const Utils::Environment &environment, - const QString &name, - QObject *parent = nullptr); + ClangToolRunner(QObject *parent = nullptr) : QObject(parent) {} ~ClangToolRunner() override; + void init(const QString &clangExecutable, + const QString &clangLogFileDir, + const Utils::Environment &environment); + void setName(const QString &name) { m_name = name; } + void setArgsCreator(const ArgsCreator &argsCreator) { m_argsCreator = argsCreator; } + // compilerOptions is expected to contain everything except: // (1) filePath, that is the file to analyze // (2) -o output-file @@ -60,12 +66,8 @@ signals: void finishedWithSuccess(const QString &filePath); void finishedWithFailure(const QString &errorMessage, const QString &errorDetails); -protected: - virtual QStringList constructCommandLineArguments(const QStringList &options) = 0; - - virtual void onProcessOutput(); - private: + virtual void onProcessOutput(); void onProcessStarted(); void onProcessFinished(int exitCode, QProcess::ExitStatus exitStatus); void onProcessError(QProcess::ProcessError error); @@ -81,9 +83,12 @@ protected: private: QString m_clangExecutable; QString m_clangLogFileDir; + + QString m_name; + ArgsCreator m_argsCreator; + QString m_filePath; QString m_commandLine; - const QString m_name; }; } // namespace Internal |