diff --git a/crates/ty_server/src/server/api/requests/diagnostic.rs b/crates/ty_server/src/server/api/requests/diagnostic.rs index bf19181e7c..c52bca1a38 100644 --- a/crates/ty_server/src/server/api/requests/diagnostic.rs +++ b/crates/ty_server/src/server/api/requests/diagnostic.rs @@ -4,7 +4,7 @@ use lsp_types::request::DocumentDiagnosticRequest; use lsp_types::{ Diagnostic, DiagnosticSeverity, DiagnosticTag, DocumentDiagnosticParams, DocumentDiagnosticReport, DocumentDiagnosticReportResult, FullDocumentDiagnosticReport, - NumberOrString, Range, RelatedFullDocumentDiagnosticReport, Url, + NumberOrString, Range, RelatedFullDocumentDiagnosticReport, }; use crate::document::ToRangeExt; @@ -22,7 +22,7 @@ impl RequestHandler for DocumentDiagnosticRequestHandler { } impl BackgroundDocumentRequestHandler for DocumentDiagnosticRequestHandler { - fn document_url(params: &DocumentDiagnosticParams) -> Cow { + fn document_url(params: &DocumentDiagnosticParams) -> Cow { Cow::Borrowed(¶ms.text_document.uri) } @@ -105,12 +105,23 @@ fn to_lsp_diagnostic( }) .filter(|mapped_tags| !mapped_tags.is_empty()); + let code_description = diagnostic + .id() + .is_lint() + .then(|| { + Some(lsp_types::CodeDescription { + href: lsp_types::Url::parse(&format!("https://ty.dev/rules#{}", diagnostic.id())) + .ok()?, + }) + }) + .flatten(); + Diagnostic { range, severity: Some(severity), tags, code: Some(NumberOrString::String(diagnostic.id().to_string())), - code_description: None, + code_description, source: Some("ty".into()), message: diagnostic.concise_message().to_string(), related_information: None,