go/gopls/internal/regtest/completion
Muir Manders b30482dd32 internal/lsp/cache: allow fixing multiple syntax errors
Allow fixSrc to run multiple times on a file. For example:

    func main() {
    	var s S
    	if s.<>
    }

    type S struct {
    	i int
    }

To properly complete at <>, we need to perform two fixes. We must
insert a phantom underscore after "s." to deal with the dangling
selector, and then we must insert phantom "{}" for the "if" statement
to deal with the incomplete "if" block. Previously we stopped at one
fix, but now we allow for up to 10. I added a limit because I am
afraid there are cases where we could get stuck trying to apply the
same fix again and again.

Also, drive-by set isIncomplete=true when we return early in
lsp/completion.go. I have found my editor incorrectly caches this zero
result in certain cases because it thinks results are "complete".

Fixes golang/go#43471.

Change-Id: Idd34cc164d579fa12a27920dc3afb372799abf26
Reviewed-on: https://go-review.googlesource.com/c/tools/+/289271
Run-TryBot: Muir Manders <muir@mnd.rs>
gopls-CI: kokoro <noreply+kokoro@google.com>
TryBot-Result: Go Bot <gobot@golang.org>
Trust: Hyang-Ah Hana Kim <hyangah@gmail.com>
Trust: Rebecca Stambler <rstambler@golang.org>
Reviewed-by: Rebecca Stambler <rstambler@golang.org>
2021-02-05 19:47:01 +00:00
..
completion_test.go internal/lsp/cache: allow fixing multiple syntax errors 2021-02-05 19:47:01 +00:00