File tree 3 files changed +17
-3
lines changed
3 files changed +17
-3
lines changed Original file line number Diff line number Diff line change @@ -164,3 +164,12 @@ let newHover ~full:{SharedTypes.file; package} locItem =
164
164
typeString :: docstring)
165
165
in
166
166
Some (String. concat " \n\n " parts)
167
+
168
+
169
+ module A = struct end
170
+
171
+ module B = A
172
+
173
+ module C = B
174
+
175
+ module D = C
Original file line number Diff line number Diff line change @@ -193,11 +193,13 @@ let alternateDeclared ~(file : File.t) ~package declared tip =
193
193
| Some declared -> Some (file, extra, declared)))
194
194
| _ -> None )
195
195
196
- let rec resolveModuleReference ~file ~package (declared : moduleKind declared ) =
196
+ let rec resolveModuleReference ?(pathsSeen = [] ) ~file ~package
197
+ (declared : moduleKind declared ) =
197
198
match declared.item with
198
199
| Structure _ -> Some (file, Some declared)
199
200
| Constraint (_moduleItem , moduleTypeItem ) ->
200
- resolveModuleReference ~file ~package {declared with item = moduleTypeItem}
201
+ resolveModuleReference ~paths Seen ~file ~package
202
+ {declared with item = moduleTypeItem}
201
203
| Ident path -> (
202
204
let env = QueryEnv. fromFile file in
203
205
match ProcessCmt. fromCompilerPath ~env path with
@@ -226,6 +228,9 @@ let rec resolveModuleReference ~file ~package (declared : moduleKind declared) =
226
228
| `Stamp stamp -> (
227
229
match Hashtbl. find_opt file.stamps.modules stamp with
228
230
| None -> None
231
+ | Some ({item = Ident path } as md ) when not (List. mem path pathsSeen) ->
232
+ (* avoid possible infinite loops *)
233
+ resolveModuleReference ~file ~package ~paths Seen:(path :: pathsSeen) md
229
234
| Some md -> Some (file, Some md))
230
235
| `GlobalMod name -> (
231
236
match ProcessCmt. fileForModule ~package name with
Original file line number Diff line number Diff line change @@ -44,5 +44,5 @@ Hover tests/src/Hover.res 71:7
44
44
{"contents": "```rescript\nmodule A = {\n let x: int\n}\n```"}
45
45
46
46
Hover tests/src/Hover.res 74:7
47
- {"contents": "Unable to resolve module reference A "}
47
+ {"contents": "```rescript\nmodule A = {\n let x: int\n}\n``` "}
48
48
You can’t perform that action at this time.
0 commit comments