diff --git a/pyls/plugins/jedi_completion.py b/pyls/plugins/jedi_completion.py index 7ef7d6af..94a8b4eb 100644 --- a/pyls/plugins/jedi_completion.py +++ b/pyls/plugins/jedi_completion.py @@ -1,8 +1,10 @@ # Copyright 2017 Palantir Technologies, Inc. import logging import os.path as osp + import parso -from pyls import hookimpl, lsp, _utils + +from pyls import _utils, hookimpl, lsp log = logging.getLogger(__name__) @@ -51,7 +53,10 @@ @hookimpl def pyls_completions(config, document, position): """Get formatted completions for current code position""" + settings = config.plugin_settings('jedi_completion', document_path=document.path) code_position = _utils.position_to_jedi_linecolumn(document, position) + + code_position["fuzzy"] = settings.get("fuzzy", False) completions = document.jedi_script().complete(**code_position) if not completions: @@ -60,7 +65,6 @@ def pyls_completions(config, document, position): completion_capabilities = config.capabilities.get('textDocument', {}).get('completion', {}) snippet_support = completion_capabilities.get('completionItem', {}).get('snippetSupport') - settings = config.plugin_settings('jedi_completion', document_path=document.path) should_include_params = settings.get('include_params') include_params = snippet_support and should_include_params and use_snippets(document, position) return [_format_completion(c, include_params) for c in completions] or None diff --git a/test/plugins/test_completion.py b/test/plugins/test_completion.py index 6983d796..c83eca01 100644 --- a/test/plugins/test_completion.py +++ b/test/plugins/test_completion.py @@ -63,6 +63,21 @@ def test_jedi_completion(config, workspace): pyls_jedi_completions(config, doc, {'line': 1, 'character': 1000}) +def test_jedi_completion_with_fuzzy_enabled(config, workspace): + # Over 'i' in os.path.isabs(...) + config.update({'plugins': {'jedi_completion': {'fuzzy': True}}}) + com_position = {'line': 1, 'character': 15} + doc = Document(DOC_URI, workspace, DOC) + + items = pyls_jedi_completions(config, doc, com_position) + + assert items + assert items[0]['label'] == 'commonprefix(list)' + + # Test we don't throw with big character + pyls_jedi_completions(config, doc, {'line': 1, 'character': 1000}) + + def test_rope_completion(config, workspace): # Over 'i' in os.path.isabs(...) com_position = {'line': 1, 'character': 15} diff --git a/vscode-client/package.json b/vscode-client/package.json index eb4faeea..b5f65905 100644 --- a/vscode-client/package.json +++ b/vscode-client/package.json @@ -55,6 +55,11 @@ "default": true, "description": "Auto-completes methods and classes with tabstops for each parameter." }, + "pyls.plugins.jedi_completion.fuzzy": { + "type": "boolean", + "default": false, + "description": "Enable fuzzy when requesting autocomplete." + }, "pyls.plugins.jedi_definition.enabled": { "type": "boolean", "default": true,