Skip to content

Commit a91494f

Browse files
committed
Emit variants as enumMember.
1 parent cc4a0d3 commit a91494f

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

analysis/src/SemanticTokens.ml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,12 @@ let emitRecordLabel ~(label : Longident.t Location.loc) ~debug emitter =
160160
~pos:(Utils.tupleOfLexing label.loc.loc_start)
161161
~lid:label.txt ~debug
162162

163+
let emitVariant ~(name : Longident.t Location.loc) ~debug emitter =
164+
emitter
165+
|> emitLongident ~upperCaseToken:Token.EnumMember
166+
~pos:(Utils.tupleOfLexing name.loc.loc_start)
167+
~lid:name.txt ~debug
168+
163169
let parser ~debug ~emitter ~path =
164170
let processTypeArg (coreType : Parsetree.core_type) =
165171
if debug then Printf.printf "TypeArg: %s\n" (locToString coreType.ptyp_loc)
@@ -189,6 +195,9 @@ let parser ~debug ~emitter ~path =
189195
cases
190196
|> List.iter (fun (label, _) -> emitter |> emitRecordLabel ~label ~debug);
191197
Ast_mapper.default_mapper.pat mapper p
198+
| Ppat_construct (name, _) ->
199+
emitter |> emitVariant ~name ~debug;
200+
Ast_mapper.default_mapper.pat mapper p
192201
| _ -> Ast_mapper.default_mapper.pat mapper p
193202
in
194203
let expr (mapper : Ast_mapper.mapper) (e : Parsetree.expression) =
@@ -241,6 +250,9 @@ let parser ~debug ~emitter ~path =
241250
| Pexp_field (_, label) | Pexp_setfield (_, label, _) ->
242251
emitter |> emitRecordLabel ~label ~debug;
243252
Ast_mapper.default_mapper.expr mapper e
253+
| Pexp_construct (name, _) ->
254+
emitter |> emitVariant ~name ~debug;
255+
Ast_mapper.default_mapper.expr mapper e
244256
| _ -> Ast_mapper.default_mapper.expr mapper e
245257
in
246258
let module_expr (mapper : Ast_mapper.mapper) (me : Parsetree.module_expr) =
@@ -301,10 +313,19 @@ let parser ~debug ~emitter ~path =
301313
~debug;
302314
Ast_mapper.default_mapper.label_declaration mapper ld
303315
in
316+
let constructor_declaration (mapper : Ast_mapper.mapper)
317+
(cd : Parsetree.constructor_declaration) =
318+
emitter
319+
|> emitVariant
320+
~name:{loc = cd.pcd_name.loc; txt = Longident.Lident cd.pcd_name.txt}
321+
~debug;
322+
Ast_mapper.default_mapper.constructor_declaration mapper cd
323+
in
304324

305325
let mapper =
306326
{
307327
Ast_mapper.default_mapper with
328+
constructor_declaration;
308329
expr;
309330
label_declaration;
310331
module_declaration;

analysis/tests/src/expected/Parser.res.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,9 @@ Lident: someOtherField (60,4) Property
6060
Type: string (60,20)->(60,26)
6161
Lident: theParam (61,4) Property
6262
Type: someEnum (64,7)->(64,15)
63+
Lident: A (64,18) EnumMember
64+
Lident: B (64,22) EnumMember
65+
Lident: C (64,26) EnumMember
6366
Ldot: T (67,17) Namespace
6467
Lident: someField (67,19) Property
6568
Lident: x (67,15) Variable

0 commit comments

Comments
 (0)