Skip to content

Commit 4217971

Browse files
authored
Fix completion with one arg and add optional class objects to completion list (#811)
1 parent f7a523f commit 4217971

File tree

4 files changed

+52
-1
lines changed

4 files changed

+52
-1
lines changed

pyls/lsp.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,13 @@ class CompletionItemKind(object):
2424
Color = 16
2525
File = 17
2626
Reference = 18
27+
Folder = 19
28+
EnumMember = 20
29+
Constant = 21
30+
Struct = 22
31+
Event = 23
32+
Operator = 24
33+
TypeParameter = 25
2734

2835

2936
class DocumentHighlightKind(object):

pyls/plugins/jedi_completion.py

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,25 @@ def pyls_completions(config, document, position):
6666
snippet_support = completion_capabilities.get('completionItem', {}).get('snippetSupport')
6767

6868
should_include_params = settings.get('include_params')
69+
should_include_class_objects = settings.get('include_class_objects', True)
70+
6971
include_params = snippet_support and should_include_params and use_snippets(document, position)
70-
return [_format_completion(c, include_params) for c in completions] or None
72+
include_class_objects = snippet_support and should_include_class_objects and use_snippets(document, position)
73+
74+
ready_completions = [
75+
_format_completion(c, include_params)
76+
for c in completions
77+
]
78+
79+
if include_class_objects:
80+
for c in completions:
81+
if c.type == 'class':
82+
completion_dict = _format_completion(c, False)
83+
completion_dict['kind'] = lsp.CompletionItemKind.TypeParameter
84+
completion_dict['label'] += ' object'
85+
ready_completions.append(completion_dict)
86+
87+
return ready_completions or None
7188

7289

7390
def is_exception_class(name):
@@ -153,6 +170,7 @@ def _format_completion(d, include_params=True):
153170
snippet += ')$0'
154171
completion['insertText'] = snippet
155172
elif len(positional_args) == 1:
173+
completion['insertTextFormat'] = lsp.InsertTextFormat.Snippet
156174
completion['insertText'] = d.name + '($0)'
157175
else:
158176
completion['insertText'] = d.name + '()'

test/plugins/test_completion.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,27 @@ def test_snippets_completion(config, workspace):
193193
com_position = {'line': 1, 'character': len(doc_snippets)}
194194
completions = pyls_jedi_completions(config, doc, com_position)
195195
assert completions[0]['insertText'] == 'defaultdict($0)'
196+
assert completions[0]['insertTextFormat'] == lsp.InsertTextFormat.Snippet
197+
198+
199+
def test_completion_with_class_objects(config, workspace):
200+
doc_text = 'class FOOBAR(Object): pass\nFOOB'
201+
com_position = {'line': 1, 'character': 4}
202+
doc = Document(DOC_URI, workspace, doc_text)
203+
config.capabilities['textDocument'] = {
204+
'completion': {'completionItem': {'snippetSupport': True}}}
205+
config.update({'plugins': {'jedi_completion': {
206+
'include_params': True,
207+
'include_class_objects': True,
208+
}}})
209+
completions = pyls_jedi_completions(config, doc, com_position)
210+
assert len(completions) == 2
211+
212+
assert completions[0]['label'] == 'FOOBAR'
213+
assert completions[0]['kind'] == lsp.CompletionItemKind.Class
214+
215+
assert completions[1]['label'] == 'FOOBAR object'
216+
assert completions[1]['kind'] == lsp.CompletionItemKind.TypeParameter
196217

197218

198219
def test_snippet_parsing(config, workspace):

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.include_class_objects": {
59+
"type": "boolean",
60+
"default": true,
61+
"description": "Adds class objects as a separate completion item."
62+
},
5863
"pyls.plugins.jedi_completion.fuzzy": {
5964
"type": "boolean",
6065
"default": false,

0 commit comments

Comments
 (0)