1
0
mirror of https://github.com/golang/go synced 2024-11-18 19:54:44 -07:00
go/internal/lsp
Muir Manders 1837592efa internal/lsp/source: speed up completion candidate formatting
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>
2020-07-01 04:11:22 +00:00
..
analysis internal/lsp/analysis/fillstruct: correct pointer to builtin values 2020-06-25 16:34:51 +00:00
browser
cache internal/lsp/source: speed up completion candidate formatting 2020-07-01 04:11:22 +00:00
cmd internal/lsp/cmd: change pre-filled issue header for gopls bug 2020-07-01 03:39:15 +00:00
debug internal/lsp/debug: save per-package stats in memory debug files 2020-06-19 18:00:37 +00:00
diff internal/testenv: check that external 'diff' tool is the GNU version 2020-05-08 20:46:49 +00:00
fake internal/lsp: add a new regtest to reproduce golang/go#39646 2020-06-26 03:28:29 +00:00
fuzzy internal/lsp: fix errors found by staticcheck 2020-03-19 19:20:54 +00:00
helper internal/lsp: change to helper.go to output a formatted file 2020-01-31 20:35:38 +00:00
lsprpc internal/lsp/lsprpc: forward the go environment in initialize requests 2020-06-16 15:43:56 +00:00
mod internal/lsp: refactor various module-specific handles in cache 2020-06-23 18:31:46 +00:00
protocol internal/lsp: bring lsp protocol stubs up to date 2020-06-11 18:15:06 +00:00
regtest internal/lsp/source: add a new symbolStyle configuration option 2020-06-26 17:13:37 +00:00
snippet all: fix broken links to LSP specification 2019-10-02 18:32:53 +00:00
source internal/lsp/source: speed up completion candidate formatting 2020-07-01 04:11:22 +00:00
testdata internal/lsp/source: speed up completion candidate formatting 2020-07-01 04:11:22 +00:00
tests internal/lsp: plumb fillstruct through analysis 2020-06-15 21:22:08 +00:00
code_action.go internal/lsp: plumb fillstruct through analysis 2020-06-15 21:22:08 +00:00
command.go internal/lsp: don't use -modfile for go mod commands 2020-06-22 20:30:43 +00:00
completion_test.go internal/lsp/source: offer smart "append()" completions 2020-05-20 22:05:37 +00:00
completion.go internal/lsp: remove VS Code-specific completion hack 2020-06-30 15:48:51 +00:00
definition.go internal/lsp: read files eagerly 2020-06-11 22:11:59 +00:00
diagnostics.go internal/lsp: don't use -modfile for go mod commands 2020-06-22 20:30:43 +00:00
folding_range.go internal/lsp: read files eagerly 2020-06-11 22:11:59 +00:00
format.go internal/lsp: read files eagerly 2020-06-11 22:11:59 +00:00
general.go internal/lsp: decorate error message from workspace/configuration 2020-07-01 00:03:37 +00:00
generate.go internal/lsp: un-export (*snapshot).Config to limit it to cache 2020-06-15 22:28:25 +00:00
highlight.go internal/lsp: read files eagerly 2020-06-11 22:11:59 +00:00
hover.go internal/lsp: read files eagerly 2020-06-11 22:11:59 +00:00
implementation.go internal/lsp: read files eagerly 2020-06-11 22:11:59 +00:00
link.go internal/lsp: refactor various module-specific handles in cache 2020-06-23 18:31:46 +00:00
lsp_test.go internal/lsp: use a new temporary go.mod for every go list call 2020-06-18 02:37:23 +00:00
progress.go internal/lsp: factor out progress reporting to a new WorkDone handle 2020-04-28 20:46:18 +00:00
references.go internal/lsp: read files eagerly 2020-06-11 22:11:59 +00:00
rename.go internal/lsp: read files eagerly 2020-06-11 22:11:59 +00:00
reset_golden.sh internal/lsp: fix regeneration of golden files 2019-09-25 13:16:59 +00:00
server_gen.go x/tools/gopls: add support for $/progress functionality 2020-03-16 21:25:24 +00:00
server.go internal/lsp: read files eagerly 2020-06-11 22:11:59 +00:00
signature_help.go internal/lsp: read files eagerly 2020-06-11 22:11:59 +00:00
symbols.go internal/lsp: read files eagerly 2020-06-11 22:11:59 +00:00
text_synchronization.go internal/lsp: use a new temporary go.mod for every go list call 2020-06-18 02:37:23 +00:00
workspace_symbol.go internal/lsp/source: add a new symbolStyle configuration option 2020-06-26 17:13:37 +00:00
workspace.go internal/lsp: generate boilerplate stubs for type Server 2020-01-24 14:41:51 +00:00