@@ -104,33 +104,34 @@ let rec forTypeSignatureItem ~(env : SharedTypes.Env.t) ~(exported : Exported.t)
104
104
in
105
105
[{Module. kind = Type (declared.item, recStatus); name = declared.name.txt}]
106
106
| Sig_module (ident , {md_type; md_attributes; md_loc} , _ ) ->
107
+ let name = Ident. name ident in
107
108
let declared =
108
109
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)
111
112
~stamp: (Ident. binding_time ident) ~env md_attributes
112
113
(Exported. add exported Exported. Module )
113
114
Stamps. addModule
114
115
in
115
116
[{Module. kind = Module declared.item; name = declared.name.txt}]
116
117
| _ -> []
117
118
118
- and forTypeSignature env signature =
119
+ and forTypeSignature ~ name ~ env signature =
119
120
let exported = Exported. init () in
120
121
let items =
121
122
List. fold_right
122
123
(fun item items -> forTypeSignatureItem ~env ~exported item @ items)
123
124
signature []
124
125
in
125
- {Module. docstring = [] ; exported; items}
126
+ {Module. name; docstring = [] ; exported; items}
126
127
127
- and forTypeModule env moduleType =
128
+ and forTypeModule ~ name ~ env moduleType =
128
129
match moduleType with
129
130
| Types. Mty_ident path -> Ident path
130
131
| Mty_alias (_ (* 402 *) , path ) -> Ident path
131
- | Mty_signature signature -> Structure (forTypeSignature env signature)
132
+ | Mty_signature signature -> Structure (forTypeSignature ~name ~ env signature)
132
133
| Mty_functor (_argIdent , _argType , resultType ) ->
133
- forTypeModule env resultType
134
+ forTypeModule ~name ~ env resultType
134
135
135
136
let getModuleTypePath mod_desc =
136
137
match mod_desc with
@@ -249,7 +250,11 @@ let rec forSignatureItem ~env ~(exported : Exported.t)
249
250
decl |> forTypeDeclaration ~env ~exported ~rec Status)
250
251
| Tsig_module
251
252
{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
253
258
let declared =
254
259
addDeclared ~item ~name ~extent: md_loc ~stamp: (Ident. binding_time md_id)
255
260
~env md_attributes
@@ -279,7 +284,7 @@ let rec forSignatureItem ~env ~(exported : Exported.t)
279
284
(* TODO: process other things here *)
280
285
| _ -> []
281
286
282
- let forSignature ~env sigItems =
287
+ let forSignature ~name ~ env sigItems =
283
288
let exported = Exported. init () in
284
289
let items =
285
290
sigItems |> List. map (forSignatureItem ~env ~exported ) |> List. flatten
@@ -294,13 +299,13 @@ let forSignature ~env sigItems =
294
299
| None -> []
295
300
| Some d -> [d]
296
301
in
297
- {Module. docstring; exported; items}
302
+ {Module. name; docstring; exported; items}
298
303
299
- let forTreeModuleType ~env {Typedtree. mty_desc} =
304
+ let forTreeModuleType ~name ~ env {Typedtree. mty_desc} =
300
305
match mty_desc with
301
306
| Tmty_ident _ -> None
302
307
| Tmty_signature {sig_items} ->
303
- let contents = forSignature ~env sig_items in
308
+ let contents = forSignature ~name ~ env sig_items in
304
309
Some (Module. Structure contents)
305
310
| _ -> None
306
311
@@ -352,7 +357,7 @@ let rec forStructureItem ~env ~(exported : Exported.t) item =
352
357
(String. length name.txt > = 6
353
358
&& (String. sub name.txt 0 6 = " local_" ) [@ doesNotRaise])
354
359
(* %%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
356
361
let declared =
357
362
addDeclared ~item ~name ~extent: mb_loc ~stamp: (Ident. binding_time mb_id)
358
363
~env mb_attributes
@@ -375,7 +380,7 @@ let rec forStructureItem ~env ~(exported : Exported.t) item =
375
380
mtd_loc;
376
381
} ->
377
382
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
379
384
let declared =
380
385
addDeclared ~item: modTypeItem ~name ~extent: mtd_loc
381
386
~stamp: (Ident. binding_time mtd_id)
@@ -418,18 +423,18 @@ let rec forStructureItem ~env ~(exported : Exported.t) item =
418
423
decl |> forTypeDeclaration ~env ~exported ~rec Status)
419
424
| _ -> []
420
425
421
- and forModule env mod_desc moduleName =
426
+ and forModule ~ env mod_desc moduleName =
422
427
match mod_desc with
423
428
| Tmod_ident (path , _lident ) -> Ident path
424
429
| Tmod_structure structure ->
425
430
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
427
432
Structure contents
428
433
| Tmod_functor (ident , argName , maybeType , resultExpr ) ->
429
434
(match maybeType with
430
435
| None -> ()
431
436
| Some t -> (
432
- match forTreeModuleType ~env t with
437
+ match forTreeModuleType ~name: argName.txt ~ env t with
433
438
| None -> ()
434
439
| Some kind ->
435
440
let stamp = Ident. binding_time ident in
@@ -438,20 +443,20 @@ and forModule env mod_desc moduleName =
438
443
~extent: t.Typedtree. mty_loc ~stamp ~module Path:NotVisible false []
439
444
in
440
445
Stamps. addModule env.stamps stamp declared));
441
- forModule env resultExpr.mod_desc moduleName
446
+ forModule ~ env resultExpr.mod_desc moduleName
442
447
| Tmod_apply (functor_ , _arg , _coercion ) ->
443
- forModule env functor_.mod_desc moduleName
448
+ forModule ~ env functor_.mod_desc moduleName
444
449
| Tmod_unpack (_expr , moduleType ) ->
445
450
let env = env |> Env. addModule ~name: moduleName in
446
- forTypeModule env moduleType
451
+ forTypeModule ~name: moduleName ~ env moduleType
447
452
| Tmod_constraint (expr , typ , _constraint , _coercion ) ->
448
453
(* 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
450
455
let env = env |> Env. addModule ~name: moduleName in
451
- let modTypeKind = forTypeModule env typ in
456
+ let modTypeKind = forTypeModule ~name: moduleName ~ env typ in
452
457
Constraint (modKind, modTypeKind)
453
458
454
- and forStructure ~env strItems =
459
+ and forStructure ~name ~ env strItems =
455
460
let exported = Exported. init () in
456
461
let items =
457
462
List. fold_right
@@ -468,7 +473,7 @@ and forStructure ~env strItems =
468
473
| None -> []
469
474
| Some d -> [d]
470
475
in
471
- {docstring; exported; items}
476
+ {Module. name; docstring; exported; items}
472
477
473
478
let fileForCmtInfos ~moduleName ~uri
474
479
({cmt_modname; cmt_annots} : Cmt_format.cmt_infos ) =
@@ -486,7 +491,7 @@ let fileForCmtInfos ~moduleName ~uri
486
491
| _ -> None )
487
492
|> List. concat
488
493
in
489
- let structure = forStructure ~env items in
494
+ let structure = forStructure ~name: moduleName ~ env items in
490
495
{File. uri; moduleName = cmt_modname; stamps = env.stamps; structure}
491
496
| Partial_interface parts ->
492
497
let items =
@@ -498,13 +503,13 @@ let fileForCmtInfos ~moduleName ~uri
498
503
| _ -> None )
499
504
|> List. concat
500
505
in
501
- let structure = forSignature ~env items in
506
+ let structure = forSignature ~name: moduleName ~ env items in
502
507
{uri; moduleName = cmt_modname; stamps = env.stamps; structure}
503
508
| Implementation structure ->
504
- let structure = forStructure ~env structure.str_items in
509
+ let structure = forStructure ~name: moduleName ~ env structure.str_items in
505
510
{uri; moduleName = cmt_modname; stamps = env.stamps; structure}
506
511
| Interface signature ->
507
- let structure = forSignature ~env signature.sig_items in
512
+ let structure = forSignature ~name: moduleName ~ env signature.sig_items in
508
513
{uri; moduleName = cmt_modname; stamps = env.stamps; structure}
509
514
| _ -> File. create moduleName uri
510
515
0 commit comments