From f0a709d59f0fd2d705cf7767149e23a7a99f585b Mon Sep 17 00:00:00 2001 From: Rebecca Stambler Date: Wed, 27 Feb 2019 18:08:04 -0500 Subject: [PATCH] internal/lsp: set severity levels for compiler errors and vet checks This change adds severity levels to source.Diagnostics, allowing us to pass this information along to the LSP. This allows compiler errors to show up in red, while vet results show up in green. Change-Id: I2bc0b27ed6629f987c05affe00fdbe4b9bfb3b3e Reviewed-on: https://go-review.googlesource.com/c/164299 Run-TryBot: Rebecca Stambler Reviewed-by: Michael Matloob --- internal/lsp/diagnostics.go | 17 ++++++++++++----- internal/lsp/lsp_test.go | 6 +++++- internal/lsp/source/diagnostics.go | 22 ++++++++++++++++------ 3 files changed, 33 insertions(+), 12 deletions(-) diff --git a/internal/lsp/diagnostics.go b/internal/lsp/diagnostics.go index e9286134..85205895 100644 --- a/internal/lsp/diagnostics.go +++ b/internal/lsp/diagnostics.go @@ -51,15 +51,22 @@ func toProtocolDiagnostics(ctx context.Context, v source.View, diagnostics []sou reports := []protocol.Diagnostic{} for _, diag := range diagnostics { tok := v.FileSet().File(diag.Start) - source := diag.Source - if source == "" { - source = "LSP" + src := diag.Source + if src == "" { + src = "LSP" + } + var severity protocol.DiagnosticSeverity + switch diag.Severity { + case source.SeverityError: + severity = protocol.SeverityError + case source.SeverityWarning: + severity = protocol.SeverityWarning } reports = append(reports, protocol.Diagnostic{ Message: diag.Message, Range: toProtocolRange(tok, diag.Range), - Severity: protocol.SeverityError, // all diagnostics have error severity for now - Source: source, + Severity: severity, + Source: src, }) } return reports diff --git a/internal/lsp/lsp_test.go b/internal/lsp/lsp_test.go index eea102f6..d0fa18b8 100644 --- a/internal/lsp/lsp_test.go +++ b/internal/lsp/lsp_test.go @@ -182,9 +182,13 @@ func (d diagnostics) collect(fset *token.FileSet, rng packagestest.Range, msgSou if msg == "" { return } + severity := protocol.SeverityError + if strings.Contains(f.Name(), "analyzer") { + severity = protocol.SeverityWarning + } want := protocol.Diagnostic{ Range: toProtocolRange(f, source.Range(rng)), - Severity: protocol.SeverityError, + Severity: severity, Source: msgSource, Message: msg, } diff --git a/internal/lsp/source/diagnostics.go b/internal/lsp/source/diagnostics.go index 99a8fd9f..395a248f 100644 --- a/internal/lsp/source/diagnostics.go +++ b/internal/lsp/source/diagnostics.go @@ -41,10 +41,18 @@ import ( type Diagnostic struct { Range - Message string - Source string + Message string + Source string + Severity DiagnosticSeverity } +type DiagnosticSeverity int + +const ( + SeverityWarning DiagnosticSeverity = iota + SeverityError +) + func Diagnostics(ctx context.Context, v View, uri URI) (map[string][]Diagnostic, error) { f, err := v.GetFile(ctx, uri) if err != nil { @@ -98,7 +106,8 @@ func Diagnostics(ctx context.Context, v View, uri URI) (map[string][]Diagnostic, Start: startPos, End: endPos, }, - Message: diag.Msg, + Message: diag.Msg, + Severity: SeverityError, } if _, ok := reports[pos.Filename]; ok { reports[pos.Filename] = append(reports[pos.Filename], diagnostic) @@ -116,9 +125,10 @@ func Diagnostics(ctx context.Context, v View, uri URI) (map[string][]Diagnostic, } reports[pos.Filename] = append(reports[pos.Filename], Diagnostic{ - Source: category, - Range: Range{Start: diag.Pos, End: diag.Pos}, - Message: fmt.Sprintf(diag.Message), + Source: category, + Range: Range{Start: diag.Pos, End: diag.Pos}, + Message: fmt.Sprintf(diag.Message), + Severity: SeverityWarning, }) })