fix: dedupe completion items so types/keywords don't appear twice - #26
Merged
Conversation
Closes #25. The completion handler builds its result list from two sources: an AST-driven block that picks categories based on the node under the cursor, and a context-switch fallback keyed off the current line. Both appended the same generic buckets (types, imports, properties, keywords), so when the user typed an uppercase name inside an object body — the common case — every label appeared twice. Dedupe by Label, first-occurrence wins, just before returning the list. First-occurrence is deliberate: the AST branch runs first, so its more specific items (e.g. type-specific properties for the enclosing type) take precedence over the generic switch-case fallbacks that follow. Added a regression test that walks three real positions through Completion() and asserts no label repeats. Confirmed it fails on the unfixed code with dozens of duplicates (Item, Rectangle, import, property, ...) and passes with the dedupe in place.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Closes #25.
The Neovim completion popup was showing every type and keyword twice (see the screenshot in #25 —
Scatter3D,Surface3D, etc. all listed in pairs).The completion handler builds its result list from two sources: an AST-driven block that picks categories based on the node under the cursor, and a context-switch fallback keyed off the current line. Both append the same generic buckets (types, imports, properties, keywords). When the user types an uppercase name inside an object body, which is the common case, both fire and every label gets added twice.
Fix is to dedupe by Label, first-occurrence wins, just before returning. First-occurrence is deliberate so the AST branch's more specific items (e.g. type-specific properties for the enclosing type) take precedence over the generic switch-case fallbacks that follow.
Added a regression test that walks three real positions through
Completion()and asserts no label repeats. Confirmed it fails on the unfixed code with dozens of duplicates and passes with the dedupe in place.Test plan
go test -race ./...TestCompletionNoDuplicateLabelscovers type position, blank line in object body, and import position