1
0
mirror of https://github.com/golang/go synced 2024-11-18 20:54:40 -07:00
go/internal/lsp
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
..
browser internal/lsp: add version and bug commands 2019-05-11 04:16:02 +00:00
cache internal/lsp: improve completion after accidental keywords 2019-12-03 04:30:02 +00:00
cmd internal/lsp: add control flow highlighting for functions 2019-12-02 19:01:20 +00:00
debug internal/lsp: fix the debug info pages 2019-11-04 23:16:26 +00:00
diff internal/lsp: fix unified diffs of edits at the end of a file 2019-10-11 16:38:14 +00:00
fuzzy internal/lsp: fix fuzzy matcher inconsistency 2019-10-22 21:05:28 +00:00
protocol internal/lsp/protocol: replace code for generating LSP types and stubs 2019-12-02 18:46:12 +00:00
snippet all: fix broken links to LSP specification 2019-10-02 18:32:53 +00:00
source internal/lsp: improve completion after accidental keywords 2019-12-03 04:30:02 +00:00
telemetry internal/lsp: call load in (*session).NewView 2019-11-07 23:34:59 +00:00
testdata internal/lsp: improve completion after accidental keywords 2019-12-03 04:30:02 +00:00
tests internal/lsp/tests: skip cgo tests when not supported 2019-11-25 21:54:41 +00:00
code_action.go internal/lsp: rename CheckPackageHandle to PackageHandle 2019-12-02 18:29:46 +00:00
command.go internal/lsp: fix panic in bestView 2019-11-16 21:44:31 +00:00
completion_test.go internal/lsp: fix variadic interface completion ranking 2019-11-18 05:14:29 +00:00
completion.go internal/lsp: improve completion ordering workaround 2019-11-22 18:27:03 +00:00
definition.go internal/lsp: reorganize and refactor code 2019-11-21 02:33:28 +00:00
diagnostics.go internal/lsp: rename CheckPackageHandle to PackageHandle 2019-12-02 18:29:46 +00:00
folding_range.go internal/lsp: reorganize and refactor code 2019-11-21 02:33:28 +00:00
format.go internal/lsp: reorganize and refactor code 2019-11-21 02:33:28 +00:00
general.go internal/lsp: add some minimal validation for client capabilities 2019-11-26 21:34:59 +00:00
highlight.go internal/lsp: reorganize and refactor code 2019-11-21 02:33:28 +00:00
hover.go internal/lsp: reorganize and refactor code 2019-11-21 02:33:28 +00:00
implementation.go internal/lsp: reorganize and refactor code 2019-11-21 02:33:28 +00:00
link.go internal/lsp: link to the new pkg.go.dev instead of godoc.org 2019-11-30 07:06:09 +00:00
lsp_test.go internal/lsp: add control flow highlighting for functions 2019-12-02 19:01:20 +00:00
references.go internal/lsp: reorganize and refactor code 2019-11-21 02:33:28 +00:00
rename.go internal/lsp: reorganize and refactor code 2019-11-21 02:33:28 +00:00
reset_golden.sh internal/lsp: fix regeneration of golden files 2019-09-25 13:16:59 +00:00
server.go internal/lsp: don't run analyses on the entire view 2019-11-25 22:48:44 +00:00
signature_help.go internal/lsp: reorganize and refactor code 2019-11-21 02:33:28 +00:00
symbols.go internal/lsp: reorganize and refactor code 2019-11-21 02:33:28 +00:00
text_synchronization.go internal/lsp: don't run analyses on the entire view 2019-11-25 22:48:44 +00:00
watched_files.go internal/lsp: rename CheckPackageHandle to PackageHandle 2019-12-02 18:29:46 +00:00
workspace.go internal/lsp: rename CheckPackageHandle to PackageHandle 2019-12-02 18:29:46 +00:00