From 98c88018a55cd616841f9fbfbc81caed6bf3d702 Mon Sep 17 00:00:00 2001 From: Cristiano Calcagno Date: Wed, 7 Dec 2022 16:30:38 +0100 Subject: [PATCH 1/2] Fix issue with references to elements defined in an interface file Fixes https://github.com/rescript-lang/rescript-vscode/issues/645 --- CHANGELOG.md | 2 ++ analysis/src/Commands.ml | 8 +++++--- analysis/tests/src/References.res | 11 +++++++++++ analysis/tests/src/expected/References.res.txt | 6 ++++++ 4 files changed, 24 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8970dcacb..6d7711f7b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -39,6 +39,8 @@ - Fix issue where code analysis would not track types in inner modules across implementations and interfaces https://github.com/rescript-association/reanalyze/issues/186 +- Fix issue with references to elements defined in an interface file https://github.com/rescript-lang/rescript-vscode/issues/645 + ## v1.8.2 #### :rocket: New Feature diff --git a/analysis/src/Commands.ml b/analysis/src/Commands.ml index 756c6fb43..7baa0892e 100644 --- a/analysis/src/Commands.ml +++ b/analysis/src/Commands.ml @@ -172,9 +172,11 @@ let references ~path ~pos ~debug = | Some loc -> loc | None -> Uri.toTopLevelLoc uri2 in - Protocol.stringifyLocation - {uri = Uri.toString uri2; range = Utils.cmtLocToRange loc} - :: acc) + if loc.loc_ghost then acc + else + Protocol.stringifyLocation + {uri = Uri.toString uri2; range = Utils.cmtLocToRange loc} + :: acc) []) in print_endline diff --git a/analysis/tests/src/References.res b/analysis/tests/src/References.res index 6ef69c6ab..959a7b235 100644 --- a/analysis/tests/src/References.res +++ b/analysis/tests/src/References.res @@ -9,3 +9,14 @@ let c = x let foo = (~xx) => xx + 1 // ^ref + +module M: { + let aa: int +} = { + let aa = 10 +} + +let bb = M.aa +let cc = bb +let dd = M.aa +// ^ref \ No newline at end of file diff --git a/analysis/tests/src/expected/References.res.txt b/analysis/tests/src/expected/References.res.txt index 64c02fb92..694e5655e 100644 --- a/analysis/tests/src/expected/References.res.txt +++ b/analysis/tests/src/expected/References.res.txt @@ -14,3 +14,9 @@ References src/References.res 9:19 {"uri": "References.res", "range": {"start": {"line": 9, "character": 19}, "end": {"line": 9, "character": 21}}} ] +References src/References.res 20:12 +[ +{"uri": "References.res", "range": {"start": {"line": 18, "character": 11}, "end": {"line": 18, "character": 13}}}, +{"uri": "References.res", "range": {"start": {"line": 20, "character": 11}, "end": {"line": 20, "character": 13}}} +] + From 39494962b24e14f70b5e6e6c465e5da20aef6c34 Mon Sep 17 00:00:00 2001 From: Cristiano Calcagno Date: Tue, 13 Dec 2022 15:01:50 +0100 Subject: [PATCH 2/2] Proper fix that avoids introducing references to ghost locations. This also finds as reference the value defined in the interface. --- CHANGELOG.md | 2 +- analysis/src/Commands.ml | 8 +++----- analysis/src/ProcessCmt.ml | 4 ++-- analysis/tests/src/expected/Hover.res.txt | 2 ++ analysis/tests/src/expected/References.res.txt | 1 + 5 files changed, 9 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6d7711f7b..d972b6fbb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -39,7 +39,7 @@ - Fix issue where code analysis would not track types in inner modules across implementations and interfaces https://github.com/rescript-association/reanalyze/issues/186 -- Fix issue with references to elements defined in an interface file https://github.com/rescript-lang/rescript-vscode/issues/645 +- Fix issue with references to elements defined in an interface file https://github.com/rescript-lang/rescript-vscode/pull/646 ## v1.8.2 diff --git a/analysis/src/Commands.ml b/analysis/src/Commands.ml index 7baa0892e..756c6fb43 100644 --- a/analysis/src/Commands.ml +++ b/analysis/src/Commands.ml @@ -172,11 +172,9 @@ let references ~path ~pos ~debug = | Some loc -> loc | None -> Uri.toTopLevelLoc uri2 in - if loc.loc_ghost then acc - else - Protocol.stringifyLocation - {uri = Uri.toString uri2; range = Utils.cmtLocToRange loc} - :: acc) + Protocol.stringifyLocation + {uri = Uri.toString uri2; range = Utils.cmtLocToRange loc} + :: acc) []) in print_endline diff --git a/analysis/src/ProcessCmt.ml b/analysis/src/ProcessCmt.ml index 9cee20165..2318f148f 100644 --- a/analysis/src/ProcessCmt.ml +++ b/analysis/src/ProcessCmt.ml @@ -19,7 +19,7 @@ let rec forTypeSignatureItem ~(env : SharedTypes.Env.t) ~(exported : Exported.t) let oldDeclared = Stamps.findValue env.stamps stamp in let declared = addDeclared - ~name:(Location.mknoloc (Ident.name ident)) + ~name:(Location.mkloc (Ident.name ident) loc) ~extent:loc ~stamp ~env ~item val_attributes (Exported.add exported Exported.Value) Stamps.addValue @@ -107,7 +107,7 @@ let rec forTypeSignatureItem ~(env : SharedTypes.Env.t) ~(exported : Exported.t) let declared = addDeclared ~extent:md_loc ~item:(forTypeModule env md_type) - ~name:(Location.mknoloc (Ident.name ident)) + ~name:(Location.mkloc (Ident.name ident) md_loc) ~stamp:(Ident.binding_time ident) ~env md_attributes (Exported.add exported Exported.Module) Stamps.addModule diff --git a/analysis/tests/src/expected/Hover.res.txt b/analysis/tests/src/expected/Hover.res.txt index 3eb902317..b1a12b118 100644 --- a/analysis/tests/src/expected/Hover.res.txt +++ b/analysis/tests/src/expected/Hover.res.txt @@ -14,6 +14,8 @@ Hover src/Hover.res 22:11 {"contents": {"kind": "markdown", "value": "```rescript\nint => int\n```\n\nSome doc comment"}} Hover src/Hover.res 26:6 +getLocItem #8: heuristic for JSX with at most one child +heuristic for: [makeProps, make, createElement], give the loc of `make` {"contents": {"kind": "markdown", "value": "```rescript\nint\n```"}} Hover src/Hover.res 33:4 diff --git a/analysis/tests/src/expected/References.res.txt b/analysis/tests/src/expected/References.res.txt index 694e5655e..ceaaeafb0 100644 --- a/analysis/tests/src/expected/References.res.txt +++ b/analysis/tests/src/expected/References.res.txt @@ -16,6 +16,7 @@ References src/References.res 9:19 References src/References.res 20:12 [ +{"uri": "References.res", "range": {"start": {"line": 13, "character": 2}, "end": {"line": 13, "character": 13}}}, {"uri": "References.res", "range": {"start": {"line": 18, "character": 11}, "end": {"line": 18, "character": 13}}}, {"uri": "References.res", "range": {"start": {"line": 20, "character": 11}, "end": {"line": 20, "character": 13}}} ]