Skip to content

Commit 3057ac2

Browse files
Add option to activate fuzzy completions in Jedi (#728)
Co-authored-by: Carlos Cordoba <[email protected]>
1 parent 2fb2c81 commit 3057ac2

File tree

3 files changed

+26
-2
lines changed

3 files changed

+26
-2
lines changed

pyls/plugins/jedi_completion.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
# Copyright 2017 Palantir Technologies, Inc.
22
import logging
33
import os.path as osp
4+
45
import parso
5-
from pyls import hookimpl, lsp, _utils
6+
7+
from pyls import _utils, hookimpl, lsp
68

79
log = logging.getLogger(__name__)
810

@@ -51,7 +53,10 @@
5153
@hookimpl
5254
def pyls_completions(config, document, position):
5355
"""Get formatted completions for current code position"""
56+
settings = config.plugin_settings('jedi_completion', document_path=document.path)
5457
code_position = _utils.position_to_jedi_linecolumn(document, position)
58+
59+
code_position["fuzzy"] = settings.get("fuzzy", False)
5560
completions = document.jedi_script().complete(**code_position)
5661

5762
if not completions:
@@ -60,7 +65,6 @@ def pyls_completions(config, document, position):
6065
completion_capabilities = config.capabilities.get('textDocument', {}).get('completion', {})
6166
snippet_support = completion_capabilities.get('completionItem', {}).get('snippetSupport')
6267

63-
settings = config.plugin_settings('jedi_completion', document_path=document.path)
6468
should_include_params = settings.get('include_params')
6569
include_params = snippet_support and should_include_params and use_snippets(document, position)
6670
return [_format_completion(c, include_params) for c in completions] or None

test/plugins/test_completion.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,21 @@ def test_jedi_completion(config, workspace):
6363
pyls_jedi_completions(config, doc, {'line': 1, 'character': 1000})
6464

6565

66+
def test_jedi_completion_with_fuzzy_enabled(config, workspace):
67+
# Over 'i' in os.path.isabs(...)
68+
config.update({'plugins': {'jedi_completion': {'fuzzy': True}}})
69+
com_position = {'line': 1, 'character': 15}
70+
doc = Document(DOC_URI, workspace, DOC)
71+
72+
items = pyls_jedi_completions(config, doc, com_position)
73+
74+
assert items
75+
assert items[0]['label'] == 'commonprefix(list)'
76+
77+
# Test we don't throw with big character
78+
pyls_jedi_completions(config, doc, {'line': 1, 'character': 1000})
79+
80+
6681
def test_rope_completion(config, workspace):
6782
# Over 'i' in os.path.isabs(...)
6883
com_position = {'line': 1, 'character': 15}

vscode-client/package.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,11 @@
5555
"default": true,
5656
"description": "Auto-completes methods and classes with tabstops for each parameter."
5757
},
58+
"pyls.plugins.jedi_completion.fuzzy": {
59+
"type": "boolean",
60+
"default": false,
61+
"description": "Enable fuzzy when requesting autocomplete."
62+
},
5863
"pyls.plugins.jedi_definition.enabled": {
5964
"type": "boolean",
6065
"default": true,

0 commit comments

Comments
 (0)