ClangTools: Support doc urls for pre-relase clang-tidy

Change-Id: I9c28b5846d576d0b17c2e36f790d59b6bb005f6b
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: David Schulz <david.schulz@qt.io>
This commit is contained in:
Christian Kandeler
2022-08-15 14:28:21 +02:00
parent 74ac09346f
commit 685c3ee4cb
3 changed files with 27 additions and 16 deletions

View File

@@ -27,6 +27,7 @@
#include "clangtoolsconstants.h" #include "clangtoolsconstants.h"
#include "clangtoolsutils.h" #include "clangtoolsutils.h"
#include "executableinfo.h"
#include <coreplugin/icore.h> #include <coreplugin/icore.h>
#include <cppeditor/clangdiagnosticconfig.h> #include <cppeditor/clangdiagnosticconfig.h>
@@ -206,14 +207,18 @@ void ClangToolsSettings::setClazyStandaloneExecutable(const FilePath &path)
m_clazyVersion = {}; m_clazyVersion = {};
} }
static QVersionNumber getVersionNumber(QVersionNumber &version, const FilePath &toolFilePath) static VersionAndSuffix getVersionNumber(VersionAndSuffix &version, const FilePath &toolFilePath)
{ {
if (version.isNull() && !toolFilePath.isEmpty()) if (version.first.isNull() && !toolFilePath.isEmpty()) {
version = QVersionNumber::fromString(queryVersion(toolFilePath, QueryFailMode::Silent)); 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; return version;
} }
QVersionNumber ClangToolsSettings::clangTidyVersion() VersionAndSuffix ClangToolsSettings::clangTidyVersion()
{ {
return getVersionNumber(instance()->m_clangTidyVersion, Internal::clangTidyExecutable()); return getVersionNumber(instance()->m_clangTidyVersion, Internal::clangTidyExecutable());
} }

View File

@@ -25,13 +25,13 @@
#pragma once #pragma once
#include "executableinfo.h"
#include <cppeditor/clangdiagnosticconfig.h> #include <cppeditor/clangdiagnosticconfig.h>
#include <utils/filepath.h>
#include <utils/id.h> #include <utils/id.h>
#include <QObject> #include <QObject>
#include <QPair>
#include <QString> #include <QString>
#include <QVersionNumber> #include <QVersionNumber>
@@ -40,6 +40,8 @@ namespace Internal {
const char diagnosticConfigIdKey[] = "DiagnosticConfig"; const char diagnosticConfigIdKey[] = "DiagnosticConfig";
using VersionAndSuffix = QPair<QVersionNumber, QString>;
class RunSettings class RunSettings
{ {
public: public:
@@ -90,7 +92,7 @@ public:
RunSettings runSettings() const { return m_runSettings; } RunSettings runSettings() const { return m_runSettings; }
void setRunSettings(const RunSettings &settings) { m_runSettings = settings; } void setRunSettings(const RunSettings &settings) { m_runSettings = settings; }
static QVersionNumber clangTidyVersion(); static VersionAndSuffix clangTidyVersion();
static QVersionNumber clazyVersion(); static QVersionNumber clazyVersion();
signals: signals:
@@ -111,7 +113,7 @@ private:
RunSettings m_runSettings; RunSettings m_runSettings;
// Version info. Ephemeral. // Version info. Ephemeral.
QVersionNumber m_clangTidyVersion; VersionAndSuffix m_clangTidyVersion;
QVersionNumber m_clazyVersion; QVersionNumber m_clazyVersion;
}; };

View File

@@ -341,14 +341,18 @@ QStringList extraClangToolsAppendOptions()
QString clangTidyDocUrl(const QString &check) QString clangTidyDocUrl(const QString &check)
{ {
QVersionNumber version = ClangToolsSettings::clangTidyVersion(); VersionAndSuffix version = ClangToolsSettings::clangTidyVersion();
version = QVersionNumber(version.majorVersion(), 0, 0); version.first = QVersionNumber(version.first.majorVersion(), 0, 0);
if (version == QVersionNumber(0)) if (version.first == QVersionNumber(0))
version = QVersionNumber(12); version.first = QVersionNumber(12);
static const char urlTemplate[] static const char versionedUrlPrefix[]
= "https://releases.llvm.org/%1/tools/clang/tools/extra/docs/clang-tidy/checks/"; = "https://releases.llvm.org/%1/tools/clang/tools/extra/docs/";
QString url = QString::fromLatin1(urlTemplate).arg(version.toString()); static const char unversionedUrlPrefix[] = "https://clang.llvm.org/extra/";
if (version.majorVersion() < 15) { 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); url.append(check);
} else { } else {
const int hyphenIndex = check.indexOf('-'); const int hyphenIndex = check.indexOf('-');