@@ -22,7 +22,7 @@ let sigItemsExtent items =
22
22
items |> List. map (fun item -> item.Typedtree. sig_loc) |> locsExtent
23
23
24
24
let addItem ~(name : string Location.loc ) ~extent ~stamp ~(env : Env.t ) ~item
25
- attributes addExported addStamp =
25
+ ?( isTypeAnnotated = false ) attributes addExported addStamp =
26
26
let isExported = addExported name.txt stamp in
27
27
let declared =
28
28
ProcessAttributes. newDeclared ~item
@@ -32,7 +32,8 @@ let addItem ~(name : string Location.loc) ~extent ~stamp ~(env : Env.t) ~item
32
32
loc_end = env.scope.loc_end;
33
33
loc_ghost = false ;
34
34
}
35
- ~extent ~name ~stamp ~module Path:env.modulePath isExported attributes
35
+ ~extent ~name ~stamp ~module Path:env.modulePath ~is Exported
36
+ ~is TypeAnnotated attributes
36
37
in
37
38
addStamp env.stamps stamp declared;
38
39
declared
@@ -45,7 +46,8 @@ let rec forTypeSignatureItem ~env ~(exported : Exported.t)
45
46
let declared =
46
47
addItem
47
48
~name: (Location. mknoloc (Ident. name ident))
48
- ~extent: loc ~stamp: (Ident. binding_time ident) ~env ~item val_attributes
49
+ ~extent: loc ~stamp: (Ident. binding_time ident) ~env ~item
50
+ ~is TypeAnnotated:true val_attributes
49
51
(Exported. add exported Exported. Value )
50
52
Stamps. addValue
51
53
in
@@ -107,7 +109,8 @@ let rec forTypeSignatureItem ~env ~(exported : Exported.t)
107
109
}
108
110
~name: (Location. mknoloc name)
109
111
~stamp (* TODO maybe this needs another child *)
110
- ~module Path:env.modulePath true cd_attributes
112
+ ~module Path:env.modulePath ~is Exported:true
113
+ cd_attributes
111
114
in
112
115
Stamps. addConstructor env.stamps stamp declared;
113
116
item))
@@ -247,7 +250,8 @@ let rec forSignatureItem ~env ~(exported : Exported.t)
247
250
let declared =
248
251
addItem ~name
249
252
~stamp: (Ident. binding_time val_id)
250
- ~extent: val_loc ~item: val_desc.ctyp_type ~env val_attributes
253
+ ~extent: val_loc ~item: val_desc.ctyp_type ~env ~is TypeAnnotated:true
254
+ val_attributes
251
255
(Exported. add exported Exported. Value )
252
256
Stamps. addValue
253
257
in
@@ -341,6 +345,10 @@ let rec getModulePath mod_desc =
341
345
| Tmod_constraint (expr , _typ , _constraint , _coercion ) ->
342
346
getModulePath expr.mod_desc
343
347
348
+ let patIsTypeAnnotated pat =
349
+ pat.pat_extra
350
+ |> List. exists (function Tpat_constraint _ , _ , _ -> true | _ -> false )
351
+
344
352
let rec forStructureItem ~env ~(exported : Exported.t ) item =
345
353
match item.str_desc with
346
354
| Tstr_value (_isRec , bindings ) ->
@@ -352,7 +360,8 @@ let rec forStructureItem ~env ~(exported : Exported.t) item =
352
360
let item = pat.pat_type in
353
361
let declared =
354
362
addItem ~name ~stamp: (Ident. binding_time ident) ~env
355
- ~extent: pat.pat_loc ~item attributes
363
+ ~extent: pat.pat_loc ~item ~is TypeAnnotated:(patIsTypeAnnotated pat)
364
+ attributes
356
365
(Exported. add exported Exported. Value )
357
366
Stamps. addValue
358
367
in
@@ -443,7 +452,7 @@ let rec forStructureItem ~env ~(exported : Exported.t) item =
443
452
let declared =
444
453
addItem ~extent: val_loc ~item: val_type ~name
445
454
~stamp: (Ident. binding_time val_id)
446
- ~env val_attributes
455
+ ~env ~is TypeAnnotated: true val_attributes
447
456
(Exported. add exported Exported. Value )
448
457
Stamps. addValue
449
458
in
@@ -495,7 +504,8 @@ and forModule env mod_desc moduleName =
495
504
loc_end = env.scope.loc_end;
496
505
loc_ghost = false ;
497
506
}
498
- ~extent: t.Typedtree. mty_loc ~stamp ~module Path:NotVisible false []
507
+ ~extent: t.Typedtree. mty_loc ~stamp ~module Path:NotVisible
508
+ ~is Exported:false []
499
509
in
500
510
Stamps. addModule env.stamps stamp declared));
501
511
forModule env resultExpr.mod_desc moduleName
@@ -629,12 +639,14 @@ let extraForFile ~(file : File.t) =
629
639
in
630
640
file.stamps
631
641
|> Stamps. iterModules (fun stamp (d : Module.t Declared.t ) ->
632
- addLocItem extra d.name.loc (LModule (Definition (stamp, Module )));
642
+ addLocItem extra d.name.loc
643
+ (LModule (Definition (stamp, Module , false )));
633
644
addReference stamp d.name.loc);
634
645
file.stamps
635
646
|> Stamps. iterValues (fun stamp (d : Types.type_expr Declared.t ) ->
636
647
addLocItem extra d.name.loc
637
- (Typed (d.name.txt, d.item, Definition (stamp, Value )));
648
+ (Typed
649
+ (d.name.txt, d.item, Definition (stamp, Value , d.isTypeAnnotated)));
638
650
addReference stamp d.name.loc);
639
651
file.stamps
640
652
|> Stamps. iterTypes (fun stamp (d : Type.t Declared.t ) ->
@@ -648,7 +660,9 @@ let extraForFile ~(file : File.t) =
648
660
addReference stamp fname.loc;
649
661
addLocItem extra fname.loc
650
662
(Typed
651
- (d.name.txt, typ, Definition (d.stamp, Field fname.txt))))
663
+ ( d.name.txt,
664
+ typ,
665
+ Definition (d.stamp, Field fname.txt, false ) )))
652
666
| Variant constructors ->
653
667
constructors
654
668
|> List. iter (fun {Constructor. stamp; cname} ->
@@ -669,7 +683,7 @@ let extraForFile ~(file : File.t) =
669
683
(Typed
670
684
( d.name.txt,
671
685
t,
672
- Definition (d.stamp, Constructor cname.txt) )))
686
+ Definition (d.stamp, Constructor cname.txt, false ) )))
673
687
| _ -> () );
674
688
extra
675
689
@@ -1002,12 +1016,13 @@ struct
1002
1016
loc_start = val_loc.loc_end;
1003
1017
loc_end = (currentScopeExtent () ).loc_end;
1004
1018
}
1005
- ~module Path:NotVisible ~item: val_desc.ctyp_type false val_attributes
1019
+ ~module Path:NotVisible ~item: val_desc.ctyp_type ~is Exported:false
1020
+ ~is TypeAnnotated:true val_attributes
1006
1021
in
1007
1022
Stamps. addValue Collector. file.stamps stamp declared;
1008
1023
addReference stamp name.loc;
1009
1024
addLocItem extra name.loc
1010
- (Typed (name.txt, val_desc.ctyp_type, Definition (stamp, Value ))))
1025
+ (Typed (name.txt, val_desc.ctyp_type, Definition (stamp, Value , true ))))
1011
1026
| _ -> ()
1012
1027
1013
1028
let enter_core_type {ctyp_type; ctyp_desc} =
@@ -1016,7 +1031,7 @@ struct
1016
1031
addForLongident (Some (ctyp_type, Type )) path txt loc
1017
1032
| _ -> ()
1018
1033
1019
- let enter_pattern {pat_desc; pat_loc; pat_type; pat_attributes} =
1034
+ let enter_pattern ( {pat_desc; pat_loc; pat_type; pat_attributes} as pat ) =
1020
1035
let addForPattern stamp name =
1021
1036
if Stamps. findValue Collector. file.stamps stamp = None then (
1022
1037
let declared =
@@ -1027,13 +1042,14 @@ struct
1027
1042
loc_start = pat_loc.loc_end;
1028
1043
loc_end = (currentScopeExtent () ).loc_end;
1029
1044
}
1030
- ~module Path:NotVisible ~extent: pat_loc ~item: pat_type false
1045
+ ~module Path:NotVisible ~extent: pat_loc ~item: pat_type
1046
+ ~is Exported:false ~is TypeAnnotated:(patIsTypeAnnotated pat)
1031
1047
pat_attributes
1032
1048
in
1033
1049
Stamps. addValue Collector. file.stamps stamp declared;
1034
1050
addReference stamp name.loc;
1035
1051
addLocItem extra name.loc
1036
- (Typed (name.txt, pat_type, Definition (stamp, Value ))))
1052
+ (Typed (name.txt, pat_type, Definition (stamp, Value , false ))))
1037
1053
in
1038
1054
(* Log.log("Entering pattern " ++ Utils.showLocation(pat_loc)); *)
1039
1055
match pat_desc with
0 commit comments