forked from qt-creator/qt-creator
ClangTools: Make sure clazy doc URL corresponds to tool version
Note that this will only work with clazy >= 1.10. For earlier versions, we fall back to the master branch documentation, as before. Fixes: QTCREATORBUG-25869 Change-Id: I7a8188eda15c4e0548bfaa63aa90f721aa44d6c2 Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
@@ -227,8 +227,7 @@ QVersionNumber ClangToolsSettings::clangTidyVersion()
|
|||||||
|
|
||||||
QVersionNumber ClangToolsSettings::clazyVersion()
|
QVersionNumber ClangToolsSettings::clazyVersion()
|
||||||
{
|
{
|
||||||
return getVersionNumber(instance()->m_clazyVersion,
|
return ClazyStandaloneInfo(ClangTools::Internal::clazyStandaloneExecutable()).version;
|
||||||
ClangTools::Internal::clazyStandaloneExecutable());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace Internal
|
} // namespace Internal
|
||||||
|
|||||||
@@ -304,7 +304,7 @@ QString documentationUrl(const QString &checkName)
|
|||||||
const QString clangStaticAnalyzerPrefix = "clang-analyzer-core.";
|
const QString clangStaticAnalyzerPrefix = "clang-analyzer-core.";
|
||||||
if (name.startsWith(clazyPrefix)) {
|
if (name.startsWith(clazyPrefix)) {
|
||||||
name = checkName.mid(clazyPrefix.length());
|
name = checkName.mid(clazyPrefix.length());
|
||||||
url = QString(CppTools::Constants::CLAZY_DOCUMENTATION_URL_TEMPLATE).arg(name);
|
url = clazyDocUrl(name);
|
||||||
} else if (name.startsWith(clangStaticAnalyzerPrefix)) {
|
} else if (name.startsWith(clangStaticAnalyzerPrefix)) {
|
||||||
url = CppTools::Constants::CLANG_STATIC_ANALYZER_DOCUMENTATION_URL;
|
url = CppTools::Constants::CLANG_STATIC_ANALYZER_DOCUMENTATION_URL;
|
||||||
} else {
|
} else {
|
||||||
@@ -362,5 +362,16 @@ QString clangTidyDocUrl(const QString &check)
|
|||||||
return QString::fromLatin1(urlTemplate).arg(version.toString(), check);
|
return QString::fromLatin1(urlTemplate).arg(version.toString(), check);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QString clazyDocUrl(const QString &check)
|
||||||
|
{
|
||||||
|
QVersionNumber version = ClangToolsSettings::clazyVersion();
|
||||||
|
if (!version.isNull())
|
||||||
|
version = QVersionNumber(version.majorVersion(), version.minorVersion(), 0);
|
||||||
|
const QString versionString = version.isNull() ? "master" : version.toString();
|
||||||
|
static const char urlTemplate[]
|
||||||
|
= "https://github.com/KDE/clazy/blob/%1/docs/checks/README-%2.md";
|
||||||
|
return QString::fromLatin1(urlTemplate).arg(versionString, check);
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace Internal
|
} // namespace Internal
|
||||||
} // namespace ClangTools
|
} // namespace ClangTools
|
||||||
|
|||||||
@@ -43,6 +43,7 @@ namespace ClangTools {
|
|||||||
namespace Internal {
|
namespace Internal {
|
||||||
|
|
||||||
QString clangTidyDocUrl(const QString &check);
|
QString clangTidyDocUrl(const QString &check);
|
||||||
|
QString clazyDocUrl(const QString &check);
|
||||||
|
|
||||||
class Diagnostic;
|
class Diagnostic;
|
||||||
|
|
||||||
|
|||||||
@@ -629,8 +629,7 @@ private:
|
|||||||
if (role == LinkRole || role == Qt::ToolTipRole) {
|
if (role == LinkRole || role == Qt::ToolTipRole) {
|
||||||
if (node->check.name.isEmpty())
|
if (node->check.name.isEmpty())
|
||||||
return QVariant();
|
return QVariant();
|
||||||
return QString::fromUtf8(CppTools::Constants::CLAZY_DOCUMENTATION_URL_TEMPLATE)
|
return clazyDocUrl(node->name);
|
||||||
.arg(node->name);
|
|
||||||
}
|
}
|
||||||
if (role == Qt::DisplayRole && node->kind != ClazyChecksTree::CheckNode)
|
if (role == Qt::DisplayRole && node->kind != ClazyChecksTree::CheckNode)
|
||||||
return QVariant();
|
return QVariant();
|
||||||
|
|||||||
@@ -166,7 +166,23 @@ ClangTidyInfo::ClangTidyInfo(const QString &executablePath)
|
|||||||
ClazyStandaloneInfo::ClazyStandaloneInfo(const QString &executablePath)
|
ClazyStandaloneInfo::ClazyStandaloneInfo(const QString &executablePath)
|
||||||
: defaultChecks(queryClangTidyChecks(executablePath, {})) // Yup, behaves as clang-tidy.
|
: defaultChecks(queryClangTidyChecks(executablePath, {})) // Yup, behaves as clang-tidy.
|
||||||
, supportedChecks(querySupportedClazyChecks(executablePath))
|
, supportedChecks(querySupportedClazyChecks(executablePath))
|
||||||
{}
|
{
|
||||||
|
QString output = runExecutable(CommandLine(executablePath, {"--version"}),
|
||||||
|
QueryFailMode::Silent);
|
||||||
|
QTextStream stream(&output);
|
||||||
|
while (!stream.atEnd()) {
|
||||||
|
// It's just "clazy version " right now, but let's be prepared for someone adding a colon
|
||||||
|
// later on.
|
||||||
|
static const QStringList versionPrefixes{"clazy version ", "clazy version: "};
|
||||||
|
const QString line = stream.readLine().simplified();
|
||||||
|
for (const QString &prefix : versionPrefixes) {
|
||||||
|
if (line.startsWith(prefix)) {
|
||||||
|
version = QVersionNumber::fromString(line.mid(prefix.length()));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static FilePath queryResourceDir(const FilePath &clangToolPath)
|
static FilePath queryResourceDir(const FilePath &clangToolPath)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -30,6 +30,7 @@
|
|||||||
#include <QPair>
|
#include <QPair>
|
||||||
#include <QStringList>
|
#include <QStringList>
|
||||||
#include <QVector>
|
#include <QVector>
|
||||||
|
#include <QVersionNumber>
|
||||||
|
|
||||||
namespace ClangTools {
|
namespace ClangTools {
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
@@ -60,6 +61,8 @@ class ClazyStandaloneInfo
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ClazyStandaloneInfo(const QString &executablePath);
|
ClazyStandaloneInfo(const QString &executablePath);
|
||||||
|
|
||||||
|
QVersionNumber version;
|
||||||
QStringList defaultChecks;
|
QStringList defaultChecks;
|
||||||
ClazyChecks supportedChecks;
|
ClazyChecks supportedChecks;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -98,12 +98,5 @@ const char SYMBOLS_FIND_FILTER_DISPLAY_NAME[] = QT_TRANSLATE_NOOP("CppTools", "C
|
|||||||
constexpr const char CLANG_STATIC_ANALYZER_DOCUMENTATION_URL[]
|
constexpr const char CLANG_STATIC_ANALYZER_DOCUMENTATION_URL[]
|
||||||
= "https://clang-analyzer.llvm.org/available_checks.html";
|
= "https://clang-analyzer.llvm.org/available_checks.html";
|
||||||
|
|
||||||
// CLANG-UPGRADE-CHECK: Checks/update URLs.
|
|
||||||
//
|
|
||||||
// Once it gets dedicated documentation pages for released versions,
|
|
||||||
// use them instead of pointing to master, as checks might vanish.
|
|
||||||
constexpr const char CLAZY_DOCUMENTATION_URL_TEMPLATE[]
|
|
||||||
= "https://github.com/KDE/clazy/blob/master/docs/checks/README-%1.md";
|
|
||||||
|
|
||||||
} // namespace Constants
|
} // namespace Constants
|
||||||
} // namespace CppTools
|
} // namespace CppTools
|
||||||
|
|||||||
Reference in New Issue
Block a user