From cf84161cff3fdeddfd5ab5e686c1e2c17cb5db04 Mon Sep 17 00:00:00 2001 From: Ian Cottrell Date: Thu, 2 May 2019 22:35:49 -0400 Subject: [PATCH] internal/lsp: fix incremental updates and turn them on Updates that only add text have a start and end that are the same, we were erroring on those and failing to apply the changes. Fixes golang/go#31800 Change-Id: Ia31b90f108742e5532d2da35137c347c26090a6a Reviewed-on: https://go-review.googlesource.com/c/tools/+/174949 Reviewed-by: Rebecca Stambler --- internal/lsp/general.go | 8 ++++++-- internal/lsp/text_synchronization.go | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/internal/lsp/general.go b/internal/lsp/general.go index 0f8f663ef5..f3f860897b 100644 --- a/internal/lsp/general.go +++ b/internal/lsp/general.go @@ -29,9 +29,13 @@ func (s *Server) initialize(ctx context.Context, params *protocol.InitializePara } s.isInitialized = true // mark server as initialized now - // TODO(rstambler): Change this default to protocol.Incremental (or add a - // flag). Disabled for now to simplify debugging. + // TODO(iancottrell): Change this default to protocol.Incremental and remove the option s.textDocumentSyncKind = protocol.Full + if opts, ok := params.InitializationOptions.(map[string]interface{}); ok { + if opt, ok := opts["incrementalSync"].(bool); ok && opt { + s.textDocumentSyncKind = protocol.Incremental + } + } s.setClientCapabilities(params.Capabilities) diff --git a/internal/lsp/text_synchronization.go b/internal/lsp/text_synchronization.go index 9f2074979e..9777e7dde0 100644 --- a/internal/lsp/text_synchronization.go +++ b/internal/lsp/text_synchronization.go @@ -64,7 +64,7 @@ func (s *Server) applyChanges(ctx context.Context, params *protocol.DidChangeTex return "", jsonrpc2.NewErrorf(jsonrpc2.CodeInternalError, "invalid range for content change") } start, end := spn.Start().Offset(), spn.End().Offset() - if end <= start { + if end < start { return "", jsonrpc2.NewErrorf(jsonrpc2.CodeInternalError, "invalid range for content change") } var buf bytes.Buffer