diff --git a/clang-tools-extra/clangd/Diagnostics.cpp b/clang-tools-extra/clangd/Diagnostics.cpp index e70d45769fe4..031192f763e6 100644 --- a/clang-tools-extra/clangd/Diagnostics.cpp +++ b/clang-tools-extra/clangd/Diagnostics.cpp @@ -918,9 +918,19 @@ llvm::Optional getDiagnosticDocURI(Diag::DiagSource Source, // information to be worth linking. // https://clang.llvm.org/docs/DiagnosticsReference.html break; - case Diag::ClangTidy: - return {("https://clang.llvm.org/extra/clang-tidy/checks/" + Name + ".html") - .str()}; + case Diag::ClangTidy: { + StringRef Module, Check; + // This won't correctly get the module for clang-analyzer checks, but as we + // don't link in the analyzer that shouldn't be an issue. + // This would also need updating if anyone decides to create a module with a + // '-' in the name. + std::tie(Module, Check) = Name.split('-'); + if (Module.empty() || Check.empty()) + return llvm::None; + return ("https://clang.llvm.org/extra/clang-tidy/checks/" + Module + "/" + + Check + ".html") + .str(); + } case Diag::Clangd: if (Name == "unused-includes") return {"https://clangd.llvm.org/guides/include-cleaner"}; diff --git a/clang-tools-extra/clangd/test/diagnostics-tidy.test b/clang-tools-extra/clangd/test/diagnostics-tidy.test index c7e79b0c6d5f..a100c9f4359d 100644 --- a/clang-tools-extra/clangd/test/diagnostics-tidy.test +++ b/clang-tools-extra/clangd/test/diagnostics-tidy.test @@ -9,7 +9,7 @@ # CHECK-NEXT: { # CHECK-NEXT: "code": "bugprone-sizeof-expression", # CHECK-NEXT: "codeDescription": { -# CHECK-NEXT: "href": "https://clang.llvm.org/extra/clang-tidy/checks/bugprone-sizeof-expression.html" +# CHECK-NEXT: "href": "https://clang.llvm.org/extra/clang-tidy/checks/bugprone/sizeof-expression.html" # CHECK-NEXT: }, # CHECK-NEXT: "message": "Suspicious usage of 'sizeof(K)'; did you mean 'K'?", # CHECK-NEXT: "range": {