@@ -104,33 +104,34 @@ let rec forTypeSignatureItem ~(env : SharedTypes.Env.t) ~(exported : Exported.t)
104104 in
105105 [{Module. kind = Type (declared.item, recStatus); name = declared.name.txt}]
106106 | Sig_module (ident , {md_type; md_attributes; md_loc} , _ ) ->
107+ let name = Ident. name ident in
107108 let declared =
108109 addDeclared ~extent: md_loc
109- ~item: (forTypeModule env md_type)
110- ~name: (Location. mkloc ( Ident. name ident) md_loc)
110+ ~item: (forTypeModule ~name ~ env md_type)
111+ ~name: (Location. mkloc name md_loc)
111112 ~stamp: (Ident. binding_time ident) ~env md_attributes
112113 (Exported. add exported Exported. Module )
113114 Stamps. addModule
114115 in
115116 [{Module. kind = Module declared.item; name = declared.name.txt}]
116117 | _ -> []
117118
118- and forTypeSignature env signature =
119+ and forTypeSignature ~ name ~ env signature =
119120 let exported = Exported. init () in
120121 let items =
121122 List. fold_right
122123 (fun item items -> forTypeSignatureItem ~env ~exported item @ items)
123124 signature []
124125 in
125- {Module. docstring = [] ; exported; items}
126+ {Module. name; docstring = [] ; exported; items}
126127
127- and forTypeModule env moduleType =
128+ and forTypeModule ~ name ~ env moduleType =
128129 match moduleType with
129130 | Types. Mty_ident path -> Ident path
130131 | Mty_alias (_ (* 402 *) , path ) -> Ident path
131- | Mty_signature signature -> Structure (forTypeSignature env signature)
132+ | Mty_signature signature -> Structure (forTypeSignature ~name ~ env signature)
132133 | Mty_functor (_argIdent , _argType , resultType ) ->
133- forTypeModule env resultType
134+ forTypeModule ~name ~ env resultType
134135
135136let getModuleTypePath mod_desc =
136137 match mod_desc with
@@ -249,7 +250,11 @@ let rec forSignatureItem ~env ~(exported : Exported.t)
249250 decl |> forTypeDeclaration ~env ~exported ~rec Status)
250251 | Tsig_module
251252 {md_id; md_attributes; md_loc; md_name = name; md_type = {mty_type}} ->
252- let item = forTypeModule (env |> Env. addModule ~name: name.txt) mty_type in
253+ let item =
254+ forTypeModule ~name: name.txt
255+ ~env: (env |> Env. addModule ~name: name.txt)
256+ mty_type
257+ in
253258 let declared =
254259 addDeclared ~item ~name ~extent: md_loc ~stamp: (Ident. binding_time md_id)
255260 ~env md_attributes
@@ -279,7 +284,7 @@ let rec forSignatureItem ~env ~(exported : Exported.t)
279284 (* TODO: process other things here *)
280285 | _ -> []
281286
282- let forSignature ~env sigItems =
287+ let forSignature ~name ~ env sigItems =
283288 let exported = Exported. init () in
284289 let items =
285290 sigItems |> List. map (forSignatureItem ~env ~exported ) |> List. flatten
@@ -294,13 +299,13 @@ let forSignature ~env sigItems =
294299 | None -> []
295300 | Some d -> [d]
296301 in
297- {Module. docstring; exported; items}
302+ {Module. name; docstring; exported; items}
298303
299- let forTreeModuleType ~env {Typedtree. mty_desc} =
304+ let forTreeModuleType ~name ~ env {Typedtree. mty_desc} =
300305 match mty_desc with
301306 | Tmty_ident _ -> None
302307 | Tmty_signature {sig_items} ->
303- let contents = forSignature ~env sig_items in
308+ let contents = forSignature ~name ~ env sig_items in
304309 Some (Module. Structure contents)
305310 | _ -> None
306311
@@ -352,7 +357,7 @@ let rec forStructureItem ~env ~(exported : Exported.t) item =
352357 (String. length name.txt > = 6
353358 && (String. sub name.txt 0 6 = " local_" ) [@ doesNotRaise])
354359 (* %%private generates a dummy module called local_... *) ->
355- let item = forModule env mod_desc name.txt in
360+ let item = forModule ~ env mod_desc name.txt in
356361 let declared =
357362 addDeclared ~item ~name ~extent: mb_loc ~stamp: (Ident. binding_time mb_id)
358363 ~env mb_attributes
@@ -375,7 +380,7 @@ let rec forStructureItem ~env ~(exported : Exported.t) item =
375380 mtd_loc;
376381 } ->
377382 let env = env |> Env. addModuleType ~name: name.txt in
378- let modTypeItem = forTypeModule env modType in
383+ let modTypeItem = forTypeModule ~name: name.txt ~ env modType in
379384 let declared =
380385 addDeclared ~item: modTypeItem ~name ~extent: mtd_loc
381386 ~stamp: (Ident. binding_time mtd_id)
@@ -418,18 +423,18 @@ let rec forStructureItem ~env ~(exported : Exported.t) item =
418423 decl |> forTypeDeclaration ~env ~exported ~rec Status)
419424 | _ -> []
420425
421- and forModule env mod_desc moduleName =
426+ and forModule ~ env mod_desc moduleName =
422427 match mod_desc with
423428 | Tmod_ident (path , _lident ) -> Ident path
424429 | Tmod_structure structure ->
425430 let env = env |> Env. addModule ~name: moduleName in
426- let contents = forStructure ~env structure.str_items in
431+ let contents = forStructure ~name: moduleName ~ env structure.str_items in
427432 Structure contents
428433 | Tmod_functor (ident , argName , maybeType , resultExpr ) ->
429434 (match maybeType with
430435 | None -> ()
431436 | Some t -> (
432- match forTreeModuleType ~env t with
437+ match forTreeModuleType ~name: argName.txt ~ env t with
433438 | None -> ()
434439 | Some kind ->
435440 let stamp = Ident. binding_time ident in
@@ -438,20 +443,20 @@ and forModule env mod_desc moduleName =
438443 ~extent: t.Typedtree. mty_loc ~stamp ~module Path:NotVisible false []
439444 in
440445 Stamps. addModule env.stamps stamp declared));
441- forModule env resultExpr.mod_desc moduleName
446+ forModule ~ env resultExpr.mod_desc moduleName
442447 | Tmod_apply (functor_ , _arg , _coercion ) ->
443- forModule env functor_.mod_desc moduleName
448+ forModule ~ env functor_.mod_desc moduleName
444449 | Tmod_unpack (_expr , moduleType ) ->
445450 let env = env |> Env. addModule ~name: moduleName in
446- forTypeModule env moduleType
451+ forTypeModule ~name: moduleName ~ env moduleType
447452 | Tmod_constraint (expr , typ , _constraint , _coercion ) ->
448453 (* TODO do this better I think *)
449- let modKind = forModule env expr.mod_desc moduleName in
454+ let modKind = forModule ~ env expr.mod_desc moduleName in
450455 let env = env |> Env. addModule ~name: moduleName in
451- let modTypeKind = forTypeModule env typ in
456+ let modTypeKind = forTypeModule ~name: moduleName ~ env typ in
452457 Constraint (modKind, modTypeKind)
453458
454- and forStructure ~env strItems =
459+ and forStructure ~name ~ env strItems =
455460 let exported = Exported. init () in
456461 let items =
457462 List. fold_right
@@ -468,7 +473,7 @@ and forStructure ~env strItems =
468473 | None -> []
469474 | Some d -> [d]
470475 in
471- {docstring; exported; items}
476+ {Module. name; docstring; exported; items}
472477
473478let fileForCmtInfos ~moduleName ~uri
474479 ({cmt_modname; cmt_annots} : Cmt_format.cmt_infos ) =
@@ -486,7 +491,7 @@ let fileForCmtInfos ~moduleName ~uri
486491 | _ -> None )
487492 |> List. concat
488493 in
489- let structure = forStructure ~env items in
494+ let structure = forStructure ~name: moduleName ~ env items in
490495 {File. uri; moduleName = cmt_modname; stamps = env.stamps; structure}
491496 | Partial_interface parts ->
492497 let items =
@@ -498,13 +503,13 @@ let fileForCmtInfos ~moduleName ~uri
498503 | _ -> None )
499504 |> List. concat
500505 in
501- let structure = forSignature ~env items in
506+ let structure = forSignature ~name: moduleName ~ env items in
502507 {uri; moduleName = cmt_modname; stamps = env.stamps; structure}
503508 | Implementation structure ->
504- let structure = forStructure ~env structure.str_items in
509+ let structure = forStructure ~name: moduleName ~ env structure.str_items in
505510 {uri; moduleName = cmt_modname; stamps = env.stamps; structure}
506511 | Interface signature ->
507- let structure = forSignature ~env signature.sig_items in
512+ let structure = forSignature ~name: moduleName ~ env signature.sig_items in
508513 {uri; moduleName = cmt_modname; stamps = env.stamps; structure}
509514 | _ -> File. create moduleName uri
510515
0 commit comments