Skip to content

Commit fe0763f

Browse files
committed
Support satisfies operator
1 parent 0ab9d99 commit fe0763f

File tree

10 files changed

+234949
-228424
lines changed

10 files changed

+234949
-228424
lines changed

common/corpus/declarations.txt

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -456,14 +456,17 @@ Type casts
456456
=================================
457457

458458
foo as any as Array<number>
459+
bar satisfies number[]
459460

460461
---
461462

462463
(program
463464
(expression_statement
464-
(as_expression
465-
(as_expression (identifier) (predefined_type))
466-
(generic_type (type_identifier) (type_arguments (predefined_type))))))
465+
(cast_expression
466+
(cast_expression (identifier) (predefined_type))
467+
(generic_type (type_identifier) (type_arguments (predefined_type)))))
468+
(expression_statement
469+
(cast_expression (identifier) (array_type (predefined_type)))))
467470

468471
=================================
469472
Ambient export function declarations

common/corpus/expressions.txt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
==================================
2-
As expressions
2+
Cast expressions
33
==================================
44

55
h as `hello`
66
T as {} & { [t: T]: T }
7-
T as {} & { [t: T]: T } & { [g: G]: G }
7+
T satisfies {} & { [t: T]: T } & { [g: G]: G }
88

99
---
1010

1111
(program
12-
(expression_statement (as_expression (identifier) (template_literal_type)))
12+
(expression_statement (cast_expression (identifier) (template_literal_type)))
1313
(expression_statement
14-
(as_expression
14+
(cast_expression
1515
(identifier)
1616
(intersection_type
1717
(object_type)
@@ -21,7 +21,7 @@ T as {} & { [t: T]: T } & { [g: G]: G }
2121
(type_identifier)
2222
(type_annotation (type_identifier)))))))
2323
(expression_statement
24-
(as_expression
24+
(cast_expression
2525
(identifier)
2626
(intersection_type
2727
(intersection_type

common/define-grammar.js

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ module.exports = function defineGrammar(dialect) {
2020
[
2121
'call',
2222
'unary',
23-
'binary_as',
23+
'binary',
2424
$.await_expression,
2525
$.arrow_function,
2626
],
@@ -29,7 +29,7 @@ module.exports = function defineGrammar(dialect) {
2929
$.union_type,
3030
$.conditional_type,
3131
$.function_type,
32-
'binary_as',
32+
'binary',
3333
$.type_predicate,
3434
$.readonly_type
3535
],
@@ -47,7 +47,7 @@ module.exports = function defineGrammar(dialect) {
4747
[$.type_query, $.subscript_expression, $.expression],
4848
[$.type_query, $._type_query_subscript_expression],
4949
[$.nested_type_identifier, $.generic_type, $._primary_type, $.lookup_type, $.index_type_query, $._type],
50-
[$.as_expression, $._primary_type],
50+
[$.cast_expression, $._primary_type],
5151
[$._type_query_member_expression, $.member_expression],
5252
[$._type_query_member_expression, $.primary_expression],
5353
[$._type_query_subscript_expression, $.subscript_expression],
@@ -207,7 +207,7 @@ module.exports = function defineGrammar(dialect) {
207207
// include type assertions. If the dialect is TSX, we do the opposite.
208208
expression: ($, previous) => {
209209
const choices = [
210-
$.as_expression,
210+
$.cast_expression,
211211
$.internal_module,
212212
];
213213

@@ -403,10 +403,10 @@ module.exports = function defineGrammar(dialect) {
403403
$.expression
404404
)),
405405

406-
as_expression: $ => prec.left('binary_as', seq(
406+
cast_expression: $ => prec.left('binary', seq(
407407
$.expression,
408-
'as',
409-
choice($._type, $.template_literal_type)
408+
choice('as', 'satisfies'),
409+
$._type
410410
)),
411411

412412
class_heritage: $ => choice(

queries/highlights.scm

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,4 +31,5 @@
3131
"type"
3232
"readonly"
3333
"override"
34+
"satisfies"
3435
] @keyword

tsx/src/grammar.json

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1898,7 +1898,7 @@
18981898
"members": [
18991899
{
19001900
"type": "SYMBOL",
1901-
"name": "as_expression"
1901+
"name": "cast_expression"
19021902
},
19031903
{
19041904
"type": "SYMBOL",
@@ -7440,32 +7440,32 @@
74407440
]
74417441
}
74427442
},
7443-
"as_expression": {
7443+
"cast_expression": {
74447444
"type": "PREC_LEFT",
7445-
"value": "binary_as",
7445+
"value": "binary",
74467446
"content": {
74477447
"type": "SEQ",
74487448
"members": [
74497449
{
74507450
"type": "SYMBOL",
74517451
"name": "expression"
74527452
},
7453-
{
7454-
"type": "STRING",
7455-
"value": "as"
7456-
},
74577453
{
74587454
"type": "CHOICE",
74597455
"members": [
74607456
{
7461-
"type": "SYMBOL",
7462-
"name": "_type"
7457+
"type": "STRING",
7458+
"value": "as"
74637459
},
74647460
{
7465-
"type": "SYMBOL",
7466-
"name": "template_literal_type"
7461+
"type": "STRING",
7462+
"value": "satisfies"
74677463
}
74687464
]
7465+
},
7466+
{
7467+
"type": "SYMBOL",
7468+
"name": "_type"
74697469
}
74707470
]
74717471
}
@@ -10746,7 +10746,7 @@
1074610746
},
1074710747
{
1074810748
"type": "STRING",
10749-
"value": "binary_as"
10749+
"value": "binary"
1075010750
},
1075110751
{
1075210752
"type": "SYMBOL",
@@ -10776,7 +10776,7 @@
1077610776
},
1077710777
{
1077810778
"type": "STRING",
10779-
"value": "binary_as"
10779+
"value": "binary"
1078010780
},
1078110781
{
1078210782
"type": "SYMBOL",
@@ -10958,7 +10958,7 @@
1095810958
[
1095910959
{
1096010960
"type": "SYMBOL",
10961-
"name": "as_expression"
10961+
"name": "cast_expression"
1096210962
},
1096310963
{
1096410964
"type": "SYMBOL",

tsx/src/node-types.json

Lines changed: 45 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -147,10 +147,6 @@
147147
"type": "expression",
148148
"named": true,
149149
"subtypes": [
150-
{
151-
"type": "as_expression",
152-
"named": true
153-
},
154150
{
155151
"type": "assignment_expression",
156152
"named": true
@@ -167,6 +163,10 @@
167163
"type": "binary_expression",
168164
"named": true
169165
},
166+
{
167+
"type": "cast_expression",
168+
"named": true
169+
},
170170
{
171171
"type": "glimmer_template",
172172
"named": true
@@ -763,41 +763,6 @@
763763
}
764764
}
765765
},
766-
{
767-
"type": "as_expression",
768-
"named": true,
769-
"fields": {},
770-
"children": {
771-
"multiple": true,
772-
"required": true,
773-
"types": [
774-
{
775-
"type": "_primary_type",
776-
"named": true
777-
},
778-
{
779-
"type": "constructor_type",
780-
"named": true
781-
},
782-
{
783-
"type": "expression",
784-
"named": true
785-
},
786-
{
787-
"type": "function_type",
788-
"named": true
789-
},
790-
{
791-
"type": "infer_type",
792-
"named": true
793-
},
794-
{
795-
"type": "readonly_type",
796-
"named": true
797-
}
798-
]
799-
}
800-
},
801766
{
802767
"type": "asserts",
803768
"named": true,
@@ -1256,6 +1221,41 @@
12561221
}
12571222
}
12581223
},
1224+
{
1225+
"type": "cast_expression",
1226+
"named": true,
1227+
"fields": {},
1228+
"children": {
1229+
"multiple": true,
1230+
"required": true,
1231+
"types": [
1232+
{
1233+
"type": "_primary_type",
1234+
"named": true
1235+
},
1236+
{
1237+
"type": "constructor_type",
1238+
"named": true
1239+
},
1240+
{
1241+
"type": "expression",
1242+
"named": true
1243+
},
1244+
{
1245+
"type": "function_type",
1246+
"named": true
1247+
},
1248+
{
1249+
"type": "infer_type",
1250+
"named": true
1251+
},
1252+
{
1253+
"type": "readonly_type",
1254+
"named": true
1255+
}
1256+
]
1257+
}
1258+
},
12591259
{
12601260
"type": "catch_clause",
12611261
"named": true,
@@ -6255,11 +6255,11 @@
62556255
},
62566256
{
62576257
"type": "number",
6258-
"named": false
6258+
"named": true
62596259
},
62606260
{
62616261
"type": "number",
6262-
"named": true
6262+
"named": false
62636263
},
62646264
{
62656265
"type": "object",
@@ -6313,6 +6313,10 @@
63136313
"type": "return",
63146314
"named": false
63156315
},
6316+
{
6317+
"type": "satisfies",
6318+
"named": false
6319+
},
63166320
{
63176321
"type": "set",
63186322
"named": false

0 commit comments

Comments
 (0)