From 726e574aac688d4ab1d8f1bd1675b1a50b93bf6a Mon Sep 17 00:00:00 2001 From: bzoracler <50305397+bzoracler@users.noreply.github.com> Date: Wed, 28 Dec 2022 09:49:33 +1300 Subject: [PATCH 1/3] feat: Add builtins-following implementation --- pylsp/config/schema.json | 5 +++++ pylsp/plugins/definition.py | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/pylsp/config/schema.json b/pylsp/config/schema.json index 7e235001..4ac085d0 100644 --- a/pylsp/config/schema.json +++ b/pylsp/config/schema.json @@ -176,6 +176,11 @@ "default": true, "description": "If follow_imports is True will decide if it follow builtin imports." }, + "pylsp.plugins.jedi_definition.follow_builtin_definitions": { + "type": "boolean", + "default": true, + "description": "Follow builtin and extension definitions to stubs." + }, "pylsp.plugins.jedi_hover.enabled": { "type": "boolean", "default": true, diff --git a/pylsp/plugins/definition.py b/pylsp/plugins/definition.py index bf707b76..b2110af4 100644 --- a/pylsp/plugins/definition.py +++ b/pylsp/plugins/definition.py @@ -17,6 +17,7 @@ def pylsp_definitions(config, workspace, document, position): follow_builtin_imports=settings.get('follow_builtin_imports', True), **code_position) + follow_builtin_defns = settings.get("follow_builtin_definitions", True) return [ { 'uri': uris.uri_with(document.uri, path=str(d.module_path)), @@ -25,7 +26,7 @@ def pylsp_definitions(config, workspace, document, position): 'end': {'line': d.line - 1, 'character': d.column + len(d.name)}, } } - for d in definitions if d.is_definition() and _not_internal_definition(d) + for d in definitions if d.is_definition() and (follow_builtin_defns or _not_internal_definition(d)) ] From 1ff31a9066008134f2e5b2044406fbba62b14333 Mon Sep 17 00:00:00 2001 From: bzoracler <50305397+bzoracler@users.noreply.github.com> Date: Wed, 28 Dec 2022 09:56:11 +1300 Subject: [PATCH 2/3] test: Enabling and disabling builtins-following setting --- test/plugins/test_definitions.py | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/test/plugins/test_definitions.py b/test/plugins/test_definitions.py index bcc76482..a8972cd2 100644 --- a/test/plugins/test_definitions.py +++ b/test/plugins/test_definitions.py @@ -42,9 +42,24 @@ def test_builtin_definition(config, workspace): # Over 'i' in dict cursor_pos = {'line': 8, 'character': 24} - # No go-to def for builtins doc = Document(DOC_URI, workspace, DOC) - assert not pylsp_definitions(config, workspace, doc, cursor_pos) + orig_settings = config.settings() + + # Check definition for `dict` goes to `builtins.pyi::dict` + follow_defns_setting = {'follow_builtin_definitions': True} + settings = {'plugins': {'jedi_definition': follow_defns_setting}} + config.update(settings) + defns = pylsp_definitions(config, workspace, doc, cursor_pos) + assert len(defns) == 1 + assert defns[0]["uri"].endswith("builtins.pyi") + + # Check no definitions for `dict` + follow_defns_setting['follow_builtin_definitions'] = False + config.update(settings) + defns = pylsp_definitions(config, workspace, doc, cursor_pos) + assert not defns + + config.update(orig_settings) def test_assignment(config, workspace): From ff710f9db79b000a375734dfb78e5e767f589a90 Mon Sep 17 00:00:00 2001 From: bzoracler <50305397+bzoracler@users.noreply.github.com> Date: Wed, 28 Dec 2022 09:58:10 +1300 Subject: [PATCH 3/3] docs: Update configuration with builtin-following setting --- CONFIGURATION.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CONFIGURATION.md b/CONFIGURATION.md index aed5627f..f2626e44 100644 --- a/CONFIGURATION.md +++ b/CONFIGURATION.md @@ -32,6 +32,7 @@ This server can be configured using the `workspace/didChangeConfiguration` metho | `pylsp.plugins.jedi_definition.enabled` | `boolean` | Enable or disable the plugin. | `true` | | `pylsp.plugins.jedi_definition.follow_imports` | `boolean` | The goto call will follow imports. | `true` | | `pylsp.plugins.jedi_definition.follow_builtin_imports` | `boolean` | If follow_imports is True will decide if it follow builtin imports. | `true` | +| `pylsp.plugins.jedi_definition.follow_builtin_definitions` | `boolean` | Follow builtin and extension definitions to stubs. | `true` | | `pylsp.plugins.jedi_hover.enabled` | `boolean` | Enable or disable the plugin. | `true` | | `pylsp.plugins.jedi_references.enabled` | `boolean` | Enable or disable the plugin. | `true` | | `pylsp.plugins.jedi_signature_help.enabled` | `boolean` | Enable or disable the plugin. | `true` |