3
3
type kind =
4
4
| Module
5
5
| Property
6
+ | Constructor
6
7
| Function
7
8
| Variable
8
9
| Constant
@@ -14,6 +15,7 @@ type kind =
14
15
let kindNumber = function
15
16
| Module -> 2
16
17
| Property -> 7
18
+ | Constructor -> 9
17
19
| Function -> 12
18
20
| Variable -> 13
19
21
| Constant -> 14
@@ -59,6 +61,9 @@ let command ~path =
59
61
let processModuleDeclaration (md : Parsetree.module_declaration ) =
60
62
symbols := (md.pmd_name.txt, md.pmd_loc, Module ) :: ! symbols
61
63
in
64
+ let processExtensionConstructor (et : Parsetree.extension_constructor ) =
65
+ symbols := (et.pext_name.txt, et.pext_loc, Constructor ) :: ! symbols
66
+ in
62
67
let value_binding (iterator : Ast_iterator.iterator )
63
68
(vb : Parsetree.value_binding ) =
64
69
(match vb.pvb_pat.ppat_desc with
@@ -73,6 +78,7 @@ let command ~path =
73
78
symbols :=
74
79
(txt, {e.pexp_loc with loc_end = modExpr.pmod_loc.loc_end}, Module )
75
80
:: ! symbols
81
+ | Pexp_letexception (ec , _ ) -> processExtensionConstructor ec
76
82
| _ -> () );
77
83
Ast_iterator. default_iterator.expr iterator e
78
84
in
@@ -84,6 +90,7 @@ let command ~path =
84
90
| Pstr_type (_ , typDecls ) -> typDecls |> List. iter processTypeDeclaration
85
91
| Pstr_module mb -> processModuleBinding mb
86
92
| Pstr_recmodule mbs -> mbs |> List. iter processModuleBinding
93
+ | Pstr_exception ec -> processExtensionConstructor ec
87
94
| _ -> Ast_iterator. default_iterator.structure_item iterator item);
88
95
Ast_iterator. default_iterator.structure_item iterator item
89
96
in
@@ -94,6 +101,7 @@ let command ~path =
94
101
| Psig_type (_ , typDecls ) -> typDecls |> List. iter processTypeDeclaration
95
102
| Psig_module md -> processModuleDeclaration md
96
103
| Psig_recmodule mds -> mds |> List. iter processModuleDeclaration
104
+ | Psig_exception ec -> processExtensionConstructor ec
97
105
| _ -> () );
98
106
Ast_iterator. default_iterator.signature_item iterator item
99
107
in
0 commit comments