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