44
55log = logging .getLogger (__name__ )
66
7+ # Map to the VSCode type
8+ _TYPE_MAP = {
9+ 'none' : lsp .CompletionItemKind .Value ,
10+ 'type' : lsp .CompletionItemKind .Class ,
11+ 'tuple' : lsp .CompletionItemKind .Class ,
12+ 'dict' : lsp .CompletionItemKind .Class ,
13+ 'dictionary' : lsp .CompletionItemKind .Class ,
14+ 'function' : lsp .CompletionItemKind .Function ,
15+ 'lambda' : lsp .CompletionItemKind .Function ,
16+ 'generator' : lsp .CompletionItemKind .Function ,
17+ 'class' : lsp .CompletionItemKind .Class ,
18+ 'instance' : lsp .CompletionItemKind .Reference ,
19+ 'method' : lsp .CompletionItemKind .Method ,
20+ 'builtin' : lsp .CompletionItemKind .Class ,
21+ 'builtinfunction' : lsp .CompletionItemKind .Function ,
22+ 'module' : lsp .CompletionItemKind .Module ,
23+ 'file' : lsp .CompletionItemKind .File ,
24+ 'xrange' : lsp .CompletionItemKind .Class ,
25+ 'slice' : lsp .CompletionItemKind .Class ,
26+ 'traceback' : lsp .CompletionItemKind .Class ,
27+ 'frame' : lsp .CompletionItemKind .Class ,
28+ 'buffer' : lsp .CompletionItemKind .Class ,
29+ 'dictproxy' : lsp .CompletionItemKind .Class ,
30+ 'funcdef' : lsp .CompletionItemKind .Function ,
31+ 'property' : lsp .CompletionItemKind .Property ,
32+ 'import' : lsp .CompletionItemKind .Module ,
33+ 'keyword' : lsp .CompletionItemKind .Keyword ,
34+ 'constant' : lsp .CompletionItemKind .Variable ,
35+ 'variable' : lsp .CompletionItemKind .Variable ,
36+ 'value' : lsp .CompletionItemKind .Value ,
37+ 'param' : lsp .CompletionItemKind .Variable ,
38+ 'statement' : lsp .CompletionItemKind .Keyword ,
39+ }
40+
741
842@hookimpl
943def pyls_completions (config , document , position ):
@@ -14,36 +48,35 @@ def pyls_completions(config, document, position):
1448 settings = config .plugin_settings ('jedi_completion' , document_path = document .path )
1549 include_params = settings .get ('include_params' , True )
1650
17- completions = []
18- for d in definitions :
19- completion = {
20- 'label' : _label (d ),
21- 'kind' : _kind (d ),
22- 'detail' : _detail (d ),
23- 'documentation' : _utils .format_docstring (d .docstring ()),
24- 'sortText' : _sort_text (d ),
25- 'insertText' : d .name
26- }
27-
28- if include_params and hasattr (d , 'params' ) and d .params :
29- # For completions with params, we can generate a snippet instead
30- completion ['insertTextFormat' ] = lsp .InsertTextFormat .Snippet
31- snippet = d .name + '('
32- for i , param in enumerate (d .params ):
33- snippet += '${%s:%s}' % (i + 1 , param .name )
34- if i < len (d .params ) - 1 :
35- snippet += ', '
36- snippet += ')$0'
37- completion ['insertText' ] = snippet
38-
39- completions .append (completion )
40-
41- return completions or None
51+ return [_format_completion (d , include_params ) for d in definitions ] or None
52+
53+
54+ def _format_completion (d , include_params = True ):
55+ completion = {
56+ 'label' : _label (d ),
57+ 'kind' : _TYPE_MAP .get (d .type ),
58+ 'detail' : _detail (d ),
59+ 'documentation' : _utils .format_docstring (d .docstring ()),
60+ 'sortText' : _sort_text (d ),
61+ 'insertText' : d .name
62+ }
63+
64+ if include_params and hasattr (d , 'params' ) and d .params :
65+ # For completions with params, we can generate a snippet instead
66+ completion ['insertTextFormat' ] = lsp .InsertTextFormat .Snippet
67+ snippet = d .name + '('
68+ for i , param in enumerate (d .params ):
69+ snippet += '${%s:%s}' % (i + 1 , param .name )
70+ if i < len (d .params ) - 1 :
71+ snippet += ', '
72+ snippet += ')$0'
73+ completion ['insertText' ] = snippet
74+ return completion
4275
4376
4477def _label (definition ):
4578 if definition .type in ('function' , 'method' ) and hasattr (definition , 'params' ):
46- params = ', ' .join (param .name for param in definition .params )
79+ params = ', ' .join ([ param .name for param in definition .params ] )
4780 return '{}({})' .format (definition .name , params )
4881
4982 return definition .name
@@ -61,41 +94,3 @@ def _sort_text(definition):
6194 # If its 'hidden', put it next last
6295 prefix = 'z{}' if definition .name .startswith ('_' ) else 'a{}'
6396 return prefix .format (definition .name )
64-
65-
66- def _kind (d ):
67- """ Return the VSCode type """
68- MAP = {
69- 'none' : lsp .CompletionItemKind .Value ,
70- 'type' : lsp .CompletionItemKind .Class ,
71- 'tuple' : lsp .CompletionItemKind .Class ,
72- 'dict' : lsp .CompletionItemKind .Class ,
73- 'dictionary' : lsp .CompletionItemKind .Class ,
74- 'function' : lsp .CompletionItemKind .Function ,
75- 'lambda' : lsp .CompletionItemKind .Function ,
76- 'generator' : lsp .CompletionItemKind .Function ,
77- 'class' : lsp .CompletionItemKind .Class ,
78- 'instance' : lsp .CompletionItemKind .Reference ,
79- 'method' : lsp .CompletionItemKind .Method ,
80- 'builtin' : lsp .CompletionItemKind .Class ,
81- 'builtinfunction' : lsp .CompletionItemKind .Function ,
82- 'module' : lsp .CompletionItemKind .Module ,
83- 'file' : lsp .CompletionItemKind .File ,
84- 'xrange' : lsp .CompletionItemKind .Class ,
85- 'slice' : lsp .CompletionItemKind .Class ,
86- 'traceback' : lsp .CompletionItemKind .Class ,
87- 'frame' : lsp .CompletionItemKind .Class ,
88- 'buffer' : lsp .CompletionItemKind .Class ,
89- 'dictproxy' : lsp .CompletionItemKind .Class ,
90- 'funcdef' : lsp .CompletionItemKind .Function ,
91- 'property' : lsp .CompletionItemKind .Property ,
92- 'import' : lsp .CompletionItemKind .Module ,
93- 'keyword' : lsp .CompletionItemKind .Keyword ,
94- 'constant' : lsp .CompletionItemKind .Variable ,
95- 'variable' : lsp .CompletionItemKind .Variable ,
96- 'value' : lsp .CompletionItemKind .Value ,
97- 'param' : lsp .CompletionItemKind .Variable ,
98- 'statement' : lsp .CompletionItemKind .Keyword ,
99- }
100-
101- return MAP .get (d .type )
0 commit comments