From 41a6591d88efcbf29832844e877b863a49d1d8ff Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Sun, 15 Dec 2019 19:56:56 +0100 Subject: [PATCH] Completions.complete returns None for fuzzy completions #1409 --- jedi/api/classes.py | 10 +++++++--- jedi/api/completion.py | 3 ++- jedi/api/file_name.py | 3 ++- test/test_api/test_api.py | 5 ++++- 4 files changed, 15 insertions(+), 6 deletions(-) diff --git a/jedi/api/classes.py b/jedi/api/classes.py index 2be39f91..12c5b5bd 100644 --- a/jedi/api/classes.py +++ b/jedi/api/classes.py @@ -408,11 +408,12 @@ class Completion(BaseDefinition): `Completion` objects are returned from :meth:`api.Script.completions`. They provide additional information about a completion. """ - def __init__(self, inference_state, name, stack, like_name_length): + def __init__(self, inference_state, name, stack, like_name_length, is_fuzzy): super(Completion, self).__init__(inference_state, name) self._like_name_length = like_name_length self._stack = stack + self._is_fuzzy = is_fuzzy # Completion objects with the same Completion name (which means # duplicate items in the completion) @@ -438,6 +439,9 @@ class Completion(BaseDefinition): @property def complete(self): """ + Only works with non-fuzzy completions. Returns None if fuzzy + completions are used. + Return the rest of the word, e.g. completing ``isinstance``:: isinstan# <-- Cursor is here @@ -452,9 +456,9 @@ class Completion(BaseDefinition): completing ``foo(par`` would give a ``Completion`` which `complete` would be `am=` - - """ + if self._is_fuzzy: + return None return self._complete(True) @property diff --git a/jedi/api/completion.py b/jedi/api/completion.py index fc54b2c7..62e52ff1 100644 --- a/jedi/api/completion.py +++ b/jedi/api/completion.py @@ -45,7 +45,8 @@ def filter_names(inference_state, completion_names, stack, like_name, fuzzy): inference_state, name, stack, - len(like_name) + len(like_name), + is_fuzzy=fuzzy, ) k = (new.name, new.complete) # key if k in comp_dct and settings.no_completion_duplicates: diff --git a/jedi/api/file_name.py b/jedi/api/file_name.py index 2cefc336..1747c803 100644 --- a/jedi/api/file_name.py +++ b/jedi/api/file_name.py @@ -62,7 +62,8 @@ def file_name_completions(inference_state, module_context, start_leaf, string, inference_state, FileName(inference_state, name[len(must_start_with) - like_name_length:]), stack=None, - like_name_length=like_name_length + like_name_length=like_name_length, + is_fuzzy=fuzzy, ) diff --git a/test/test_api/test_api.py b/test/test_api/test_api.py index 6e307a40..dbc31b59 100644 --- a/test/test_api/test_api.py +++ b/test/test_api/test_api.py @@ -331,7 +331,10 @@ def test_math_fuzzy_completion(Script, environment): expected = ['copysign', 'log', 'log10', 'log1p'] if environment.version_info.major >= 3: expected.append('log2') - assert expected == [comp.name for comp in script.completions(fuzzy=True)] + completions = script.completions(fuzzy=True) + assert expected == [comp.name for comp in completions] + for c in completions: + assert c.complete is None def test_file_fuzzy_completion(Script):