1
0
mirror of https://github.com/golang/go synced 2024-10-01 04:18:33 -06:00
go/internal/lsp/source
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
..
analysis.go go/analysis: handle common nil pointers 2019-08-24 21:01:00 +00:00
completion_format.go internal/lsp: switch to using protocol positions for document symbols 2019-09-06 18:11:17 +00:00
completion_snippet.go internal/lsp: improve completions in go and defer statements 2019-09-09 19:09:43 +00:00
completion.go internal/lsp: don't lower score of builtin completions 2019-09-06 20:37:48 +00:00
deep_completion.go internal/lsp: limit deep completion search scope 2019-08-27 20:50:25 +00:00
diagnostics_test.go internal/span: change URI.Filename so it just returns the filename 2019-06-10 21:39:43 +00:00
diagnostics.go internal/lsp: use protocol.TextEdits in suggested fixes 2019-09-07 02:01:28 +00:00
enums.go internal/lsp: switch to using protocol positions for document symbols 2019-09-06 18:11:17 +00:00
folding_range.go internal/lsp: remove the GetToken and GetAST functions 2019-09-09 18:10:35 +00:00
format.go internal/lsp: remove the GetToken and GetAST functions 2019-09-09 18:10:35 +00:00
highlight.go internal/lsp: switch to using protocol positions for document symbols 2019-09-06 18:11:17 +00:00
hover.go internal/lsp: remove the GetToken and GetAST functions 2019-09-09 18:10:35 +00:00
identifier.go internal/lsp: remove the GetToken and GetAST functions 2019-09-09 18:10:35 +00:00
imports_test.go internal/lsp: abstract the diff library so it can be substituted 2019-08-20 03:37:07 +00:00
imports.go internal/lsp: abstract the diff library so it can be substituted 2019-08-20 03:37:07 +00:00
options.go internal/lsp: move configuration options to structs 2019-09-06 17:30:54 +00:00
references.go internal/lsp: remove the GetToken and GetAST functions 2019-09-09 18:10:35 +00:00
rename_check.go internal/lsp: use memoize package to cache source.Packages 2019-08-13 21:41:43 +00:00
rename.go internal/lsp: remove the GetToken and GetAST functions 2019-09-09 18:10:35 +00:00
signature_help.go internal/lsp: switch to using protocol positions for document symbols 2019-09-06 18:11:17 +00:00
source_test.go internal/lsp: remove the GetToken and GetAST functions 2019-09-09 18:10:35 +00:00
suggested_fix.go internal/lsp: use protocol.TextEdits in suggested fixes 2019-09-07 02:01:28 +00:00
symbols.go internal/lsp: remove the GetToken and GetAST functions 2019-09-09 18:10:35 +00:00
util.go internal/lsp: switch to using protocol positions for document symbols 2019-09-06 18:11:17 +00:00
view.go internal/lsp: remove the GetToken and GetAST functions 2019-09-09 18:10:35 +00:00