ClangTools: Do not require a valid clazy executable to run clang-tidy

... and vice versa.

Change-Id: I85114c778f97e04299d4b66a3ad99abdb503185f
Reviewed-by: David Schulz <david.schulz@qt.io>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
This commit is contained in:
Christian Kandeler
2023-06-22 16:44:14 +02:00
parent ffffb18f8f
commit 1532986f10
2 changed files with 15 additions and 22 deletions

View File

@@ -350,8 +350,8 @@ static RunSettings runSettings()
return ClangToolsSettings::instance()->runSettings(); return ClangToolsSettings::instance()->runSettings();
} }
ClangTool::ClangTool(const QString &name, Utils::Id id) ClangTool::ClangTool(const QString &name, Utils::Id id, ClangToolType type)
: m_name(name), m_perspective{id.toString(), name} : m_name(name), m_perspective{id.toString(), name}, m_type(type)
{ {
setObjectName(name); setObjectName(name);
m_diagnosticModel = new ClangToolsDiagnosticModel(this); m_diagnosticModel = new ClangToolsDiagnosticModel(this);
@@ -830,8 +830,7 @@ static bool canAnalyzeProject(Project *project)
struct CheckResult { struct CheckResult {
enum { enum {
InvalidTidyExecutable, InvalidExecutable,
InvalidClazyExecutable,
ProjectNotOpen, ProjectNotOpen,
ProjectNotSuitable, ProjectNotSuitable,
ReadyToAnalyze, ReadyToAnalyze,
@@ -839,20 +838,13 @@ struct CheckResult {
QString errorText; QString errorText;
}; };
static CheckResult canAnalyze() static CheckResult canAnalyze(ClangToolType type, const QString &name)
{ {
const ClangDiagnosticConfig config = diagnosticConfig(runSettings().diagnosticConfigId()); const ClangDiagnosticConfig config = diagnosticConfig(runSettings().diagnosticConfigId());
if (toolEnabled(ClangToolType::Tidy, config, runSettings()) if (toolEnabled(type, config, runSettings())
&& !toolExecutable(ClangToolType::Tidy).isExecutableFile()) { && !toolExecutable(type).isExecutableFile()) {
return {CheckResult::InvalidTidyExecutable, return {CheckResult::InvalidExecutable, Tr::tr("Set a valid %1 executable.").arg(name)};
Tr::tr("Set a valid Clang-Tidy executable.")};
}
if (toolEnabled(ClangToolType::Clazy, config, runSettings())
&& !toolExecutable(ClangToolType::Clazy).isExecutableFile()) {
return {CheckResult::InvalidClazyExecutable,
Tr::tr("Set a valid Clazy-Standalone executable.")};
} }
if (Project *project = ProjectManager::startupProject()) { if (Project *project = ProjectManager::startupProject()) {
@@ -876,10 +868,9 @@ void ClangTool::updateForInitialState()
m_infoBarWidget->reset(); m_infoBarWidget->reset();
const CheckResult result = canAnalyze(); const CheckResult result = canAnalyze(m_type, m_name);
switch (result.kind) switch (result.kind)
case CheckResult::InvalidTidyExecutable: { case CheckResult::InvalidExecutable: {
case CheckResult::InvalidClazyExecutable:
m_infoBarWidget->setError(InfoBarWidget::Warning, makeLink(result.errorText), m_infoBarWidget->setError(InfoBarWidget::Warning, makeLink(result.errorText),
[] { ICore::showOptionsDialog(Constants::SETTINGS_PAGE_ID); }); [] { ICore::showOptionsDialog(Constants::SETTINGS_PAGE_ID); });
break; break;
@@ -1084,7 +1075,7 @@ void ClangTool::updateForCurrentState()
QString startActionToolTip = m_startAction->text(); QString startActionToolTip = m_startAction->text();
QString startOnCurrentToolTip = m_startOnCurrentFileAction->text(); QString startOnCurrentToolTip = m_startOnCurrentFileAction->text();
if (!isRunning) { if (!isRunning) {
const CheckResult result = canAnalyze(); const CheckResult result = canAnalyze(m_type, m_name);
canStart = result.kind == CheckResult::ReadyToAnalyze; canStart = result.kind == CheckResult::ReadyToAnalyze;
if (!canStart) { if (!canStart) {
startActionToolTip = result.errorText; startActionToolTip = result.errorText;
@@ -1171,11 +1162,12 @@ void ClangTool::updateForCurrentState()
m_infoBarWidget->setDiagText(diagText); m_infoBarWidget->setDiagText(diagText);
} }
ClangTidyTool::ClangTidyTool() : ClangTool(Tr::tr("Clang-Tidy"), "ClangTidy.Perspective") ClangTidyTool::ClangTidyTool() : ClangTool(Tr::tr("Clang-Tidy"), "ClangTidy.Perspective",
ClangToolType::Tidy)
{ {
m_instance = this; m_instance = this;
} }
ClazyTool::ClazyTool() : ClangTool(Tr::tr("Clazy"), "Clazy.Perspective") ClazyTool::ClazyTool() : ClangTool(Tr::tr("Clazy"), "Clazy.Perspective", ClangToolType::Clazy)
{ {
m_instance = this; m_instance = this;
} }

View File

@@ -82,7 +82,7 @@ signals:
void finished(const QString &errorText); // For testing. void finished(const QString &errorText); // For testing.
protected: protected:
ClangTool(const QString &name, Utils::Id id); ClangTool(const QString &name, Utils::Id id, CppEditor::ClangToolType type);
private: private:
enum class State { enum class State {
@@ -154,6 +154,7 @@ private:
QAction *m_expandCollapse = nullptr; QAction *m_expandCollapse = nullptr;
Utils::Perspective m_perspective; Utils::Perspective m_perspective;
const CppEditor::ClangToolType m_type;
}; };
class ClangTidyTool : public ClangTool class ClangTidyTool : public ClangTool