Skip to content

Commit 1d8a004

Browse files
committed
refactor: flatten references
1 parent 46e5947 commit 1d8a004

9 files changed

+40
-41
lines changed

analysis/src/Commands.ml

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -126,15 +126,10 @@ let references ~path ~line ~col =
126126
let allLocs =
127127
allReferences
128128
|> List.fold_left
129-
(fun acc {References.uri = uri2; locs} ->
130-
(locs
131-
|> List.map (fun loc ->
132-
Protocol.stringifyLocation
133-
{
134-
uri = Uri2.toString uri2;
135-
range = Utils.cmtLocToRange loc;
136-
}))
137-
@ acc)
129+
(fun acc {References.uri = uri2; loc} ->
130+
Protocol.stringifyLocation
131+
{uri = Uri2.toString uri2; range = Utils.cmtLocToRange loc}
132+
:: acc)
138133
[]
139134
in
140135
"[\n" ^ (allLocs |> String.concat ",\n") ^ "\n]")
@@ -190,8 +185,7 @@ let rename ~path ~line ~col ~newName =
190185
let referencesToToplevelModules, referencesToItems =
191186
allReferences
192187
|> List.fold_left
193-
(fun acc {References.uri = uri2; locs} ->
194-
(locs |> List.map (fun loc -> (uri2, loc))) @ acc)
188+
(fun acc {References.uri = uri2; loc} -> (uri2, loc) :: acc)
195189
[]
196190
|> List.partition (fun (_, loc) -> Utils.isTopLoc loc)
197191
in

analysis/src/References.ml

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -379,7 +379,7 @@ let rec pathFromVisibility visibilityPath current =
379379
let pathFromVisibility visibilityPath tipName =
380380
pathFromVisibility visibilityPath (Tip tipName)
381381

382-
type references = {uri : Uri2.t; locs : Location.t list}
382+
type references = {uri : Uri2.t; loc : Location.t}
383383

384384
let forLocalStamp ~full:{file; extra; package} stamp tip =
385385
let env = QueryEnv.fromFile file in
@@ -418,7 +418,8 @@ let forLocalStamp ~full:{file; extra; package} stamp tip =
418418
Hashtbl.find_opt extra.internalReferences localStamp
419419
with
420420
| None -> []
421-
| Some local -> [{uri = file.uri; locs = local}]))
421+
| Some locs ->
422+
locs |> List.map (fun loc -> {uri = file.uri; loc})))
422423
(* if this file has a corresponding interface or implementation file
423424
also find the references in that file *)
424425
in
@@ -430,33 +431,37 @@ let forLocalStamp ~full:{file; extra; package} stamp tip =
430431
let externals =
431432
package.projectFiles |> FileSet.elements
432433
|> List.filter (fun name -> name <> file.moduleName)
433-
|> Utils.filterMap (fun name ->
434+
|> List.map (fun name ->
434435
match ProcessCmt.fileForModule ~package name with
435-
| None -> None
436+
| None -> []
436437
| Some file -> (
437438
match ProcessCmt.extraForModule ~package name with
438-
| None -> None
439+
| None -> []
439440
| Some {extra} -> (
440441
match
441442
Hashtbl.find_opt extra.externalReferences
442443
thisModuleName
443444
with
444-
| None -> None
445+
| None -> []
445446
| Some refs ->
446447
let locs =
447448
refs
448449
|> Utils.filterMap (fun (p, t, locs) ->
449450
if p = path && t = tip then Some locs
450451
else None)
451452
in
452-
Some {uri = file.uri; locs})))
453+
locs |> List.map (fun loc -> {uri = file.uri; loc})
454+
)))
455+
|> List.concat
453456
in
454457
alternativeReferences @ externals)
455458
else (
456459
maybeLog "Not visible";
457460
[])
458461
in
459-
{uri = file.uri; locs} :: externals)
462+
List.append
463+
(locs |> List.map (fun loc -> {uri = file.uri; loc}))
464+
externals)
460465

461466
let allReferencesForLocItem ~full:({file; package} as full) locItem =
462467
match locItem.locType with
@@ -475,7 +480,7 @@ let allReferencesForLocItem ~full:({file; package} as full) locItem =
475480
|> List.map (fun loc ->
476481
{
477482
uri = Uri2.fromPath loc.Location.loc_start.pos_fname;
478-
locs = [loc];
483+
loc;
479484
}))
480485
|> List.flatten
481486
in
@@ -487,7 +492,7 @@ let allReferencesForLocItem ~full:({file; package} as full) locItem =
487492
{
488493
uri = Uri2.fromPath src;
489494
(* XXX TODO use different runtime representation *)
490-
locs = [Utils.topLoc src];
495+
loc = Utils.topLoc src;
491496
}
492497
in
493498
getSrc paths |> List.map moduleSrcToRef

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,10 @@ Rename tests/src/Cross.res 24:28 xPrime
7272
"uri": "Cross.res"
7373
},
7474
"edits": [{
75-
"range": {"start": {"line": 21, "character": 28}, "end": {"line": 21, "character": 29}},
75+
"range": {"start": {"line": 24, "character": 28}, "end": {"line": 24, "character": 29}},
7676
"newText": "xPrime"
7777
}, {
78-
"range": {"start": {"line": 24, "character": 28}, "end": {"line": 24, "character": 29}},
78+
"range": {"start": {"line": 21, "character": 28}, "end": {"line": 21, "character": 29}},
7979
"newText": "xPrime"
8080
}]
8181
}
Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
References tests/src/References.res 0:4
22
[
3-
{"uri": "Cross.res", "range": {"start": {"line": 8, "character": 27}, "end": {"line": 8, "character": 28}}},
4-
{"uri": "Cross.res", "range": {"start": {"line": 3, "character": 27}, "end": {"line": 3, "character": 28}}},
53
{"uri": "Cross.res", "range": {"start": {"line": 0, "character": 26}, "end": {"line": 0, "character": 27}}},
6-
{"uri": "References.res", "range": {"start": {"line": 7, "character": 8}, "end": {"line": 7, "character": 9}}},
4+
{"uri": "Cross.res", "range": {"start": {"line": 3, "character": 27}, "end": {"line": 3, "character": 28}}},
5+
{"uri": "Cross.res", "range": {"start": {"line": 8, "character": 27}, "end": {"line": 8, "character": 28}}},
6+
{"uri": "References.res", "range": {"start": {"line": 0, "character": 4}, "end": {"line": 0, "character": 5}}},
77
{"uri": "References.res", "range": {"start": {"line": 3, "character": 8}, "end": {"line": 3, "character": 9}}},
8-
{"uri": "References.res", "range": {"start": {"line": 0, "character": 4}, "end": {"line": 0, "character": 5}}}
8+
{"uri": "References.res", "range": {"start": {"line": 7, "character": 8}, "end": {"line": 7, "character": 9}}}
99
]
1010

1111
References tests/src/References.res 9:19
1212
[
13-
{"uri": "References.res", "range": {"start": {"line": 9, "character": 19}, "end": {"line": 9, "character": 21}}},
14-
{"uri": "References.res", "range": {"start": {"line": 9, "character": 12}, "end": {"line": 9, "character": 14}}}
13+
{"uri": "References.res", "range": {"start": {"line": 9, "character": 12}, "end": {"line": 9, "character": 14}}},
14+
{"uri": "References.res", "range": {"start": {"line": 9, "character": 19}, "end": {"line": 9, "character": 21}}}
1515
]
1616

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
References tests/src/ReferencesWithInterface.res 0:4
22
[
3-
{"uri": "Cross.res", "range": {"start": {"line": 18, "character": 53}, "end": {"line": 18, "character": 54}}},
4-
{"uri": "Cross.res", "range": {"start": {"line": 14, "character": 53}, "end": {"line": 14, "character": 54}}},
53
{"uri": "Cross.res", "range": {"start": {"line": 11, "character": 52}, "end": {"line": 11, "character": 53}}},
4+
{"uri": "Cross.res", "range": {"start": {"line": 14, "character": 53}, "end": {"line": 14, "character": 54}}},
5+
{"uri": "Cross.res", "range": {"start": {"line": 18, "character": 53}, "end": {"line": 18, "character": 54}}},
66
{"uri": "ReferencesWithInterface.resi", "range": {"start": {"line": 0, "character": 4}, "end": {"line": 0, "character": 5}}},
77
{"uri": "ReferencesWithInterface.res", "range": {"start": {"line": 0, "character": 4}, "end": {"line": 0, "character": 5}}}
88
]

analysis/tests/src/expected/ReferencesWithInterface.resi.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
References tests/src/ReferencesWithInterface.resi 0:4
22
[
3-
{"uri": "Cross.res", "range": {"start": {"line": 18, "character": 53}, "end": {"line": 18, "character": 54}}},
4-
{"uri": "Cross.res", "range": {"start": {"line": 14, "character": 53}, "end": {"line": 14, "character": 54}}},
53
{"uri": "Cross.res", "range": {"start": {"line": 11, "character": 52}, "end": {"line": 11, "character": 53}}},
4+
{"uri": "Cross.res", "range": {"start": {"line": 14, "character": 53}, "end": {"line": 14, "character": 54}}},
5+
{"uri": "Cross.res", "range": {"start": {"line": 18, "character": 53}, "end": {"line": 18, "character": 54}}},
66
{"uri": "ReferencesWithInterface.res", "range": {"start": {"line": 0, "character": 4}, "end": {"line": 0, "character": 5}}},
77
{"uri": "ReferencesWithInterface.resi", "range": {"start": {"line": 0, "character": 4}, "end": {"line": 0, "character": 5}}}
88
]

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@ Rename tests/src/Rename.res 0:4 y
66
"uri": "Rename.res"
77
},
88
"edits": [{
9-
"range": {"start": {"line": 0, "character": 4}, "end": {"line": 0, "character": 5}},
9+
"range": {"start": {"line": 7, "character": 8}, "end": {"line": 7, "character": 9}},
1010
"newText": "y"
1111
}, {
1212
"range": {"start": {"line": 3, "character": 8}, "end": {"line": 3, "character": 9}},
1313
"newText": "y"
1414
}, {
15-
"range": {"start": {"line": 7, "character": 8}, "end": {"line": 7, "character": 9}},
15+
"range": {"start": {"line": 0, "character": 4}, "end": {"line": 0, "character": 5}},
1616
"newText": "y"
1717
}]
1818
}
@@ -26,10 +26,10 @@ Rename tests/src/Rename.res 9:19 yy
2626
"uri": "Rename.res"
2727
},
2828
"edits": [{
29-
"range": {"start": {"line": 9, "character": 12}, "end": {"line": 9, "character": 14}},
29+
"range": {"start": {"line": 9, "character": 19}, "end": {"line": 9, "character": 21}},
3030
"newText": "yy"
3131
}, {
32-
"range": {"start": {"line": 9, "character": 19}, "end": {"line": 9, "character": 21}},
32+
"range": {"start": {"line": 9, "character": 12}, "end": {"line": 9, "character": 14}},
3333
"newText": "yy"
3434
}]
3535
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,10 @@ Rename tests/src/RenameWithInterface.res 0:4 y
2626
"uri": "Cross.res"
2727
},
2828
"edits": [{
29-
"range": {"start": {"line": 21, "character": 28}, "end": {"line": 21, "character": 29}},
29+
"range": {"start": {"line": 24, "character": 28}, "end": {"line": 24, "character": 29}},
3030
"newText": "y"
3131
}, {
32-
"range": {"start": {"line": 24, "character": 28}, "end": {"line": 24, "character": 29}},
32+
"range": {"start": {"line": 21, "character": 28}, "end": {"line": 21, "character": 29}},
3333
"newText": "y"
3434
}]
3535
}

analysis/tests/src/expected/RenameWithInterface.resi.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,10 @@ Rename tests/src/RenameWithInterface.resi 0:4 y
2626
"uri": "Cross.res"
2727
},
2828
"edits": [{
29-
"range": {"start": {"line": 21, "character": 28}, "end": {"line": 21, "character": 29}},
29+
"range": {"start": {"line": 24, "character": 28}, "end": {"line": 24, "character": 29}},
3030
"newText": "y"
3131
}, {
32-
"range": {"start": {"line": 24, "character": 28}, "end": {"line": 24, "character": 29}},
32+
"range": {"start": {"line": 21, "character": 28}, "end": {"line": 21, "character": 29}},
3333
"newText": "y"
3434
}]
3535
}

0 commit comments

Comments
 (0)