From 188c70fa2bc77b6a4df8f33015533bf6545a96b0 Mon Sep 17 00:00:00 2001 From: Henrik Hautakoski Date: Sun, 3 May 2026 10:05:53 +0200 Subject: [PATCH] document_diagnostic.go: add publish diagnostics notification types and tests --- document_diagnostic.go | 21 ++++++++++++++++++++- document_diagnostic_test.go | 23 +++++++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/document_diagnostic.go b/document_diagnostic.go index 5f3a1f7..cecd39f 100644 --- a/document_diagnostic.go +++ b/document_diagnostic.go @@ -6,7 +6,8 @@ import ( ) const ( - MethodTextDocumentDiagnostic = "textDocument/diagnostic" + MethodTextDocumentDiagnostic = "textDocument/diagnostic" + MethodTextDocumentPublishDiagnostics = "textDocument/publishDiagnostics" ) // DocumentDiagnosticParams - Parameters of the document diagnostic request. @@ -29,6 +30,24 @@ type DocumentDiagnosticParams struct { PreviousResultID string `json:"previousResultId,omitempty"` } +// PublishDiagnosticsParams - The parameters of a publish diagnostics notification. +// +// @since 3.0.0 +// +// See https://microsoft.github.io/language-server-protocol/specifications/lsp/3.17/specification/#publishDiagnosticsParams +type PublishDiagnosticsParams struct { + // The URI for which diagnostic information is reported. + URI DocumentURI `json:"uri"` + + // Optional the version number of the document the diagnostics are published for. + // + // @since 3.15.0 + Version int `json:"version,omitempty"` + + // An array of diagnostic information items. + Diagnostics []Diagnostic `json:"diagnostics"` +} + // DocumentDiagnosticReport is either a full or an unchanged diagnostic report. // // @since 3.17.0 diff --git a/document_diagnostic_test.go b/document_diagnostic_test.go index e6fb2b5..1e2c140 100644 --- a/document_diagnostic_test.go +++ b/document_diagnostic_test.go @@ -24,3 +24,26 @@ func Test_DocumentDiagnostic_StructsUnmarshalValidJSON(t *testing.T) { t.Fatalf("unexpected DocumentDiagnosticReport: %+v", report) } } + +func Test_PublishDiagnosticsParams_UnmarshalValidJSON(t *testing.T) { + var params protocol.PublishDiagnosticsParams + if err := json.Unmarshal([]byte(`{ + "uri":"file:///tmp/main.go", + "version":2, + "diagnostics":[{"range":{"start":{"line":1,"character":1},"end":{"line":1,"character":3}},"message":"example diagnostic"}] + }`), ¶ms); err != nil { + t.Fatalf("unmarshal PublishDiagnosticsParams failed: %v", err) + } + + if params.URI != "file:///tmp/main.go" { + t.Fatalf("unexpected URI: %q", params.URI) + } + + if params.Version != 2 { + t.Fatalf("unexpected Version: %d", params.Version) + } + + if len(params.Diagnostics) != 1 || params.Diagnostics[0].Message != "example diagnostic" { + t.Fatalf("unexpected Diagnostics: %+v", params.Diagnostics) + } +}