This repository was archived by the owner on Sep 26, 2023. It is now read-only.
Single-pass hover text extraction #66
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The current implementation of lsif-go contains a super-quadratic way of determining comments based on token positions. For each definition, we trace the AST from the root of the containing file through nodes that intersect the target position (via
astutil.PathEnclosingInterval) then extract the comments by tracing the constructed ancestor path backwards.This requires us to scan the same file from the root for every definition that exists in that file. Much of this work will be repeated and we'll end up tracing the same path multiple times to get to definitions with slightly different paths. Tell me that's not a bad idea in a world containing files of this size.
This change introduces a pre-warmed cache of hover text that is extracted by traversing the AST of each file once. We further speed up this process by walking GOMAXPROC files in parallel.