Skip to content

Commit 027ca4b

Browse files
committed
Update grammar for poly variants, and semantic analysis for types #...someType.
- #foo is marked as enum - space is allowed: # foo - #...foo. is a type
1 parent d9dde12 commit 027ca4b

File tree

4 files changed

+42
-7
lines changed

4 files changed

+42
-7
lines changed

analysis/src/SemanticTokens.ml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,9 @@ let parser ~debug ~emitter ~path =
216216
| Ppat_construct (name, _) ->
217217
emitter |> emitVariant ~name ~debug;
218218
Ast_mapper.default_mapper.pat mapper p
219+
| Ppat_type {txt = lid; loc} ->
220+
emitter |> emitType ~lid ~debug ~loc;
221+
Ast_mapper.default_mapper.pat mapper p
219222
| _ -> Ast_mapper.default_mapper.pat mapper p
220223
in
221224
let expr (mapper : Ast_mapper.mapper) (e : Parsetree.expression) =

analysis/tests/src/Parser.res

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,3 +111,18 @@ let _ = \"true"
111111
let enumInModule = T.A
112112

113113
type typeInModule = XX.YY.t
114+
115+
module QQ = {
116+
type somePolyEnumType = [
117+
| #someMember
118+
| #AnotherMember
119+
| #SomeMemberWithPayload(list<int>)
120+
| #"fourth Member"
121+
]
122+
}
123+
124+
let _ = x =>
125+
switch x {
126+
| #stuff => 3
127+
| #...QQ.somePolyEnumType => 4
128+
}

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
Parse tests/src/Parser.res
2-
structure items:33 diagnostics:0
2+
structure items:35 diagnostics:0
33
Lident: M (0,7) Namespace
44
Lident: C (1,9) Namespace
55
Lident: Component (1,13) Namespace
@@ -130,4 +130,13 @@ Lident: typeInModule (112,5) Type
130130
Ldot: XX (112,20) Namespace
131131
Ldot: YY (112,23) Namespace
132132
Lident: t (112,26) Type
133+
Lident: QQ (114,7) Namespace
134+
Lident: somePolyEnumType (115,7) Type
135+
Lident: list (118,29) Type
136+
TypeArg: (118,34)->(118,37)
137+
Lident: int (118,34) Type
138+
Ldot: QQ (126,8) Namespace
139+
Lident: somePolyEnumType (126,11) Type
140+
Lident: x (124,9) Variable
141+
Variable: x (123,8)->(123,9)
133142

grammars/rescript.tmLanguage.json

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -270,24 +270,32 @@
270270
"name": "variable.function variable.other"
271271
},
272272
{
273-
"match": "(#)(\\.\\.\\.)?([a-zA-Z][0-9a-zA-Z_]*)\\b",
273+
"match": "(#)\\s*([a-zA-Z][0-9a-zA-Z_]*)\\b",
274274
"captures": {
275275
"1": {
276-
"name": "punctuation.definition.keyword"
276+
"name": "variable.other.enummember"
277277
},
278278
"2": {
279-
"name": "punctuation.definition.keyword"
279+
"name": "variable.other.enummember"
280+
}
281+
}
282+
},
283+
{
284+
"match": "(#)\\s*(\\.\\.\\.)\\b",
285+
"captures": {
286+
"1": {
287+
"name": "variable.other.enummember"
280288
},
281-
"3": {
282-
"name": "variable.function variable.other"
289+
"2": {
290+
"name": "variable.other.enummember"
283291
}
284292
}
285293
},
286294
{
287295
"match": "(#)",
288296
"captures": {
289297
"1": {
290-
"name": "punctuation.definition.keyword"
298+
"name": "variable.other.enummember"
291299
}
292300
}
293301
}

0 commit comments

Comments
 (0)