Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Fix Jedi completion fuzzy config doesn't work
  • Loading branch information
mossisnotwhy committed Dec 16, 2025
commit 85843ea710db542dd981b8c3229300bb4401c0c9
3 changes: 2 additions & 1 deletion spyder/config/lsp.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,8 @@
'include_params': False,
'include_class_objects': False,
'include_function_objects': False,
'fuzzy': False,
# Set fuzzy default True
'fuzzy': True,
},
'jedi_definition': {
'enabled': True,
Expand Down
36 changes: 31 additions & 5 deletions spyder/plugins/editor/widgets/codeeditor/lsp_mixin.py
Original file line number Diff line number Diff line change
Expand Up @@ -721,19 +721,45 @@ def process_completion(self, params):
if len(word) > 0:
first_letter = word[0]

# Get providers order for new sort key
from collections import OrderedDict
providers_order = {key: index for index, key in enumerate(
list(OrderedDict.fromkeys(
[completion["provider"] for completion in completions]
))
)}

def sort_key(completion):
if "textEdit" in completion:
text_insertion = completion["textEdit"]["newText"]
else:
text_insertion = completion["insertText"]

first_insert_letter = text_insertion[0]
case_mismatch = (
first_letter.isupper() and first_insert_letter.islower()
) or (first_letter.islower() and first_insert_letter.isupper())

# False < True, so case matches go first
return (case_mismatch, completion["sortText"])
# New sort key
# 1: provider order
# 2: same case > same letter > orders
# 3: sortText
if first_letter == first_insert_letter:
return (
providers_order[completion["provider"]],
0,
completion["sortText"]
)

if first_letter.lower() == first_insert_letter.lower():
return (
providers_order[completion["provider"]],
1,
completion["sortText"]
)

return (
providers_order[completion["provider"]],
2,
completion["sortText"]
)

completion_list = sorted(completions, key=sort_key)

Expand Down
3 changes: 2 additions & 1 deletion spyder/plugins/editor/widgets/completion.py
Original file line number Diff line number Diff line change
Expand Up @@ -442,7 +442,8 @@ def check_can_complete(self, filter_text, current_word):
if not current_word:
return True

return str(filter_text).lower().startswith(str(current_word).lower())
# Allow suggestions not starts with current word
return True

def is_position_correct(self):
"""Check if the position is correct."""
Expand Down