Fix: LSP import completions with trailing spaces and builtin filtering (#1704) #1712
+354
−42
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.
Summary
This PR fixes #1704 by filtering out implicitly re-exported builtins from import suggestions and improves the robustness of completions when trailing whitespace is present.
Specific changes:
builtinsorextra_builtins(e.g.,str,Exception) when providing completion candidates for a module. This prevents polluting the completion list with global builtins that aren't explicitly exported by the target module. Standard module attributes (like__annotations__,__doc__) remain available.importandfrom ... importstatements ending in trailing spaces. Previously, the parser yielded no nodes for these cursor positions, preventing completions; now, we detect the context and provide appropriate suggestions (e.g., showing the module list afterimport <cursor>).add_module_exports_completionsandadd_all_modules_completionsto reduce code duplication and simplify the maincompletionfunction.CONTRIBUTING.md.Fixes #1704
Test Plan
Ran
python3 test.pyto verify the following scenarios:strorint, but still suggests valid exports and module attributes (verified viatest_completion_from_import_builtins).importkeyword by spaces (verified viatest_completion_import_trailing_spaceandtest_completion_from_import_trailing_space).