1
0
forked from VimPlug/jedi

Added file fuzzy match and refactored

This commit is contained in:
Johannes Maria Frank
2019-10-22 15:50:16 +01:00
parent 2653752f9c
commit f7fae4dde7
8 changed files with 44 additions and 23 deletions

View File

@@ -201,7 +201,7 @@ class Script(object):
self._inference_state.environment,
)
def completions(self, fuzzy=False):
def completions(self, fuzzy=True):
"""
Return :class:`classes.Completion` objects. Those objects contain
information about the completions, more than just names.

View File

@@ -27,18 +27,6 @@ def get_call_signature_param_names(call_signatures):
Parameter.KEYWORD_ONLY):
yield p._name
def start_match(string, like_name):
return string.startswith(like_name)
def fuzzy_match(string, like_name):
if len(like_name) <= 1:
return like_name in string
pos = string.find(like_name[0])
if pos >= 0:
return fuzzy_match(string[pos + 1:], like_name[1:])
return False
def filter_names(inference_state, completion_names, stack, like_name, fuzzy):
comp_dct = {}
@@ -49,9 +37,9 @@ def filter_names(inference_state, completion_names, stack, like_name, fuzzy):
if settings.case_insensitive_completion:
string = string.lower()
if fuzzy:
match = fuzzy_match(string, like_name)
match = helpers.fuzzy_match(string, like_name)
else:
match = start_match(string, like_name)
match = helpers.start_match(string, like_name)
if match:
new = classes.Completion(
inference_state,
@@ -111,7 +99,8 @@ class Completion:
completions = list(file_name_completions(
self._inference_state, self._module_context, start_leaf, string,
self._like_name, self._call_signatures_callback,
self._code_lines, self._original_position
self._code_lines, self._original_position,
fuzzy
))
if completions:
return completions

View File

@@ -3,12 +3,13 @@ import os
from jedi._compatibility import FileNotFoundError, force_unicode, scandir
from jedi.inference.names import AbstractArbitraryName
from jedi.api import classes
from jedi.api.helpers import fuzzy_match, start_match
from jedi.inference.helpers import get_str_or_none
from jedi.parser_utils import get_string_quote
def file_name_completions(inference_state, module_context, start_leaf, string,
like_name, call_signatures_callback, code_lines, position):
like_name, call_signatures_callback, code_lines, position, fuzzy):
# First we want to find out what can actually be changed as a name.
like_name_length = len(os.path.basename(string) + like_name)
@@ -37,7 +38,11 @@ def file_name_completions(inference_state, module_context, start_leaf, string,
return
for entry in listed:
name = entry.name
if name.startswith(must_start_with):
if fuzzy:
match = fuzzy_match(name, must_start_with)
else:
match = start_match(name, must_start_with)
if match:
if is_in_os_path_join or not entry.is_dir():
if start_leaf.type == 'string':
quote = get_string_quote(start_leaf)

View File

@@ -19,6 +19,19 @@ from jedi.cache import call_signature_time_cache
CompletionParts = namedtuple('CompletionParts', ['path', 'has_dot', 'name'])
def start_match(string, like_name):
return string.startswith(like_name)
def fuzzy_match(string, like_name):
if len(like_name) <= 1:
return like_name in string
pos = string.find(like_name[0])
if pos >= 0:
return fuzzy_match(string[pos + 1:], like_name[1:])
return False
def sorted_definitions(defs):
# Note: `or ''` below is required because `module_path` could be
return sorted(defs, key=lambda x: (x.module_path or '', x.line or 0, x.column or 0, x.name))

View File

@@ -21,7 +21,7 @@ import jedi.utils
from jedi import __version__ as __jedi_version__
print('REPL completion using Jedi %s' % __jedi_version__)
jedi.utils.setup_readline()
jedi.utils.setup_readline(fuzzy=False)
del jedi