Skip to content

Commit 4c501a4

Browse files
authored
Merge branch 'develop' into importmagic
2 parents 0ba7a68 + 71c2fc5 commit 4c501a4

File tree

2 files changed

+35
-1
lines changed

2 files changed

+35
-1
lines changed

pyls/plugins/jedi_completion.py

+19-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# Copyright 2017 Palantir Technologies, Inc.
22
import logging
3+
import parso
34
from pyls import hookimpl, lsp, _utils
45

56
log = logging.getLogger(__name__)
@@ -50,8 +51,25 @@ def pyls_completions(config, document, position):
5051

5152
settings = config.plugin_settings('jedi_completion', document_path=document.path)
5253
should_include_params = settings.get('include_params')
54+
include_params = (use_snippets(document, position) and
55+
snippet_support and should_include_params)
56+
return [_format_completion(d, include_params) for d in definitions] or None
5357

54-
return [_format_completion(d, snippet_support and should_include_params) for d in definitions] or None
58+
59+
def use_snippets(document, position):
60+
"""
61+
Determine if it's necessary to return snippets in code completions.
62+
63+
This returns `False` if a completion is being requested on an import
64+
statement, `True` otherwise.
65+
"""
66+
lines = document.source.split('\n')
67+
act_line = lines[position['line']]
68+
tokens = parso.parse(act_line)
69+
act_statement = tokens.children[0].get_code()
70+
if act_statement.startswith('import') or act_statement.startswith('from'):
71+
return False
72+
return True
5573

5674

5775
def _format_completion(d, include_params=True):

test/plugins/test_completion.py

+16
Original file line numberDiff line numberDiff line change
@@ -150,3 +150,19 @@ def test_matplotlib_completions(config):
150150

151151
assert items
152152
assert any(['plot' in i['label'] for i in items])
153+
154+
155+
def test_snippets_completion(config):
156+
doc_snippets = 'from collections import defaultdict \na=defaultdict'
157+
com_position = {'line': 0, 'character': 35}
158+
doc = Document(DOC_URI, doc_snippets)
159+
config.capabilities['textDocument'] = {
160+
'completion': {'completionItem': {'snippetSupport': True}}}
161+
config.update({'plugins': {'jedi_completion': {'include_params': True}}})
162+
completions = pyls_jedi_completions(config, doc, com_position)
163+
assert completions[0]['insertText'] == 'defaultdict'
164+
165+
com_position = {'line': 1, 'character': len(doc_snippets)}
166+
completions = pyls_jedi_completions(config, doc, com_position)
167+
out = 'defaultdict(${1:default_factory}, ${2:iterable}, ${3:kwargs})$0'
168+
assert completions[0]['insertText'] == out

0 commit comments

Comments
 (0)