4
4
5
5
log = logging .getLogger (__name__ )
6
6
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
+
7
41
8
42
@hookimpl
9
43
def pyls_completions (config , document , position ):
@@ -14,36 +48,35 @@ def pyls_completions(config, document, position):
14
48
settings = config .plugin_settings ('jedi_completion' , document_path = document .path )
15
49
include_params = settings .get ('include_params' , True )
16
50
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
42
75
43
76
44
77
def _label (definition ):
45
78
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 ] )
47
80
return '{}({})' .format (definition .name , params )
48
81
49
82
return definition .name
@@ -61,41 +94,3 @@ def _sort_text(definition):
61
94
# If its 'hidden', put it next last
62
95
prefix = 'z{}' if definition .name .startswith ('_' ) else 'a{}'
63
96
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