1
0
mirror of https://github.com/golang/go synced 2024-11-18 16:14:46 -07:00
go/internal/lsp/cache
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.go internal/memoize: add an error return to (*handle).Get 2020-06-24 16:33:19 +00:00
cache.go internal/lsp/cache: handle a few possible panics in PackageStats 2020-06-30 15:45:28 +00:00
check.go internal/lsp/source: speed up completion candidate formatting 2020-07-01 04:11:22 +00:00
error_test.go
errors.go internal/lsp: read files eagerly 2020-06-11 22:11:59 +00:00
keys.go internal/lsp: decouple client and server debug 2020-06-11 13:49:48 +00:00
load.go internal/lsp/source: add a new symbolStyle configuration option 2020-06-26 17:13:37 +00:00
mod_tidy.go internal/memoize: add an error return to (*handle).Get 2020-06-24 16:33:19 +00:00
mod.go internal/memoize: add an error return to (*handle).Get 2020-06-24 16:33:19 +00:00
os_darwin.go internal/lsp: add a mutex around the view's options 2020-04-02 16:41:49 +00:00
os_windows.go internal/lsp/cache: validate workspace path case 2020-03-27 19:55:53 +00:00
parse.go internal/lsp/source: speed up completion candidate formatting 2020-07-01 04:11:22 +00:00
pkg.go internal/lsp/source: add a new symbolStyle configuration option 2020-06-26 17:13:37 +00:00
session.go internal/lsp: refactor various module-specific handles in cache 2020-06-23 18:31:46 +00:00
snapshot.go internal/lsp: refactor various module-specific handles in cache 2020-06-23 18:31:46 +00:00
view_test.go internal/lsp/cache: validate workspace path case 2020-03-27 19:55:53 +00:00
view.go internal/lsp: watch all files in the module and replace target 2020-06-25 21:08:52 +00:00