From 685c3ee4cb0e1b9a9134e44734d4e5547d03460b Mon Sep 17 00:00:00 2001 From: Christian Kandeler Date: Mon, 15 Aug 2022 14:28:21 +0200 Subject: [PATCH] ClangTools: Support doc urls for pre-relase clang-tidy Change-Id: I9c28b5846d576d0b17c2e36f790d59b6bb005f6b Reviewed-by: Qt CI Bot Reviewed-by: Reviewed-by: David Schulz --- src/plugins/clangtools/clangtoolssettings.cpp | 13 ++++++++---- src/plugins/clangtools/clangtoolssettings.h | 10 ++++++---- src/plugins/clangtools/clangtoolsutils.cpp | 20 +++++++++++-------- 3 files changed, 27 insertions(+), 16 deletions(-) diff --git a/src/plugins/clangtools/clangtoolssettings.cpp b/src/plugins/clangtools/clangtoolssettings.cpp index 7578b252786..744d6f4e984 100644 --- a/src/plugins/clangtools/clangtoolssettings.cpp +++ b/src/plugins/clangtools/clangtoolssettings.cpp @@ -27,6 +27,7 @@ #include "clangtoolsconstants.h" #include "clangtoolsutils.h" +#include "executableinfo.h" #include #include @@ -206,14 +207,18 @@ void ClangToolsSettings::setClazyStandaloneExecutable(const FilePath &path) m_clazyVersion = {}; } -static QVersionNumber getVersionNumber(QVersionNumber &version, const FilePath &toolFilePath) +static VersionAndSuffix getVersionNumber(VersionAndSuffix &version, const FilePath &toolFilePath) { - if (version.isNull() && !toolFilePath.isEmpty()) - version = QVersionNumber::fromString(queryVersion(toolFilePath, QueryFailMode::Silent)); + if (version.first.isNull() && !toolFilePath.isEmpty()) { + const QString versionString = queryVersion(toolFilePath, QueryFailMode::Silent); + int suffixIndex = versionString.length() - 1; + version.first = QVersionNumber::fromString(versionString, &suffixIndex); + version.second = versionString.mid(suffixIndex); + } return version; } -QVersionNumber ClangToolsSettings::clangTidyVersion() +VersionAndSuffix ClangToolsSettings::clangTidyVersion() { return getVersionNumber(instance()->m_clangTidyVersion, Internal::clangTidyExecutable()); } diff --git a/src/plugins/clangtools/clangtoolssettings.h b/src/plugins/clangtools/clangtoolssettings.h index aaea8656ae6..a85b8d18775 100644 --- a/src/plugins/clangtools/clangtoolssettings.h +++ b/src/plugins/clangtools/clangtoolssettings.h @@ -25,13 +25,13 @@ #pragma once -#include "executableinfo.h" - #include +#include #include #include +#include #include #include @@ -40,6 +40,8 @@ namespace Internal { const char diagnosticConfigIdKey[] = "DiagnosticConfig"; +using VersionAndSuffix = QPair; + class RunSettings { public: @@ -90,7 +92,7 @@ public: RunSettings runSettings() const { return m_runSettings; } void setRunSettings(const RunSettings &settings) { m_runSettings = settings; } - static QVersionNumber clangTidyVersion(); + static VersionAndSuffix clangTidyVersion(); static QVersionNumber clazyVersion(); signals: @@ -111,7 +113,7 @@ private: RunSettings m_runSettings; // Version info. Ephemeral. - QVersionNumber m_clangTidyVersion; + VersionAndSuffix m_clangTidyVersion; QVersionNumber m_clazyVersion; }; diff --git a/src/plugins/clangtools/clangtoolsutils.cpp b/src/plugins/clangtools/clangtoolsutils.cpp index e5e04a3a224..5b98c066e4b 100644 --- a/src/plugins/clangtools/clangtoolsutils.cpp +++ b/src/plugins/clangtools/clangtoolsutils.cpp @@ -341,14 +341,18 @@ QStringList extraClangToolsAppendOptions() QString clangTidyDocUrl(const QString &check) { - QVersionNumber version = ClangToolsSettings::clangTidyVersion(); - version = QVersionNumber(version.majorVersion(), 0, 0); - if (version == QVersionNumber(0)) - version = QVersionNumber(12); - static const char urlTemplate[] - = "https://releases.llvm.org/%1/tools/clang/tools/extra/docs/clang-tidy/checks/"; - QString url = QString::fromLatin1(urlTemplate).arg(version.toString()); - if (version.majorVersion() < 15) { + VersionAndSuffix version = ClangToolsSettings::clangTidyVersion(); + version.first = QVersionNumber(version.first.majorVersion(), 0, 0); + if (version.first == QVersionNumber(0)) + version.first = QVersionNumber(12); + static const char versionedUrlPrefix[] + = "https://releases.llvm.org/%1/tools/clang/tools/extra/docs/"; + static const char unversionedUrlPrefix[] = "https://clang.llvm.org/extra/"; + QString url = version.second.contains("git") + ? QString::fromLatin1(unversionedUrlPrefix) + : QString::fromLatin1(versionedUrlPrefix).arg(version.first.toString()); + url.append("clang-tidy/checks/"); + if (version.first.majorVersion() < 15) { url.append(check); } else { const int hyphenIndex = check.indexOf('-');