@@ -181,8 +181,26 @@ let type_lookup_to_class_signature_lookup =
181181 |> of_option ~error: (`Parent (`Parent_type `OpaqueClass ))
182182 >> = resolved p'
183183
184- module M = struct
185- (* * Module *)
184+ module rec M
185+ : sig
186+ type t = module_lookup_result
187+
188+ val of_component : Env .t -> Component.Module .t -> Cpath.Resolved .module_ -> Resolved.Module .t -> t
189+
190+ val in_signature : Env .t -> signature_lookup_result ->
191+ ModuleName .t ->
192+ (t , Errors.Tools_error .reference_lookup_error ) result
193+
194+ val of_element : Env .t -> Component.Element .module_ -> t
195+
196+ val in_env : Env .t -> string -> (t , Errors.Tools_error .reference_lookup_error ) result
197+
198+ val in_env_by_id : Env .t -> Identifier.Module .t -> (t , Errors.Tools_error .reference_lookup_error ) result
199+ end
200+
201+ =
202+
203+ struct (* * Module *)
186204
187205 type t = module_lookup_result
188206
@@ -225,56 +243,37 @@ module M = struct
225243 (`Parent
226244 (`Parent_module (`Lookup_failure_root (ModuleName. make_std name))))
227245
228- let rec in_env_by_id env id =
246+ let rec in_env_by_id env ( id : Identifier.Module.t ) =
229247 match Env. lookup_by_id Env. s_module id env with
230248 | Some e -> Ok (of_element env e)
231249 | None -> match id.iv with
232- | `Module (p , name ) ->
250+ | `Module ({ Identifier. iv = # Identifier.Module. t_pv ; _} as p , name ) ->
233251 in_env_by_id env p >> =
234252 module_lookup_to_signature_lookup env >> =
235253 fun x -> in_signature env x name
236- | _ -> Error
237- (`Parent
238- (`Parent_module (`Lookup_failure_root (ModuleName. make_std (Identifier. name id)))))
239- end
240-
241- module Path = struct
242- (* let first_seg (`Root (s, _) | `Slash (_, s)) = s *)
243-
244- let mk_lookup_error (tag , path ) = Error (`Path_error (`Not_found , tag, path))
245-
246- let handle_lookup_error p = function
247- | Ok _ as ok -> ok
248- | Error `Not_found -> mk_lookup_error p
254+ | `Module ({ Identifier. iv = #Identifier.ModuleType. t_pv ; _} as p , name ) ->
255+ MT. in_env_by_id env p >> =
256+ module_type_lookup_to_signature_lookup env >> =
257+ fun x -> in_signature env x name
258+ | `Module ({ Identifier. iv = `Result _; _}, _)
259+ | `Parameter (_, _)
260+ | `Root _ -> Error (`Lookup_by_id (id :> Identifier.t ))
261+ end and
262+
263+ MT : sig
264+ type t = module_type_lookup_result
249265
250- let page_in_env env p : page_lookup_result ref_result =
251- Env. lookup_page_by_path p env |> handle_lookup_error p >> = fun p ->
252- Ok (`Identifier p.name, p)
266+ val of_element : Env .t -> Component.Element .module_type -> t
253267
254- let asset_in_env env p : asset_lookup_result ref_result =
255- Env. lookup_asset_by_path p env |> handle_lookup_error p >> = fun p ->
256- Ok (`Identifier p.name)
268+ val of_component : Env .t -> Component.ModuleType .t -> Cpath.Resolved .module_type -> Resolved.ModuleType .t -> t
257269
258- let module_in_env env p : module_lookup_result ref_result =
259- Env. lookup_unit_by_path p env |> handle_lookup_error p >> = fun m ->
260- Ok ( M. of_element env m)
270+ val in_signature : Env .t -> signature_lookup_result -> ModuleTypeName .t -> ( t , Errors.Tools_error .reference_lookup_error ) result
271+
272+ val in_env : Env .t -> string -> ( t , Errors.Tools_error .reference_lookup_error ) result
261273
262- let any_in_env env p : any_path_lookup_result ref_result =
263- (* TODO: Resolve modules *)
264- let page_result = page_in_env env p in
265- let module_result = module_in_env env p in
266- match (page_result, module_result) with
267- | Ok page , Error _ -> Ok (`P page)
268- | Error _ , Ok m ->
269- module_lookup_to_signature_lookup env m >> = fun s -> Ok (`S s)
270- | Ok page , Ok _ ->
271- let name = List. last (snd p) in
272- ambiguous_generic_ref_warning name [ " module" ; " page" ];
273- Ok (`P page)
274- | Error _ , Error _ -> mk_lookup_error p
275- end
274+ val in_env_by_id : Env .t -> Identifier.ModuleType .t -> (t , Errors.Tools_error .reference_lookup_error ) result
276275
277- module MT = struct
276+ end = struct
278277 (* * Module type *)
279278
280279 type t = module_type_lookup_result
@@ -304,20 +303,60 @@ module MT = struct
304303 env_lookup_by_name Env. s_module_type name env >> = fun e ->
305304 Ok (of_element env e)
306305
307- let in_env_by_id env id =
306+ let rec in_env_by_id env id =
308307 match Env. lookup_by_id Env. s_module_type id env with
309308 | Some e -> Ok (of_element env e)
310309 | None -> match id.iv with
311- | `ModuleType (p , name ) ->
310+ | `ModuleType ({ Identifier. iv = # Identifier.Module. t_pv ; _} as p , name ) ->
312311 M. in_env_by_id env p >> =
313312 module_lookup_to_signature_lookup env >> =
314313 fun x -> in_signature env x name
315- | _ -> Error
316- (`Parent
317- (`Parent_module (`Lookup_failure_root (ModuleName. make_std (Identifier. name id)))))
314+ | `ModuleType ({ Identifier. iv = #Identifier.ModuleType. t_pv ; _} as p , name ) ->
315+ in_env_by_id env p >> =
316+ module_type_lookup_to_signature_lookup env >> =
317+ fun x -> in_signature env x name
318+ | `ModuleType ({ Identifier. iv = `Result _ ; _} , _ ) ->
319+ Error (`Lookup_by_id (id :> Identifier.t ))
318320
319321end
320322
323+ module Path = struct
324+ (* let first_seg (`Root (s, _) | `Slash (_, s)) = s *)
325+
326+ let mk_lookup_error (tag , path ) = Error (`Path_error (`Not_found , tag, path))
327+
328+ let handle_lookup_error p = function
329+ | Ok _ as ok -> ok
330+ | Error `Not_found -> mk_lookup_error p
331+
332+ let page_in_env env p : page_lookup_result ref_result =
333+ Env. lookup_page_by_path p env |> handle_lookup_error p >> = fun p ->
334+ Ok (`Identifier p.name, p)
335+
336+ let asset_in_env env p : asset_lookup_result ref_result =
337+ Env. lookup_asset_by_path p env |> handle_lookup_error p >> = fun p ->
338+ Ok (`Identifier p.name)
339+
340+ let module_in_env env p : module_lookup_result ref_result =
341+ Env. lookup_unit_by_path p env |> handle_lookup_error p >> = fun m ->
342+ Ok (M. of_element env m)
343+
344+ let any_in_env env p : any_path_lookup_result ref_result =
345+ (* TODO: Resolve modules *)
346+ let page_result = page_in_env env p in
347+ let module_result = module_in_env env p in
348+ match (page_result, module_result) with
349+ | Ok page , Error _ -> Ok (`P page)
350+ | Error _ , Ok m ->
351+ module_lookup_to_signature_lookup env m >> = fun s -> Ok (`S s)
352+ | Ok page , Ok _ ->
353+ let name = List. last (snd p) in
354+ ambiguous_generic_ref_warning name [ " module" ; " page" ];
355+ Ok (`P page)
356+ | Error _ , Error _ -> mk_lookup_error p
357+ end
358+
359+
321360module CL = struct
322361 (* * Class *)
323362
0 commit comments