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 <rstambler@golang.org>
diff --git a/internal/lsp/general.go b/internal/lsp/general.go
index 0f8f663..f3f8608 100644
--- a/internal/lsp/general.go
+++ b/internal/lsp/general.go
@@ -29,9 +29,13 @@
}
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 9f20749..9777e7d 100644
--- a/internal/lsp/text_synchronization.go
+++ b/internal/lsp/text_synchronization.go
@@ -64,7 +64,7 @@
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