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 <cristian.adam@qt.io>
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@qt.io>
This commit is contained in:
Nikolai Kosjar
2019-08-01 15:18:32 +02:00
parent 90189ec3d1
commit 9f868c44ce
6 changed files with 37 additions and 12 deletions

View File

@@ -45,14 +45,20 @@ ClangTidyClazyRunWorker::ClangTidyClazyRunWorker(RunControl *runControl,
QList<RunnerCreator> ClangTidyClazyRunWorker::runnerCreators()
{
return {
[this]() { return createRunner(); }
};
QList<RunnerCreator> creators;
if (!m_diagnosticConfig.clazyChecks().isEmpty())
creators << [this]() { return createRunner<ClazyRunner>(); };
if (m_diagnosticConfig.clangTidyMode() != CppTools::ClangDiagnosticConfig::TidyMode::Disabled)
creators << [this]() { return createRunner<ClangTidyRunner>(); };
return creators;
}
template <class T>
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);

View File

@@ -46,7 +46,7 @@ protected:
ClangTool *tool() final;
private:
ClangToolRunner *createRunner();
template <class T> ClangToolRunner *createRunner();
private:
CppTools::ClangDiagnosticConfig m_diagnosticConfig;

View File

@@ -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

View File

@@ -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

View File

@@ -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);
}

View File

@@ -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; }