@@ -431,6 +431,94 @@ let u32: str = "";
431
431
(primitive_type)
432
432
(string_literal)))
433
433
434
+ ================================================================================
435
+ Let-else Statements
436
+ ================================================================================
437
+
438
+ let Foo::Bar {
439
+ texts,
440
+ values,
441
+ } = foo().bar().await? else {
442
+ return Err(index)
443
+ };
444
+
445
+ let Some(x) = y else {
446
+ let None = z else {
447
+ foo();
448
+ break;
449
+ };
450
+ continue;
451
+ };
452
+
453
+ --------------------------------------------------------------------------------
454
+
455
+ (source_file
456
+ (let_declaration
457
+ pattern: (struct_pattern
458
+ type: (scoped_type_identifier
459
+ path: (identifier)
460
+ name: (type_identifier))
461
+ (field_pattern
462
+ name: (shorthand_field_identifier))
463
+ (field_pattern
464
+ name: (shorthand_field_identifier)))
465
+ value: (try_expression
466
+ (await_expression
467
+ (call_expression
468
+ function: (field_expression
469
+ value: (call_expression
470
+ function: (identifier)
471
+ arguments: (arguments))
472
+ field: (field_identifier))
473
+ arguments: (arguments))))
474
+ alternative: (block
475
+ (return_expression
476
+ (call_expression
477
+ function: (identifier)
478
+ arguments: (arguments
479
+ (identifier))))))
480
+ (let_declaration
481
+ pattern: (tuple_struct_pattern
482
+ type: (identifier)
483
+ (identifier))
484
+ value: (identifier)
485
+ alternative: (block
486
+ (let_declaration
487
+ pattern: (identifier)
488
+ value: (identifier)
489
+ alternative: (block
490
+ (expression_statement
491
+ (call_expression
492
+ function: (identifier)
493
+ arguments: (arguments)))
494
+ (expression_statement
495
+ (break_expression))))
496
+ (expression_statement
497
+ (continue_expression)))))
498
+
499
+ ================================================================================
500
+ Let declarations with if expressions as the value
501
+ ================================================================================
502
+
503
+ let a = if b {
504
+ c
505
+ } else {
506
+ d
507
+ };
508
+
509
+ --------------------------------------------------------------------------------
510
+
511
+ (source_file
512
+ (let_declaration
513
+ (identifier)
514
+ (if_expression
515
+ (identifier)
516
+ (block
517
+ (identifier))
518
+ (else_clause
519
+ (block
520
+ (identifier))))))
521
+
434
522
================================================================================
435
523
Structs
436
524
================================================================================
@@ -1046,27 +1134,31 @@ foo(#[bar(some tokens are special in other contexts: $/';()*()+.)] x);
1046
1134
(call_expression
1047
1135
function: (identifier)
1048
1136
arguments: (arguments
1049
- (attribute_item (attr_item
1050
- (identifier)
1051
- arguments: (token_tree (identifier) (identifier))))
1137
+ (attribute_item
1138
+ (attr_item
1139
+ (identifier)
1140
+ arguments: (token_tree
1141
+ (identifier)
1142
+ (identifier))))
1052
1143
(identifier)
1053
1144
(identifier))))
1054
1145
(expression_statement
1055
1146
(call_expression
1056
1147
function: (identifier)
1057
1148
arguments: (arguments
1058
- (attribute_item (attr_item
1059
- (identifier)
1060
- arguments: (token_tree
1061
- (identifier)
1062
- (identifier)
1063
- (identifier)
1064
- (identifier)
1149
+ (attribute_item
1150
+ (attr_item
1065
1151
(identifier)
1066
- (identifier)
1067
- (identifier)
1068
- (token_tree)
1069
- (token_tree))))
1152
+ arguments: (token_tree
1153
+ (identifier)
1154
+ (identifier)
1155
+ (identifier)
1156
+ (identifier)
1157
+ (identifier)
1158
+ (identifier)
1159
+ (identifier)
1160
+ (token_tree)
1161
+ (token_tree))))
1070
1162
(identifier)))))
1071
1163
1072
1164
================================================================================
@@ -1090,36 +1182,51 @@ pub enum Error {
1090
1182
(source_file
1091
1183
(line_comment)
1092
1184
(use_declaration
1093
- (scoped_identifier (identifier) (identifier)))
1185
+ (scoped_identifier
1186
+ (identifier)
1187
+ (identifier)))
1094
1188
(attribute_item
1095
- (meta_item (identifier)
1189
+ (meta_item
1190
+ (identifier)
1096
1191
(meta_arguments
1097
- (meta_item (identifier))
1098
- (meta_item (identifier)))))
1192
+ (meta_item
1193
+ (identifier))
1194
+ (meta_item
1195
+ (identifier)))))
1099
1196
(enum_item
1100
1197
(visibility_modifier)
1101
1198
(type_identifier)
1102
1199
(enum_variant_list
1103
- (attribute_item (attr_item
1104
- (identifier)
1105
- (token_tree
1106
- (string_literal)
1200
+ (attribute_item
1201
+ (attr_item
1107
1202
(identifier)
1108
- (token_tree (integer_literal)))))
1109
- (enum_variant (identifier)
1110
- (ordered_field_declaration_list (type_identifier)))
1111
- (attribute_item (attr_item
1203
+ (token_tree
1204
+ (string_literal)
1205
+ (identifier)
1206
+ (token_tree
1207
+ (integer_literal)))))
1208
+ (enum_variant
1112
1209
(identifier)
1113
- (token_tree
1114
- (string_literal )
1115
- (identifier)
1116
- (identifier)
1210
+ (ordered_field_declaration_list
1211
+ (type_identifier)) )
1212
+ (attribute_item
1213
+ (attr_item
1117
1214
(identifier)
1118
- (identifier))))
1119
- (enum_variant (identifier)
1215
+ (token_tree
1216
+ (string_literal)
1217
+ (identifier)
1218
+ (identifier)
1219
+ (identifier)
1220
+ (identifier))))
1221
+ (enum_variant
1222
+ (identifier)
1120
1223
(field_declaration_list
1121
- (field_declaration (field_identifier) (primitive_type))
1122
- (field_declaration (field_identifier) (type_identifier)))))))
1224
+ (field_declaration
1225
+ (field_identifier)
1226
+ (primitive_type))
1227
+ (field_declaration
1228
+ (field_identifier)
1229
+ (type_identifier)))))))
1123
1230
1124
1231
================================================================================
1125
1232
Attributes and Expressions
0 commit comments