go/internal/lsp/cache
Muir Manders 5ae4576c3a internal/lsp: improve completion after accidental keywords
Sometimes the prefix of the thing you want to complete is a keyword.
For example:

variance := 123
fmt.Println(var<>)

In this case the parser produces an *ast.BadExpr which breaks
completion. We now repair this BadExpr by replacing it with
an *ast.Ident named "var".

We also repair empty decls using a similar approach. This fixes cases
like:

var typeName string
type<> // want to complete to "typeName"

We also fix accidental keywords in selectors, such as:

foo.var<>

The parser produces a phantom "_" in place of the keyword, so we swap
it back for an *ast.Ident named "var".

In general, though, accidental keywords wreak havoc on the AST so we
can only do so much. There are still many cases where a keyword prefix
breaks completion. Perhaps in the future the parser can be
cursor/in-progress-edit aware and turn accidental keywords into
identifiers.

Fixes golang/go#34332.

PS I tweaked nodeContains() to include n.End() to fix a test failure
against tip related to a change to go/parser. When a syntax error is
present, an *ast.BlockStmt's End() is now set to the block's final
statement's End() (earlier than what it used to be). In order for the
cursor pos to test "inside" the block in this case I had to relax the
End() comparison.

Change-Id: Ib45952cf086cc974f1578298df3dd12829344faa
Reviewed-on: https://go-review.googlesource.com/c/tools/+/209438
Run-TryBot: Muir Manders <muir@mnd.rs>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Rebecca Stambler <rstambler@golang.org>
2019-12-03 04:30:02 +00:00
..
analysis.go internal/lsp: rename CheckPackageHandle to PackageHandle 2019-12-02 18:29:46 +00:00
builtin.go internal/lsp: rename Files to CompiledGoFiles 2019-11-20 22:19:51 +00:00
cache.go internal/lsp: use options hooks to install diff driver 2019-10-11 16:38:31 +00:00
check.go internal/lsp: suppress all errors when a view is loaded and checked 2019-12-02 18:41:08 +00:00
error_test.go internal/lsp: refactor error handling code in type-checking 2019-10-21 18:57:46 +00:00
errors.go internal/lsp: use version numbers in diagnostic messages 2019-11-21 20:01:42 +00:00
external.go internal/lsp: use versioned URIs in rename and code actions 2019-11-13 05:52:40 +00:00
file.go internal/lsp: modify approach to watching changed files 2019-10-22 21:33:45 +00:00
load.go internal/lsp: suppress all errors when a view is loaded and checked 2019-12-02 18:41:08 +00:00
parse.go internal/lsp: improve completion after accidental keywords 2019-12-03 04:30:02 +00:00
pkg.go internal/lsp: set version correctly after textDocument/didOpen 2019-11-25 19:35:51 +00:00
session.go internal/lsp: suppress all errors when a view is loaded and checked 2019-12-02 18:41:08 +00:00
snapshot.go internal/lsp: rename CheckPackageHandle to PackageHandle 2019-12-02 18:29:46 +00:00
view.go internal/lsp: track and parse non-compiled go files 2019-11-25 19:20:50 +00:00
watcher.go internal/lsp/cache: add finer-grained control of file changes 2019-11-14 16:11:15 +00:00