Skip to content

Commit f72c853

Browse files
authored
fix: document symbol path location (#629)
* tests: update * fix: document symbol path location Close #628 * update changelog
1 parent 294016c commit f72c853

File tree

4 files changed

+47
-30
lines changed

4 files changed

+47
-30
lines changed

CHANGELOG.md

+2
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222

2323
- Fix issue where pipes were not taken into account in the signature help, resulting in the highlighted argument in signature help always being off by one for unlabelled arguments in piped expressions https://github.com/rescript-lang/rescript-vscode/issues/618
2424

25+
- Fix file location in Document Symbols response. https://github.com/rescript-lang/rescript-vscode/issues/629
26+
2527
## v1.8.2
2628

2729
#### :rocket: New Feature

analysis/src/DocumentSymbol.ml

+2-9
Original file line numberDiff line numberDiff line change
@@ -137,16 +137,9 @@ let command ~path =
137137
let result =
138138
!symbols
139139
|> List.rev_map (fun (name, loc, kind) ->
140+
let range = Utils.cmtLocToRange loc in
140141
Protocol.stringifyDocumentSymbolItem
141-
{
142-
name;
143-
location =
144-
{
145-
uri = Uri.toString (Uri.fromPath path);
146-
range = Utils.cmtLocToRange loc;
147-
};
148-
kind = kindNumber kind;
149-
})
142+
{name; range; selectionRange = range; kind = kindNumber kind})
150143
|> String.concat ",\n"
151144
in
152145
print_endline ("[\n" ^ result ^ "\n]")

analysis/src/Protocol.ml

+11-5
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,12 @@ type completionItem = {
4242
}
4343

4444
type location = {uri: string; range: range}
45-
type documentSymbolItem = {name: string; kind: int; location: location}
45+
type documentSymbolItem = {
46+
name: string;
47+
kind: int;
48+
range: range;
49+
selectionRange: range;
50+
}
4651
type renameFile = {oldUri: string; newUri: string}
4752
type textEdit = {range: range; newText: string}
4853

@@ -103,15 +108,16 @@ let stringifyLocation (h : location) =
103108
Printf.sprintf {|{"uri": "%s", "range": %s}|} (Json.escape h.uri)
104109
(stringifyRange h.range)
105110

106-
let stringifyDocumentSymbolItem i =
111+
let stringifyDocumentSymbolItem (i : documentSymbolItem) =
112+
let range = stringifyRange i.range in
107113
Printf.sprintf
108114
{|{
109115
"name": "%s",
110116
"kind": %i,
111-
"location": %s
117+
"range": %s,
118+
"selectionRange": %s
112119
}|}
113-
(Json.escape i.name) i.kind
114-
(stringifyLocation i.location)
120+
(Json.escape i.name) i.kind range range
115121

116122
let stringifyRenameFile {oldUri; newUri} =
117123
Printf.sprintf {|{

analysis/tests/src/expected/DocumentSymbol.res.txt

+32-16
Original file line numberDiff line numberDiff line change
@@ -3,82 +3,98 @@ DocumentSymbol src/DocumentSymbol.res
33
{
44
"name": "MyList",
55
"kind": 2,
6-
"location": {"uri": "DocumentSymbol.res", "range": {"start": {"line": 0, "character": 7}, "end": {"line": 0, "character": 25}}}
6+
"range": {"start": {"line": 0, "character": 7}, "end": {"line": 0, "character": 25}},
7+
"selectionRange": {"start": {"line": 0, "character": 7}, "end": {"line": 0, "character": 25}}
78
},
89
{
910
"name": "Dep",
1011
"kind": 2,
11-
"location": {"uri": "DocumentSymbol.res", "range": {"start": {"line": 2, "character": 7}, "end": {"line": 7, "character": 1}}}
12+
"range": {"start": {"line": 2, "character": 7}, "end": {"line": 7, "character": 1}},
13+
"selectionRange": {"start": {"line": 2, "character": 7}, "end": {"line": 7, "character": 1}}
1214
},
1315
{
1416
"name": "customDouble",
1517
"kind": 12,
16-
"location": {"uri": "DocumentSymbol.res", "range": {"start": {"line": 6, "character": 2}, "end": {"line": 6, "character": 35}}}
18+
"range": {"start": {"line": 6, "character": 2}, "end": {"line": 6, "character": 35}},
19+
"selectionRange": {"start": {"line": 6, "character": 2}, "end": {"line": 6, "character": 35}}
1720
},
1821
{
1922
"name": "Lib",
2023
"kind": 2,
21-
"location": {"uri": "DocumentSymbol.res", "range": {"start": {"line": 9, "character": 7}, "end": {"line": 12, "character": 1}}}
24+
"range": {"start": {"line": 9, "character": 7}, "end": {"line": 12, "character": 1}},
25+
"selectionRange": {"start": {"line": 9, "character": 7}, "end": {"line": 12, "character": 1}}
2226
},
2327
{
2428
"name": "foo",
2529
"kind": 12,
26-
"location": {"uri": "DocumentSymbol.res", "range": {"start": {"line": 10, "character": 2}, "end": {"line": 10, "character": 55}}}
30+
"range": {"start": {"line": 10, "character": 2}, "end": {"line": 10, "character": 55}},
31+
"selectionRange": {"start": {"line": 10, "character": 2}, "end": {"line": 10, "character": 55}}
2732
},
2833
{
2934
"name": "next",
3035
"kind": 12,
31-
"location": {"uri": "DocumentSymbol.res", "range": {"start": {"line": 11, "character": 2}, "end": {"line": 11, "character": 48}}}
36+
"range": {"start": {"line": 11, "character": 2}, "end": {"line": 11, "character": 48}},
37+
"selectionRange": {"start": {"line": 11, "character": 2}, "end": {"line": 11, "character": 48}}
3238
},
3339
{
3440
"name": "op",
3541
"kind": 13,
36-
"location": {"uri": "DocumentSymbol.res", "range": {"start": {"line": 14, "character": 0}, "end": {"line": 14, "character": 16}}}
42+
"range": {"start": {"line": 14, "character": 0}, "end": {"line": 14, "character": 16}},
43+
"selectionRange": {"start": {"line": 14, "character": 0}, "end": {"line": 14, "character": 16}}
3744
},
3845
{
3946
"name": "ForAuto",
4047
"kind": 2,
41-
"location": {"uri": "DocumentSymbol.res", "range": {"start": {"line": 16, "character": 7}, "end": {"line": 20, "character": 1}}}
48+
"range": {"start": {"line": 16, "character": 7}, "end": {"line": 20, "character": 1}},
49+
"selectionRange": {"start": {"line": 16, "character": 7}, "end": {"line": 20, "character": 1}}
4250
},
4351
{
4452
"name": "t",
4553
"kind": 26,
46-
"location": {"uri": "DocumentSymbol.res", "range": {"start": {"line": 17, "character": 2}, "end": {"line": 17, "character": 14}}}
54+
"range": {"start": {"line": 17, "character": 2}, "end": {"line": 17, "character": 14}},
55+
"selectionRange": {"start": {"line": 17, "character": 2}, "end": {"line": 17, "character": 14}}
4756
},
4857
{
4958
"name": "abc",
5059
"kind": 12,
51-
"location": {"uri": "DocumentSymbol.res", "range": {"start": {"line": 18, "character": 2}, "end": {"line": 18, "character": 32}}}
60+
"range": {"start": {"line": 18, "character": 2}, "end": {"line": 18, "character": 32}},
61+
"selectionRange": {"start": {"line": 18, "character": 2}, "end": {"line": 18, "character": 32}}
5262
},
5363
{
5464
"name": "abd",
5565
"kind": 12,
56-
"location": {"uri": "DocumentSymbol.res", "range": {"start": {"line": 19, "character": 2}, "end": {"line": 19, "character": 32}}}
66+
"range": {"start": {"line": 19, "character": 2}, "end": {"line": 19, "character": 32}},
67+
"selectionRange": {"start": {"line": 19, "character": 2}, "end": {"line": 19, "character": 32}}
5768
},
5869
{
5970
"name": "fa",
6071
"kind": 16,
61-
"location": {"uri": "DocumentSymbol.res", "range": {"start": {"line": 22, "character": 0}, "end": {"line": 22, "character": 22}}}
72+
"range": {"start": {"line": 22, "character": 0}, "end": {"line": 22, "character": 22}},
73+
"selectionRange": {"start": {"line": 22, "character": 0}, "end": {"line": 22, "character": 22}}
6274
},
6375
{
6476
"name": "O",
6577
"kind": 2,
66-
"location": {"uri": "DocumentSymbol.res", "range": {"start": {"line": 24, "character": 7}, "end": {"line": 29, "character": 1}}}
78+
"range": {"start": {"line": 24, "character": 7}, "end": {"line": 29, "character": 1}},
79+
"selectionRange": {"start": {"line": 24, "character": 7}, "end": {"line": 29, "character": 1}}
6780
},
6881
{
6982
"name": "Comp",
7083
"kind": 2,
71-
"location": {"uri": "DocumentSymbol.res", "range": {"start": {"line": 25, "character": 9}, "end": {"line": 28, "character": 3}}}
84+
"range": {"start": {"line": 25, "character": 9}, "end": {"line": 28, "character": 3}},
85+
"selectionRange": {"start": {"line": 25, "character": 9}, "end": {"line": 28, "character": 3}}
7286
},
7387
{
7488
"name": "make",
7589
"kind": 12,
76-
"location": {"uri": "DocumentSymbol.res", "range": {"start": {"line": 27, "character": 4}, "end": {"line": 27, "character": 98}}}
90+
"range": {"start": {"line": 27, "character": 4}, "end": {"line": 27, "character": 98}},
91+
"selectionRange": {"start": {"line": 27, "character": 4}, "end": {"line": 27, "character": 98}}
7792
},
7893
{
7994
"name": "zzz",
8095
"kind": 16,
81-
"location": {"uri": "DocumentSymbol.res", "range": {"start": {"line": 31, "character": 0}, "end": {"line": 31, "character": 12}}}
96+
"range": {"start": {"line": 31, "character": 0}, "end": {"line": 31, "character": 12}},
97+
"selectionRange": {"start": {"line": 31, "character": 0}, "end": {"line": 31, "character": 12}}
8298
}
8399
]
84100

0 commit comments

Comments
 (0)