mirror of
https://github.com/golang/go
synced 2024-11-18 20:44:45 -07:00
b29f5f60c3
Deep completions can take a long time (500ms+) if there are many large, deeply nested structs in scope. To make sure we return completion results in a timely manner we now notice if we have spent "too long" searching for deep completions and reduce the search scope. In particular, our overall completion budget is 100ms. This value is often cited as the longest latency that still feels instantaneous to most people. As we spend 25%, 50%, and 75% of our budget we limit our deep completion candidate search depth to 4, 3, and 2, respectively. If we hit 90% of our budget, we disable deep completions entirely. In my testing, limiting the search scope to 4 normally makes even enormous searches finish in a few milliseconds. Of course, you can have arbitrarily many objects in scope with arbitrarily many fields, so to cover our bases we continue to dial down the search depth as needed. I replaced the "enabled" field with a "maxDepth" field that disables deep search when set to 0. Change-Id: I9b5a07de70709895c065503ae6082d1ea615d1af Reviewed-on: https://go-review.googlesource.com/c/tools/+/190978 Run-TryBot: Rebecca Stambler <rstambler@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Ian Cottrell <iancottrell@google.com> |
||
---|---|---|
.. | ||
analysis.go | ||
completion_format.go | ||
completion_snippet.go | ||
completion.go | ||
deep_completion.go | ||
diagnostics_test.go | ||
diagnostics.go | ||
enums.go | ||
format.go | ||
highlight.go | ||
hover.go | ||
identifier.go | ||
imports_test.go | ||
imports.go | ||
references.go | ||
rename_check.go | ||
rename.go | ||
signature_help.go | ||
source_test.go | ||
suggested_fix.go | ||
symbols.go | ||
util.go | ||
view.go |