1
0
mirror of https://github.com/golang/go synced 2024-11-18 23:05:06 -07:00
go/internal/lsp/cache
Muir Manders dc339cc7c5 internal/lsp: improve completions in go and defer statements
Improve the existing fix-the-AST code to better identify the
expression following the "go" or "defer" keywords:

- Don't slurp the expression start outside the loop since the
  expression might only have a single token.
- Set expression end to the position after the final token, not the
  position of the final token.
- Track curly brace nesting to properly capture an entire "func() {}"
  expression.
- Fix parent node detection to work when BadStmt isn't first statement
  of block.
- Add special case to detect dangling period, e.g. "defer fmt.". We
  insert phantom "_" selectors like go/parser does to prevent the
  dangling "." from messing up the AST.
- Use reflect in offsetPositions so it updates positions in all node
  types. This code shouldn't be called often, so I don't think
  performance is a concern.

I also tweaked the function snippet code so it properly expands
"defer" and "go" expressions to function calls. It thought it didn't
have to expand since there was already a *ast.CallExpr, but the
CallExpr was faked by us and the source doesn't actually contain the
"()" calling parens.

Note that this does not work for nested go/defer statements. For
example, completions won't work properly in cases like this:

go func() {
  defer fmt.<>
}

I think we can fix this as well with some more work.

Change-Id: I8f9753fda76909b0e3a83489cdea69ad04ee237a
Reviewed-on: https://go-review.googlesource.com/c/tools/+/193997
Reviewed-by: Rebecca Stambler <rstambler@golang.org>
Run-TryBot: Rebecca Stambler <rstambler@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
2019-09-09 19:09:43 +00:00
..
cache.go internal/lsp: move configuration options to structs 2019-09-06 17:30:54 +00:00
check.go internal/lsp/cache: detail why the err is ignored 2019-09-06 20:38:14 +00:00
external.go internal/lsp: split the telemetry library out 2019-08-15 21:28:02 +00:00
file.go internal/lsp: fix deadlock in type-checking 2019-09-05 03:50:54 +00:00
gofile.go internal/lsp: remove the GetToken and GetAST functions 2019-09-09 18:10:35 +00:00
load.go internal/lsp: avoid invalid state due to context cancelation 2019-09-05 23:06:12 +00:00
modfile.go internal/lsp: use x/xerrors to create new errors 2019-08-06 19:46:56 +00:00
parse.go internal/lsp: improve completions in go and defer statements 2019-09-09 19:09:43 +00:00
pkg.go go/analysis: handle common nil pointers 2019-08-24 21:01:00 +00:00
session.go internal/lsp: move configuration options to structs 2019-09-06 17:30:54 +00:00
sumfile.go internal/lsp: use x/xerrors to create new errors 2019-08-06 19:46:56 +00:00
token.go internal/lsp: unlabel context, log errors when canceled 2019-08-20 20:39:21 +00:00
view.go internal/lsp: fixed a bug where GOPROXY was set to GOROOT 2019-09-09 18:04:07 +00:00
watcher.go