mirror of
https://github.com/golang/go
synced 2024-11-18 16:14:46 -07:00
dc339cc7c5
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> |
||
---|---|---|
.. | ||
analyzer | ||
anon | ||
bad | ||
badstmt | ||
bar | ||
basiclit | ||
baz | ||
builtins | ||
cast | ||
channel | ||
comments | ||
complit | ||
constant | ||
deepcomplete | ||
errors | ||
folding | ||
foo | ||
format | ||
func_rank | ||
funcvalue | ||
generated | ||
godef | ||
good | ||
highlights | ||
importedcomplit | ||
imports | ||
index | ||
interfacerank | ||
links | ||
nested_complit | ||
nodisk | ||
noparse | ||
noparse_format | ||
rank | ||
references | ||
rename | ||
selector | ||
signature | ||
snippets | ||
symbols | ||
testy | ||
typeassert | ||
types | ||
unimported | ||
unresolved | ||
unsafe |