Skip to content

Commit 30c01e0

Browse files
committed
Preserve target authorities in definition and reference URIs
1 parent a362006 commit 30c01e0

3 files changed

Lines changed: 67 additions & 2 deletions

File tree

‎pylsp/plugins/definition.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ def pylsp_definitions(
6464
follow_builtin_defns = settings.get("follow_builtin_definitions", True)
6565
return [
6666
{
67-
"uri": uris.uri_with(document.uri, path=str(d.module_path)),
67+
"uri": uris.from_fs_path(str(d.module_path)),
6868
"range": {
6969
"start": {"line": d.line - 1, "character": d.column},
7070
"end": {"line": d.line - 1, "character": d.column + len(d.name)},

‎pylsp/plugins/references.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ def pylsp_references(document, position, exclude_declaration):
2020
# Filter out builtin modules
2121
return [
2222
{
23-
"uri": uris.uri_with(document.uri, path=str(d.module_path))
23+
"uri": uris.from_fs_path(str(d.module_path))
2424
if d.module_path
2525
else document.uri,
2626
"range": {

‎test/plugins/test_location_uris.py‎

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
# Copyright 2021- Python Language Server Contributors.
2+
3+
from pathlib import PureWindowsPath
4+
from types import SimpleNamespace
5+
6+
import pytest
7+
8+
from pylsp import uris
9+
from pylsp.plugins.definition import pylsp_definitions
10+
from pylsp.plugins.references import pylsp_references
11+
from pylsp.workspace import Document
12+
13+
14+
@pytest.mark.parametrize("operation", ["definition", "references"])
15+
@pytest.mark.parametrize(
16+
"document_uri,target_path,expected_uri",
17+
[
18+
(
19+
"file:///c:/project/main.py",
20+
r"\\server\share\target.py",
21+
"file://server/share/target.py",
22+
),
23+
(
24+
"file://server/share/main.py",
25+
r"\\other\share\target.py",
26+
"file://other/share/target.py",
27+
),
28+
(
29+
"file://server/share/main.py",
30+
r"C:\project\target.py",
31+
"file:///c:/project/target.py",
32+
),
33+
(
34+
"file://server/share/main.py",
35+
r"\\server\share\target.py",
36+
"file://server/share/target.py",
37+
),
38+
],
39+
)
40+
def test_location_uri(
41+
config, workspace, monkeypatch, operation, document_uri, target_path, expected_uri
42+
) -> None:
43+
monkeypatch.setattr(uris, "IS_WIN", True)
44+
name = SimpleNamespace(
45+
module_path=PureWindowsPath(target_path),
46+
line=1,
47+
column=0,
48+
name="target",
49+
is_definition=lambda: True,
50+
in_builtin_module=lambda: False,
51+
)
52+
script = SimpleNamespace(
53+
goto=lambda **kwargs: [name], get_references=lambda **kwargs: [name]
54+
)
55+
document = Document(document_uri, workspace, "target()")
56+
monkeypatch.setattr(document, "jedi_script", lambda **kwargs: script)
57+
position = {"line": 0, "character": 0}
58+
59+
if operation == "definition":
60+
locations = pylsp_definitions(config, document, position)
61+
else:
62+
locations = pylsp_references(document, position, exclude_declaration=False)
63+
64+
assert len(locations) == 1
65+
assert locations[0]["uri"] == expected_uri

0 commit comments

Comments
 (0)