8000 Add support for including function objects (#246) · baco/python-lsp-server@fea0e71 · GitHub
[go: up one dir, main page]

Skip to content

Commit fea0e71

Browse files
authored
Add support for including function objects (python-lsp#246)
1 parent 98dc9c0 commit fea0e71

File tree

4 files changed

+41
-0
lines changed

4 files changed

+41
-0
lines changed

CONFIGURATION.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ This server can be configured using `workspace/didChangeConfiguration` method. E
2222
| `pylsp.plugins.jedi_completion.enabled` | `boolean` | Enable or disable the plugin. | `true` |
2323
| `pylsp.plugins.jedi_completion.include_params` | `boolean` | Auto-completes methods and classes with tabstops for each parameter. | `true` |
2424
| `pylsp.plugins.jedi_completion.include_class_objects` | `boolean` | Adds class objects as a separate completion item. | `true` |
25+
| `pylsp.plugins.jedi_completion.include_function_objects` | `boolean` | Adds function objects as a separate completion item. | `true` |
2526
| `pylsp.plugins.jedi_completion.fuzzy` | `boolean` | Enable fuzzy when requesting autocomplete. | `false` |
2627
| `pylsp.plugins.jedi_completion.eager` | `boolean` | Resolve documentation and detail eagerly. | `false` |
2728
| `pylsp.plugins.jedi_completion.resolve_at_most` | `number` | How many labels and snippets (at most) should be resolved? | `25` |

pylsp/config/schema.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,11 @@
120120
"default": true,
121121
"description": "Adds class objects as a separate completion item."
122122
},
123+
"pylsp.plugins.jedi_completion.include_function_objects": {
124+
"type": "boolean",
125+
"default": true,
126+
"description": "Adds function objects as a separate completion item."
127+
},
123128
"pylsp.plugins.jedi_completion.fuzzy": {
124129
"type": "boolean",
125130
"default": false,

pylsp/plugins/jedi_completion.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ def pylsp_completions(config, document, position):
5454

5555
should_include_params = settings.get('include_params')
5656
should_include_class_objects = settings.get('include_class_objects', True)
57+
should_include_function_objects = settings.get('include_function_objects', True)
5758

5859
max_to_resolve = settings.get('resolve_at_most', 25)
5960
modules_to_cache_for = settings.get('cache_for', None)
@@ -63,6 +64,7 @@ def pylsp_completions(config, document, position):
6364

6465
include_params = snippet_support and should_include_params and use_snippets(document, position)
6566
include_class_objects = snippet_support and should_include_class_objects and use_snippets(document, position)
67+
include_function_objects = snippet_support and should_include_function_objects and use_snippets(document, position)
6668

6769
ready_completions = [
6870
_format_completion(
@@ -88,6 +90,19 @@ def pylsp_completions(config, document, position):
8890
completion_dict['label'] += ' object'
8991
ready_completions.append(completion_dict)
9092

93+
if include_function_objects:
94+
for i, c in enumerate(completions):
95+
if c.type == 'function':
96+
completion_dict = _format_completion(
97+
c,
98+
False,
99+
resolve=resolve_eagerly,
100+
resolve_label_or_snippet=(i < max_to_resolve)
101+
)
102+
completion_dict['kind'] = lsp.CompletionItemKind.TypeParameter
103+
completion_dict['label'] += ' object'
104+
ready_completions.append(completion_dict)
105+
91106
for completion_dict in ready_completions:
92107
completion_dict['data'] = {
93108
'doc_uri': document.uri

test/plugins/test_completion.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -356,6 +356,26 @@ def test_completion_with_class_objects(config, workspace):
356356
assert completions[1]['kind'] == lsp.CompletionItemKind.TypeParameter
357357

358358

359+
def test_completion_with_function_objects(config, workspace):
360+
doc_text = 'def foobar(): pass\nfoob'
361+
com_position = {'line': 1, 'character': 4}
362+
doc = Document(DOC_URI, workspace, doc_text)
363+
config.capabilities['textDocument'] = {
364+
'completion': {'completionItem': {'snippetSupport': True}}}
365+
config.update({'plugins': {'jedi_completion': {
366+
'include_params': True,
367+
'include_function_objects': True,
368+
}}})
369+
completions = pylsp_jedi_completions(config, doc, com_position)
370+
assert len(completions) == 2
371+
372+
assert completions[0]['label'] == 'foobar()'
373+
assert completions[0]['kind'] == lsp.CompletionItemKind.Function
374+
375+
assert completions[1]['label'] == 'foobar() object'
376+
assert completions[1]['kind'] == lsp.CompletionItemKind.TypeParameter
377+
378+
359379
def test_snippet_parsing(config, workspace):
360380
doc = 'divmod'
361381
completion_position = {'line': 0, 'character': 6}

0 commit comments

Comments
 (0)
0