mirror of
https://github.com/golang/go
synced 2024-11-18 19:54:44 -07:00
1837592efa
Completion could be slow due to calls to astutil.PathEnclosingInterval for every candidate during formatting. There were two reasons we called PEI: 1. To properly render type alias names, we must refer to the AST because the alias name is not available in the typed world. Previously we would call PEI to find the *type.Var's corresponding *ast.Field, but now we have a PosToField cache that lets us jump straight from the types.Object's token.Pos to the corresponding *ast.Field. 2. To display an object's documentation we must refer to the AST. We need the object's declaring node and any containing ast.Decl. We now maintain a special PosToDecl cache so we can avoid the PEI call in this case as well. We can't use a single cache for both because the *ast.Field's position is present in both caches (but points to different nodes). The caches are memoized to defer generation until they are needed and to save work creating them if the *ast.Files haven't changed. These changes speed up completing the fields of github.com/aws/aws-sdk-go/service/ec2 from 18.5s to 45ms on my laptop. Fixes golang/go#37450. Change-Id: I25cc5ea39551db728a2348f346342ebebeddd049 Reviewed-on: https://go-review.googlesource.com/c/tools/+/221021 Run-TryBot: Muir Manders <muir@mnd.rs> Reviewed-by: Rebecca Stambler <rstambler@golang.org> |
||
---|---|---|
.. | ||
analysis | ||
browser | ||
cache | ||
cmd | ||
debug | ||
diff | ||
fake | ||
fuzzy | ||
helper | ||
lsprpc | ||
mod | ||
protocol | ||
regtest | ||
snippet | ||
source | ||
testdata | ||
tests | ||
code_action.go | ||
command.go | ||
completion_test.go | ||
completion.go | ||
definition.go | ||
diagnostics.go | ||
folding_range.go | ||
format.go | ||
general.go | ||
generate.go | ||
highlight.go | ||
hover.go | ||
implementation.go | ||
link.go | ||
lsp_test.go | ||
progress.go | ||
references.go | ||
rename.go | ||
reset_golden.sh | ||
server_gen.go | ||
server.go | ||
signature_help.go | ||
symbols.go | ||
text_synchronization.go | ||
workspace_symbol.go | ||
workspace.go |