From 0bd90eac955692b4f2c53a1f35c5b236892fc00f Mon Sep 17 00:00:00 2001 From: Rebecca Stambler Date: Tue, 10 Dec 2019 12:45:31 -0500 Subject: [PATCH] internal/lsp: make Text in DidSave request a pointer Fixes golang/go#36063 Change-Id: I223ead138111239ae1894f5565414ac384c016e2 Reviewed-on: https://go-review.googlesource.com/c/tools/+/210780 Run-TryBot: Rebecca Stambler TryBot-Result: Gobot Gobot Reviewed-by: Peter Weinberger --- internal/lsp/cmd/capabilities_test.go | 13 +++++++++++++ internal/lsp/protocol/tsprotocol.go | 2 +- internal/lsp/text_synchronization.go | 9 ++++++--- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/internal/lsp/cmd/capabilities_test.go b/internal/lsp/cmd/capabilities_test.go index 9985637723..33ab47a93b 100644 --- a/internal/lsp/cmd/capabilities_test.go +++ b/internal/lsp/cmd/capabilities_test.go @@ -101,6 +101,19 @@ func TestCapabilities(t *testing.T) { t.Errorf("unexpected command for import organization") } } + + if err := c.Server.DidSave(ctx, &protocol.DidSaveTextDocumentParams{ + TextDocument: protocol.VersionedTextDocumentIdentifier{ + Version: 2, + TextDocumentIdentifier: protocol.TextDocumentIdentifier{ + URI: uri, + }, + }, + // LSP specifies that a file can be saved with optional text, so this field must be nil. + Text: nil, + }); err != nil { + t.Fatal(err) + } } func validateCapabilities(result *protocol.InitializeResult) error { diff --git a/internal/lsp/protocol/tsprotocol.go b/internal/lsp/protocol/tsprotocol.go index 8f06d02e99..1e1a306573 100644 --- a/internal/lsp/protocol/tsprotocol.go +++ b/internal/lsp/protocol/tsprotocol.go @@ -1027,7 +1027,7 @@ type DidSaveTextDocumentParams struct { * Optional the content when saved. Depends on the includeText value * when the save notification was requested. */ - Text string `json:"text,omitempty"` + Text *string `json:"text,omitempty"` } type DocumentColorClientCapabilities struct { diff --git a/internal/lsp/text_synchronization.go b/internal/lsp/text_synchronization.go index 3f96e20c02..75e2820438 100644 --- a/internal/lsp/text_synchronization.go +++ b/internal/lsp/text_synchronization.go @@ -30,12 +30,15 @@ func (s *Server) didOpen(ctx context.Context, params *protocol.DidOpenTextDocume } func (s *Server) didSave(ctx context.Context, params *protocol.DidSaveTextDocumentParams) error { - return s.didModifyFile(ctx, source.FileModification{ + c := source.FileModification{ URI: span.NewURI(params.TextDocument.URI), Action: source.Save, Version: params.TextDocument.Version, - Text: []byte(params.Text), - }) + } + if params.Text != nil { + c.Text = []byte(*params.Text) + } + return s.didModifyFile(ctx, c) } func (s *Server) didClose(ctx context.Context, params *protocol.DidCloseTextDocumentParams) error {