[rust] estree support for jsx
Joe Savona committed
Jul 11, 2023 at 14:08 UTC
f452ed2971846dba5d6536f3752a861bba637603
3 files changed
+890
-13
compiler/forget/crates/estree-codegen/src/ecmascript.json
+159
-2
@@ -530,7 +530,129 @@
530
"type": "Identifier"
531
}
532
}
533
- }
533
+ },
534
+ "JSXIdentifier": {
535
+ "fields": {
536
+ "name": {
537
+ "type": "String"
538
+ }
539
+ }
540
+ },
541
+ "JSXNamespacedName": {
542
+ "fields": {
543
+ "namespace": {
544
+ "type": "JSXIdentifier"
545
+ },
546
+ "name": {
547
+ "type": "JSXIdentifier"
548
+ }
549
+ }
550
+ },
551
+ "JSXMemberExpression": {
552
+ "fields": {
553
+ "object": {
554
+ "type": "JSXMemberExpressionOrIdentifier"
555
+ },
556
+ "property": {
557
+ "type": "JSXIdentifier"
558
+ }
559
+ }
560
+ },
561
+ "JSXEmptyExpression": {},
562
+ "JSXExpressionContainer": {
563
+ "fields": {
564
+ "expression": {
565
+ "type": "JSXExpressionOrEmpty"
566
+ }
567
+ }
568
+ },
569
+ "JSXSpreadChild": {
570
+ "fields": {
571
+ "expression": {
572
+ "type": "Expression"
573
+ }
574
+ }
575
+ },
576
+ "JSXOpeningElement": {
577
+ "fields": {
578
+ "name": {
579
+ "type": "JSXElementName"
580
+ },
581
+ "attributes": {
582
+ "type": "Vec<JSXAttributeOrSpread>"
583
+ },
584
+ "self_closing": {
585
+ "type": "bool",
586
+ "rename": "selfClosing"
587
+ }
588
+ }
589
+ },
590
+ "JSXClosingElement": {
591
+ "fields": {
592
+ "name": {
593
+ "type": "JSXElementName"
594
+ }
595
+ }
596
+ },
597
+ "JSXAttribute": {
598
+ "fields": {
599
+ "name": {
600
+ "type": "JSXIdentifierOrNamespacedName"
601
+ },
602
+ "value": {
603
+ "type": "Option<JSXAttributeValue>"
604
+ }
605
+ }
606
+ },
607
+ "JSXSpreadAttribute": {
608
+ "fields": {
609
+ "argument": {
610
+ "type": "Expression"
611
+ }
612
+ }
613
+ },
614
+ "JSXText": {
615
+ "fields": {
616
+ "value": {
617
+ "type": "String"
618
+ },
619
+ "raw": {
620
+ "type": "String"
621
+ }
622
+ }
623
+ },
624
+ "JSXElement": {
625
+ "fields": {
626
+ "opening_element": {
627
+ "type": "JSXOpeningElement",
628
+ "rename": "openingElement"
629
+ },
630
+ "children": {
631
+ "type": "Vec<JSXChildItem>"
632
+ },
633
+ "closing_element": {
634
+ "type": "Option<JSXClosingElement>",
635
+ "rename": "closingElement"
636
+ }
637
+ }
638
+ },
639
+ "JSXFragment": {
640
+ "fields": {
641
+ "opening_fragment": {
642
+ "type": "JSXOpeningFragment",
643
+ "rename": "openingFragment"
644
+ },
645
+ "children": {
646
+ "type": "Vec<JSXChildItem>"
647
+ },
648
+ "closing_fragment": {
649
+ "type": "Option<JSXClosingFragment>",
650
+ "rename": "closingFragment"
651
+ }
652
+ }
653
+ },
654
+ "JSXOpeningFragment": {},
655
+ "JSXClosingFragment": {}
656
},
657
"enums": {
658
"Statement": [
@@ -573,7 +695,8 @@
695
"ThisExpression",
696
"UnaryExpression",
697
"UpdateExpression",
576
- "YieldExpression"
698
+ "YieldExpression",
699
+ "JSXElement"
700
],
701
"ImportDeclarationSpecifier": [
702
"ImportSpecifier",
@@ -617,6 +740,40 @@
740
"AssignmentTarget": [
741
"Expression",
742
"Pattern"
743
+ ],
744
+ "JSXMemberExpressionOrIdentifier": [
745
+ "JSXMemberExpression",
746
+ "JSXIdentifier"
747
+ ],
748
+ "JSXExpressionOrEmpty": [
749
+ "Expression",
750
+ "JSXEmptyExpression"
751
+ ],
752
+ "JSXAttributeOrSpread": [
753
+ "JSXAttribute",
754
+ "JSXSpreadAttribute"
755
+ ],
756
+ "JSXAttributeValue": [
757
+ "Literal",
758
+ "JSXExpressionContainer",
759
+ "JSXElement",
760
+ "JSXFragment"
761
+ ],
762
+ "JSXElementName": [
763
+ "JSXIdentifier",
764
+ "JSXMemberExpression",
765
+ "JSXNamespacedName"
766
+ ],
767
+ "JSXIdentifierOrNamespacedName": [
768
+ "JSXIdentifier",
769
+ "JSXNamespacedName"
770
+ ],
771
+ "JSXChildItem": [
772
+ "JSXText",
773
+ "JSXExpressionContainer",
774
+ "JSXSpreadChild",
775
+ "JSXElement",
776
+ "JSXFragment"
777
]
778
},
779
"operators": {
compiler/forget/crates/estree/src/generated.rs
+723
@@ -477,6 +477,138 @@ pub struct ImportNamespaceSpecifier {
477
#[serde(default)]
478
pub range: Option<SourceRange>,
479
}
480
+#[derive(Serialize, Deserialize, Clone, Debug)]
481
+pub struct JSXIdentifier {
482
+ pub name: String,
483
+ #[serde(default)]
484
+ pub loc: Option<SourceLocation>,
485
+ #[serde(default)]
486
+ pub range: Option<SourceRange>,
487
+}
488
+#[derive(Serialize, Deserialize, Clone, Debug)]
489
+pub struct JSXNamespacedName {
490
+ pub namespace: JSXIdentifier,
491
+ pub name: JSXIdentifier,
492
+ #[serde(default)]
493
+ pub loc: Option<SourceLocation>,
494
+ #[serde(default)]
495
+ pub range: Option<SourceRange>,
496
+}
497
+#[derive(Serialize, Deserialize, Clone, Debug)]
498
+pub struct JSXMemberExpression {
499
+ pub object: JSXMemberExpressionOrIdentifier,
500
+ pub property: JSXIdentifier,
501
+ #[serde(default)]
502
+ pub loc: Option<SourceLocation>,
503
+ #[serde(default)]
504
+ pub range: Option<SourceRange>,
505
+}
506
+#[derive(Serialize, Deserialize, Clone, Debug)]
507
+pub struct JSXEmptyExpression {
508
+ #[serde(default)]
509
+ pub loc: Option<SourceLocation>,
510
+ #[serde(default)]
511
+ pub range: Option<SourceRange>,
512
+}
513
+#[derive(Serialize, Deserialize, Clone, Debug)]
514
+pub struct JSXExpressionContainer {
515
+ pub expression: JSXExpressionOrEmpty,
516
+ #[serde(default)]
517
+ pub loc: Option<SourceLocation>,
518
+ #[serde(default)]
519
+ pub range: Option<SourceRange>,
520
+}
521
+#[derive(Serialize, Deserialize, Clone, Debug)]
522
+pub struct JSXSpreadChild {
523
+ pub expression: Expression,
524
+ #[serde(default)]
525
+ pub loc: Option<SourceLocation>,
526
+ #[serde(default)]
527
+ pub range: Option<SourceRange>,
528
+}
529
+#[derive(Serialize, Deserialize, Clone, Debug)]
530
+pub struct JSXOpeningElement {
531
+ pub name: JSXElementName,
532
+ pub attributes: Vec<JSXAttributeOrSpread>,
533
+ #[serde(rename = "selfClosing")]
534
+ pub self_closing: bool,
535
+ #[serde(default)]
536
+ pub loc: Option<SourceLocation>,
537
+ #[serde(default)]
538
+ pub range: Option<SourceRange>,
539
+}
540
+#[derive(Serialize, Deserialize, Clone, Debug)]
541
+pub struct JSXClosingElement {
542
+ pub name: JSXElementName,
543
+ #[serde(default)]
544
+ pub loc: Option<SourceLocation>,
545
+ #[serde(default)]
546
+ pub range: Option<SourceRange>,
547
+}
548
+#[derive(Serialize, Deserialize, Clone, Debug)]
549
+pub struct JSXAttribute {
550
+ pub name: JSXIdentifierOrNamespacedName,
551
+ pub value: Option<JSXAttributeValue>,
552
+ #[serde(default)]
553
+ pub loc: Option<SourceLocation>,
554
+ #[serde(default)]
555
+ pub range: Option<SourceRange>,
556
+}
557
+#[derive(Serialize, Deserialize, Clone, Debug)]
558
+pub struct JSXSpreadAttribute {
559
+ pub argument: Expression,
560
+ #[serde(default)]
561
+ pub loc: Option<SourceLocation>,
562
+ #[serde(default)]
563
+ pub range: Option<SourceRange>,
564
+}
565
+#[derive(Serialize, Deserialize, Clone, Debug)]
566
+pub struct JSXText {
567
+ pub value: String,
568
+ pub raw: String,
569
+ #[serde(default)]
570
+ pub loc: Option<SourceLocation>,
571
+ #[serde(default)]
572
+ pub range: Option<SourceRange>,
573
+}
574
+#[derive(Serialize, Deserialize, Clone, Debug)]
575
+pub struct JSXElement {
576
+ #[serde(rename = "openingElement")]
577
+ pub opening_element: JSXOpeningElement,
578
+ pub children: Vec<JSXChildItem>,
579
+ #[serde(rename = "closingElement")]
580
+ pub closing_element: Option<JSXClosingElement>,
581
+ #[serde(default)]
582
+ pub loc: Option<SourceLocation>,
583
+ #[serde(default)]
584
+ pub range: Option<SourceRange>,
585
+}
586
+#[derive(Serialize, Deserialize, Clone, Debug)]
587
+pub struct JSXFragment {
588
+ #[serde(rename = "openingFragment")]
589
+ pub opening_fragment: JSXOpeningFragment,
590
+ pub children: Vec<JSXChildItem>,
591
+ #[serde(rename = "closingFragment")]
592
+ pub closing_fragment: Option<JSXClosingFragment>,
593
+ #[serde(default)]
594
+ pub loc: Option<SourceLocation>,
595
+ #[serde(default)]
596
+ pub range: Option<SourceRange>,
597
+}
598
+#[derive(Serialize, Deserialize, Clone, Debug)]
599
+pub struct JSXOpeningFragment {
600
+ #[serde(default)]
601
+ pub loc: Option<SourceLocation>,
602
+ #[serde(default)]
603
+ pub range: Option<SourceRange>,
604
+}
605
+#[derive(Serialize, Deserialize, Clone, Debug)]
606
+pub struct JSXClosingFragment {
607
+ #[serde(default)]
608
+ pub loc: Option<SourceLocation>,
609
+ #[serde(default)]
610
+ pub range: Option<SourceRange>,
611
+}
612
#[derive(Serialize, Clone, Debug)]
613
#[serde(tag = "type")]
614
pub enum Statement {
@@ -710,6 +842,7 @@ pub enum Expression {
842
ConditionalExpression(Box<ConditionalExpression>),
843
FunctionExpression(Box<FunctionExpression>),
844
Identifier(Box<Identifier>),
845
+ JSXElement(Box<JSXElement>),
846
Literal(Box<Literal>),
847
LogicalExpression(Box<LogicalExpression>),
848
MemberExpression(Box<MemberExpression>),
@@ -741,6 +874,7 @@ enum __ExpressionTag {
874
UnaryExpression,
875
UpdateExpression,
876
YieldExpression,
877
+ JSXElement,
878
}
879
impl<'de> serde::Deserialize<'de> for Expression {
880
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
@@ -898,6 +1032,14 @@ impl<'de> serde::Deserialize<'de> for Expression {
1032
)?;
1033
Ok(Expression::YieldExpression(node))
1034
}
1035
+ __ExpressionTag::JSXElement => {
1036
+ let node: Box<JSXElement> = <Box<
1037
+ JSXElement,
1038
+ > as Deserialize>::deserialize(
1039
+ serde::__private::de::ContentDeserializer::<D::Error>::new(tagged.1),
1040
+ )?;
1041
+ Ok(Expression::JSXElement(node))
1042
+ }
1043
}
1044
}
1045
}
@@ -1228,6 +1370,7 @@ enum __ExpressionOrSuperTag {
1370
UnaryExpression,
1371
UpdateExpression,
1372
YieldExpression,
1373
+ JSXElement,
1374
Super,
1375
}
1376
impl<'de> serde::Deserialize<'de> for ExpressionOrSuper {
@@ -1394,6 +1537,14 @@ impl<'de> serde::Deserialize<'de> for ExpressionOrSuper {
1537
)?;
1538
Ok(ExpressionOrSuper::Expression(Expression::YieldExpression(node)))
1539
}
1540
+ __ExpressionOrSuperTag::JSXElement => {
1541
+ let node: Box<JSXElement> = <Box<
1542
+ JSXElement,
1543
+ > as Deserialize>::deserialize(
1544
+ serde::__private::de::ContentDeserializer::<D::Error>::new(tagged.1),
1545
+ )?;
1546
+ Ok(ExpressionOrSuper::Expression(Expression::JSXElement(node)))
1547
+ }
1548
__ExpressionOrSuperTag::Super => {
1549
let node: Box<Super> = <Box<
1550
Super,
@@ -1431,6 +1582,7 @@ enum __ExpressionOrSpreadTag {
1582
UnaryExpression,
1583
UpdateExpression,
1584
YieldExpression,
1585
+ JSXElement,
1586
SpreadElement,
1587
}
1588
impl<'de> serde::Deserialize<'de> for ExpressionOrSpread {
@@ -1601,6 +1753,14 @@ impl<'de> serde::Deserialize<'de> for ExpressionOrSpread {
1753
)?;
1754
Ok(ExpressionOrSpread::Expression(Expression::YieldExpression(node)))
1755
}
1756
+ __ExpressionOrSpreadTag::JSXElement => {
1757
+ let node: Box<JSXElement> = <Box<
1758
+ JSXElement,
1759
+ > as Deserialize>::deserialize(
1760
+ serde::__private::de::ContentDeserializer::<D::Error>::new(tagged.1),
1761
+ )?;
1762
+ Ok(ExpressionOrSpread::Expression(Expression::JSXElement(node)))
1763
+ }
1764
__ExpressionOrSpreadTag::SpreadElement => {
1765
let node: Box<SpreadElement> = <Box<
1766
SpreadElement,
@@ -1639,6 +1799,7 @@ enum __FunctionBodyTag {
1799
UnaryExpression,
1800
UpdateExpression,
1801
YieldExpression,
1802
+ JSXElement,
1803
}
1804
impl<'de> serde::Deserialize<'de> for FunctionBody {
1805
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
@@ -1804,6 +1965,14 @@ impl<'de> serde::Deserialize<'de> for FunctionBody {
1965
)?;
1966
Ok(FunctionBody::Expression(Expression::YieldExpression(node)))
1967
}
1968
+ __FunctionBodyTag::JSXElement => {
1969
+ let node: Box<JSXElement> = <Box<
1970
+ JSXElement,
1971
+ > as Deserialize>::deserialize(
1972
+ serde::__private::de::ContentDeserializer::<D::Error>::new(tagged.1),
1973
+ )?;
1974
+ Ok(FunctionBody::Expression(Expression::JSXElement(node)))
1975
+ }
1976
}
1977
}
1978
}
@@ -1865,6 +2034,7 @@ enum __ForInitTag {
2034
UnaryExpression,
2035
UpdateExpression,
2036
YieldExpression,
2037
+ JSXElement,
2038
VariableDeclaration,
2039
}
2040
impl<'de> serde::Deserialize<'de> for ForInit {
@@ -2023,6 +2193,14 @@ impl<'de> serde::Deserialize<'de> for ForInit {
2193
)?;
2194
Ok(ForInit::Expression(Expression::YieldExpression(node)))
2195
}
2196
+ __ForInitTag::JSXElement => {
2197
+ let node: Box<JSXElement> = <Box<
2198
+ JSXElement,
2199
+ > as Deserialize>::deserialize(
2200
+ serde::__private::de::ContentDeserializer::<D::Error>::new(tagged.1),
2201
+ )?;
2202
+ Ok(ForInit::Expression(Expression::JSXElement(node)))
2203
+ }
2204
__ForInitTag::VariableDeclaration => {
2205
let node: Box<VariableDeclaration> = <Box<
2206
VariableDeclaration,
@@ -2144,6 +2322,7 @@ enum __AssignmentTargetTag {
2322
UnaryExpression,
2323
UpdateExpression,
2324
YieldExpression,
2325
+ JSXElement,
2326
}
2327
impl<'de> serde::Deserialize<'de> for AssignmentTarget {
2328
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
@@ -2305,6 +2484,550 @@ impl<'de> serde::Deserialize<'de> for AssignmentTarget {
2484
)?;
2485
Ok(AssignmentTarget::Expression(Expression::YieldExpression(node)))
2486
}
2487
+ __AssignmentTargetTag::JSXElement => {
2488
+ let node: Box<JSXElement> = <Box<
2489
+ JSXElement,
2490
+ > as Deserialize>::deserialize(
2491
+ serde::__private::de::ContentDeserializer::<D::Error>::new(tagged.1),
2492
+ )?;
2493
+ Ok(AssignmentTarget::Expression(Expression::JSXElement(node)))
2494
+ }
2495
+ }
2496
+ }
2497
+}
2498
+#[derive(Serialize, Clone, Debug)]
2499
+#[serde(tag = "type")]
2500
+pub enum JSXMemberExpressionOrIdentifier {
2501
+ JSXIdentifier(Box<JSXIdentifier>),
2502
+ JSXMemberExpression(Box<JSXMemberExpression>),
2503
+}
2504
+#[derive(Deserialize, Debug)]
2505
+enum __JSXMemberExpressionOrIdentifierTag {
2506
+ JSXMemberExpression,
2507
+ JSXIdentifier,
2508
+}
2509
+impl<'de> serde::Deserialize<'de> for JSXMemberExpressionOrIdentifier {
2510
+ fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
2511
+ where
2512
+ D: serde::Deserializer<'de>,
2513
+ {
2514
+ let tagged = serde::Deserializer::deserialize_any(
2515
+ deserializer,
2516
+ serde::__private::de::TaggedContentVisitor::<
2517
+ __JSXMemberExpressionOrIdentifierTag,
2518
+ >::new("type", "Pattern"),
2519
+ )?;
2520
+ match tagged.0 {
2521
+ __JSXMemberExpressionOrIdentifierTag::JSXMemberExpression => {
2522
+ let node: Box<JSXMemberExpression> = <Box<
2523
+ JSXMemberExpression,
2524
+ > as Deserialize>::deserialize(
2525
+ serde::__private::de::ContentDeserializer::<D::Error>::new(tagged.1),
2526
+ )?;
2527
+ Ok(JSXMemberExpressionOrIdentifier::JSXMemberExpression(node))
2528
+ }
2529
+ __JSXMemberExpressionOrIdentifierTag::JSXIdentifier => {
2530
+ let node: Box<JSXIdentifier> = <Box<
2531
+ JSXIdentifier,
2532
+ > as Deserialize>::deserialize(
2533
+ serde::__private::de::ContentDeserializer::<D::Error>::new(tagged.1),
2534
+ )?;
2535
+ Ok(JSXMemberExpressionOrIdentifier::JSXIdentifier(node))
2536
+ }
2537
+ }
2538
+ }
2539
+}
2540
+#[derive(Serialize, Clone, Debug)]
2541
+#[serde(untagged)]
2542
+pub enum JSXExpressionOrEmpty {
2543
+ Expression(Expression),
2544
+ JSXEmptyExpression(Box<JSXEmptyExpression>),
2545
+}
2546
+#[derive(Deserialize, Debug)]
2547
+enum __JSXExpressionOrEmptyTag {
2548
+ ArrayExpression,
2549
+ ArrowFunctionExpression,
2550
+ AssignmentExpression,
2551
+ BinaryExpression,
2552
+ CallExpression,
2553
+ ConditionalExpression,
2554
+ FunctionExpression,
2555
+ Identifier,
2556
+ Literal,
2557
+ LogicalExpression,
2558
+ MemberExpression,
2559
+ NewExpression,
2560
+ ObjectExpression,
2561
+ SequenceExpression,
2562
+ ThisExpression,
2563
+ UnaryExpression,
2564
+ UpdateExpression,
2565
+ YieldExpression,
2566
+ JSXElement,
2567
+ JSXEmptyExpression,
2568
+}
2569
+impl<'de> serde::Deserialize<'de> for JSXExpressionOrEmpty {
2570
+ fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
2571
+ where
2572
+ D: serde::Deserializer<'de>,
2573
+ {
2574
+ let tagged = serde::Deserializer::deserialize_any(
2575
+ deserializer,
2576
+ serde::__private::de::TaggedContentVisitor::<
2577
+ __JSXExpressionOrEmptyTag,
2578
+ >::new("type", "Pattern"),
2579
+ )?;
2580
+ match tagged.0 {
2581
+ __JSXExpressionOrEmptyTag::ArrayExpression => {
2582
+ let node: Box<ArrayExpression> = <Box<
2583
+ ArrayExpression,
2584
+ > as Deserialize>::deserialize(
2585
+ serde::__private::de::ContentDeserializer::<D::Error>::new(tagged.1),
2586
+ )?;
2587
+ Ok(JSXExpressionOrEmpty::Expression(Expression::ArrayExpression(node)))
2588
+ }
2589
+ __JSXExpressionOrEmptyTag::ArrowFunctionExpression => {
2590
+ let node: Box<ArrowFunctionExpression> = <Box<
2591
+ ArrowFunctionExpression,
2592
+ > as Deserialize>::deserialize(
2593
+ serde::__private::de::ContentDeserializer::<D::Error>::new(tagged.1),
2594
+ )?;
2595
+ Ok(
2596
+ JSXExpressionOrEmpty::Expression(
2597
+ Expression::ArrowFunctionExpression(node),
2598
+ ),
2599
+ )
2600
+ }
2601
+ __JSXExpressionOrEmptyTag::AssignmentExpression => {
2602
+ let node: Box<AssignmentExpression> = <Box<
2603
+ AssignmentExpression,
2604
+ > as Deserialize>::deserialize(
2605
+ serde::__private::de::ContentDeserializer::<D::Error>::new(tagged.1),
2606
+ )?;
2607
+ Ok(
2608
+ JSXExpressionOrEmpty::Expression(
2609
+ Expression::AssignmentExpression(node),
2610
+ ),
2611
+ )
2612
+ }
2613
+ __JSXExpressionOrEmptyTag::BinaryExpression => {
2614
+ let node: Box<BinaryExpression> = <Box<
2615
+ BinaryExpression,
2616
+ > as Deserialize>::deserialize(
2617
+ serde::__private::de::ContentDeserializer::<D::Error>::new(tagged.1),
2618
+ )?;
2619
+ Ok(JSXExpressionOrEmpty::Expression(Expression::BinaryExpression(node)))
2620
+ }
2621
+ __JSXExpressionOrEmptyTag::CallExpression => {
2622
+ let node: Box<CallExpression> = <Box<
2623
+ CallExpression,
2624
+ > as Deserialize>::deserialize(
2625
+ serde::__private::de::ContentDeserializer::<D::Error>::new(tagged.1),
2626
+ )?;
2627
+ Ok(JSXExpressionOrEmpty::Expression(Expression::CallExpression(node)))
2628
+ }
2629
+ __JSXExpressionOrEmptyTag::ConditionalExpression => {
2630
+ let node: Box<ConditionalExpression> = <Box<
2631
+ ConditionalExpression,
2632
+ > as Deserialize>::deserialize(
2633
+ serde::__private::de::ContentDeserializer::<D::Error>::new(tagged.1),
2634
+ )?;
2635
+ Ok(
2636
+ JSXExpressionOrEmpty::Expression(
2637
+ Expression::ConditionalExpression(node),
2638
+ ),
2639
+ )
2640
+ }
2641
+ __JSXExpressionOrEmptyTag::FunctionExpression => {
2642
+ let node: Box<FunctionExpression> = <Box<
2643
+ FunctionExpression,
2644
+ > as Deserialize>::deserialize(
2645
+ serde::__private::de::ContentDeserializer::<D::Error>::new(tagged.1),
2646
+ )?;
2647
+ Ok(
2648
+ JSXExpressionOrEmpty::Expression(
2649
+ Expression::FunctionExpression(node),
2650
+ ),
2651
+ )
2652
+ }
2653
+ __JSXExpressionOrEmptyTag::Identifier => {
2654
+ let node: Box<Identifier> = <Box<
2655
+ Identifier,
2656
+ > as Deserialize>::deserialize(
2657
+ serde::__private::de::ContentDeserializer::<D::Error>::new(tagged.1),
2658
+ )?;
2659
+ Ok(JSXExpressionOrEmpty::Expression(Expression::Identifier(node)))
2660
+ }
2661
+ __JSXExpressionOrEmptyTag::Literal => {
2662
+ let node: Box<Literal> = <Box<
2663
+ Literal,
2664
+ > as Deserialize>::deserialize(
2665
+ serde::__private::de::ContentDeserializer::<D::Error>::new(tagged.1),
2666
+ )?;
2667
+ Ok(JSXExpressionOrEmpty::Expression(Expression::Literal(node)))
2668
+ }
2669
+ __JSXExpressionOrEmptyTag::LogicalExpression => {
2670
+ let node: Box<LogicalExpression> = <Box<
2671
+ LogicalExpression,
2672
+ > as Deserialize>::deserialize(
2673
+ serde::__private::de::ContentDeserializer::<D::Error>::new(tagged.1),
2674
+ )?;
2675
+ Ok(JSXExpressionOrEmpty::Expression(Expression::LogicalExpression(node)))
2676
+ }
2677
+ __JSXExpressionOrEmptyTag::MemberExpression => {
2678
+ let node: Box<MemberExpression> = <Box<
2679
+ MemberExpression,
2680
+ > as Deserialize>::deserialize(
2681
+ serde::__private::de::ContentDeserializer::<D::Error>::new(tagged.1),
2682
+ )?;
2683
+ Ok(JSXExpressionOrEmpty::Expression(Expression::MemberExpression(node)))
2684
+ }
2685
+ __JSXExpressionOrEmptyTag::NewExpression => {
2686
+ let node: Box<NewExpression> = <Box<
2687
+ NewExpression,
2688
+ > as Deserialize>::deserialize(
2689
+ serde::__private::de::ContentDeserializer::<D::Error>::new(tagged.1),
2690
+ )?;
2691
+ Ok(JSXExpressionOrEmpty::Expression(Expression::NewExpression(node)))
2692
+ }
2693
+ __JSXExpressionOrEmptyTag::ObjectExpression => {
2694
+ let node: Box<ObjectExpression> = <Box<
2695
+ ObjectExpression,
2696
+ > as Deserialize>::deserialize(
2697
+ serde::__private::de::ContentDeserializer::<D::Error>::new(tagged.1),
2698
+ )?;
2699
+ Ok(JSXExpressionOrEmpty::Expression(Expression::ObjectExpression(node)))
2700
+ }
2701
+ __JSXExpressionOrEmptyTag::SequenceExpression => {
2702
+ let node: Box<SequenceExpression> = <Box<
2703
+ SequenceExpression,
2704
+ > as Deserialize>::deserialize(
2705
+ serde::__private::de::ContentDeserializer::<D::Error>::new(tagged.1),
2706
+ )?;
2707
+ Ok(
2708
+ JSXExpressionOrEmpty::Expression(
2709
+ Expression::SequenceExpression(node),
2710
+ ),
2711
+ )
2712
+ }
2713
+ __JSXExpressionOrEmptyTag::ThisExpression => {
2714
+ let node: Box<ThisExpression> = <Box<
2715
+ ThisExpression,
2716
+ > as Deserialize>::deserialize(
2717
+ serde::__private::de::ContentDeserializer::<D::Error>::new(tagged.1),
2718
+ )?;
2719
+ Ok(JSXExpressionOrEmpty::Expression(Expression::ThisExpression(node)))
2720
+ }
2721
+ __JSXExpressionOrEmptyTag::UnaryExpression => {
2722
+ let node: Box<UnaryExpression> = <Box<
2723
+ UnaryExpression,
2724
+ > as Deserialize>::deserialize(
2725
+ serde::__private::de::ContentDeserializer::<D::Error>::new(tagged.1),
2726
+ )?;
2727
+ Ok(JSXExpressionOrEmpty::Expression(Expression::UnaryExpression(node)))
2728
+ }
2729
+ __JSXExpressionOrEmptyTag::UpdateExpression => {
2730
+ let node: Box<UpdateExpression> = <Box<
2731
+ UpdateExpression,
2732
+ > as Deserialize>::deserialize(
2733
+ serde::__private::de::ContentDeserializer::<D::Error>::new(tagged.1),
2734
+ )?;
2735
+ Ok(JSXExpressionOrEmpty::Expression(Expression::UpdateExpression(node)))
2736
+ }
2737
+ __JSXExpressionOrEmptyTag::YieldExpression => {
2738
+ let node: Box<YieldExpression> = <Box<
2739
+ YieldExpression,
2740
+ > as Deserialize>::deserialize(
2741
+ serde::__private::de::ContentDeserializer::<D::Error>::new(tagged.1),
2742
+ )?;
2743
+ Ok(JSXExpressionOrEmpty::Expression(Expression::YieldExpression(node)))
2744
+ }
2745
+ __JSXExpressionOrEmptyTag::JSXElement => {
2746
+ let node: Box<JSXElement> = <Box<
2747
+ JSXElement,
2748
+ > as Deserialize>::deserialize(
2749
+ serde::__private::de::ContentDeserializer::<D::Error>::new(tagged.1),
2750
+ )?;
2751
+ Ok(JSXExpressionOrEmpty::Expression(Expression::JSXElement(node)))
2752
+ }
2753
+ __JSXExpressionOrEmptyTag::JSXEmptyExpression => {
2754
+ let node: Box<JSXEmptyExpression> = <Box<
2755
+ JSXEmptyExpression,
2756
+ > as Deserialize>::deserialize(
2757
+ serde::__private::de::ContentDeserializer::<D::Error>::new(tagged.1),
2758
+ )?;
2759
+ Ok(JSXExpressionOrEmpty::JSXEmptyExpression(node))
2760
+ }
2761
+ }
2762
+ }
2763
+}
2764
+#[derive(Serialize, Clone, Debug)]
2765
+#[serde(tag = "type")]
2766
+pub enum JSXAttributeOrSpread {
2767
+ JSXAttribute(Box<JSXAttribute>),
2768
+ JSXSpreadAttribute(Box<JSXSpreadAttribute>),
2769
+}
2770
+#[derive(Deserialize, Debug)]
2771
+enum __JSXAttributeOrSpreadTag {
2772
+ JSXAttribute,
2773
+ JSXSpreadAttribute,
2774
+}
2775
+impl<'de> serde::Deserialize<'de> for JSXAttributeOrSpread {
2776
+ fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
2777
+ where
2778
+ D: serde::Deserializer<'de>,
2779
+ {
2780
+ let tagged = serde::Deserializer::deserialize_any(
2781
+ deserializer,
2782
+ serde::__private::de::TaggedContentVisitor::<
2783
+ __JSXAttributeOrSpreadTag,
2784
+ >::new("type", "Pattern"),
2785
+ )?;
2786
+ match tagged.0 {
2787
+ __JSXAttributeOrSpreadTag::JSXAttribute => {
2788
+ let node: Box<JSXAttribute> = <Box<
2789
+ JSXAttribute,
2790
+ > as Deserialize>::deserialize(
2791
+ serde::__private::de::ContentDeserializer::<D::Error>::new(tagged.1),
2792
+ )?;
2793
+ Ok(JSXAttributeOrSpread::JSXAttribute(node))
2794
+ }
2795
+ __JSXAttributeOrSpreadTag::JSXSpreadAttribute => {
2796
+ let node: Box<JSXSpreadAttribute> = <Box<
2797
+ JSXSpreadAttribute,
2798
+ > as Deserialize>::deserialize(
2799
+ serde::__private::de::ContentDeserializer::<D::Error>::new(tagged.1),
2800
+ )?;
2801
+ Ok(JSXAttributeOrSpread::JSXSpreadAttribute(node))
2802
+ }
2803
+ }
2804
+ }
2805
+}
2806
+#[derive(Serialize, Clone, Debug)]
2807
+#[serde(tag = "type")]
2808
+pub enum JSXAttributeValue {
2809
+ JSXElement(Box<JSXElement>),
2810
+ JSXExpressionContainer(Box<JSXExpressionContainer>),
2811
+ JSXFragment(Box<JSXFragment>),
2812
+ Literal(Box<Literal>),
2813
+}
2814
+#[derive(Deserialize, Debug)]
2815
+enum __JSXAttributeValueTag {
2816
+ Literal,
2817
+ JSXExpressionContainer,
2818
+ JSXElement,
2819
+ JSXFragment,
2820
+}
2821
+impl<'de> serde::Deserialize<'de> for JSXAttributeValue {
2822
+ fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
2823
+ where
2824
+ D: serde::Deserializer<'de>,
2825
+ {
2826
+ let tagged = serde::Deserializer::deserialize_any(
2827
+ deserializer,
2828
+ serde::__private::de::TaggedContentVisitor::<
2829
+ __JSXAttributeValueTag,
2830
+ >::new("type", "Pattern"),
2831
+ )?;
2832
+ match tagged.0 {
2833
+ __JSXAttributeValueTag::Literal => {
2834
+ let node: Box<Literal> = <Box<
2835
+ Literal,
2836
+ > as Deserialize>::deserialize(
2837
+ serde::__private::de::ContentDeserializer::<D::Error>::new(tagged.1),
2838
+ )?;
2839
+ Ok(JSXAttributeValue::Literal(node))
2840
+ }
2841
+ __JSXAttributeValueTag::JSXExpressionContainer => {
2842
+ let node: Box<JSXExpressionContainer> = <Box<
2843
+ JSXExpressionContainer,
2844
+ > as Deserialize>::deserialize(
2845
+ serde::__private::de::ContentDeserializer::<D::Error>::new(tagged.1),
2846
+ )?;
2847
+ Ok(JSXAttributeValue::JSXExpressionContainer(node))
2848
+ }
2849
+ __JSXAttributeValueTag::JSXElement => {
2850
+ let node: Box<JSXElement> = <Box<
2851
+ JSXElement,
2852
+ > as Deserialize>::deserialize(
2853
+ serde::__private::de::ContentDeserializer::<D::Error>::new(tagged.1),
2854
+ )?;
2855
+ Ok(JSXAttributeValue::JSXElement(node))
2856
+ }
2857
+ __JSXAttributeValueTag::JSXFragment => {
2858
+ let node: Box<JSXFragment> = <Box<
2859
+ JSXFragment,
2860
+ > as Deserialize>::deserialize(
2861
+ serde::__private::de::ContentDeserializer::<D::Error>::new(tagged.1),
2862
+ )?;
2863
+ Ok(JSXAttributeValue::JSXFragment(node))
2864
+ }
2865
+ }
2866
+ }
2867
+}
2868
+#[derive(Serialize, Clone, Debug)]
2869
+#[serde(tag = "type")]
2870
+pub enum JSXElementName {
2871
+ JSXIdentifier(Box<JSXIdentifier>),
2872
+ JSXMemberExpression(Box<JSXMemberExpression>),
2873
+ JSXNamespacedName(Box<JSXNamespacedName>),
2874
+}
2875
+#[derive(Deserialize, Debug)]
2876
+enum __JSXElementNameTag {
2877
+ JSXIdentifier,
2878
+ JSXMemberExpression,
2879
+ JSXNamespacedName,
2880
+}
2881
+impl<'de> serde::Deserialize<'de> for JSXElementName {
2882
+ fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
2883
+ where
2884
+ D: serde::Deserializer<'de>,
2885
+ {
2886
+ let tagged = serde::Deserializer::deserialize_any(
2887
+ deserializer,
2888
+ serde::__private::de::TaggedContentVisitor::<
2889
+ __JSXElementNameTag,
2890
+ >::new("type", "Pattern"),
2891
+ )?;
2892
+ match tagged.0 {
2893
+ __JSXElementNameTag::JSXIdentifier => {
2894
+ let node: Box<JSXIdentifier> = <Box<
2895
+ JSXIdentifier,
2896
+ > as Deserialize>::deserialize(
2897
+ serde::__private::de::ContentDeserializer::<D::Error>::new(tagged.1),
2898
+ )?;
2899
+ Ok(JSXElementName::JSXIdentifier(node))
2900
+ }
2901
+ __JSXElementNameTag::JSXMemberExpression => {
2902
+ let node: Box<JSXMemberExpression> = <Box<
2903
+ JSXMemberExpression,
2904
+ > as Deserialize>::deserialize(
2905
+ serde::__private::de::ContentDeserializer::<D::Error>::new(tagged.1),
2906
+ )?;
2907
+ Ok(JSXElementName::JSXMemberExpression(node))
2908
+ }
2909
+ __JSXElementNameTag::JSXNamespacedName => {
2910
+ let node: Box<JSXNamespacedName> = <Box<
2911
+ JSXNamespacedName,
2912
+ > as Deserialize>::deserialize(
2913
+ serde::__private::de::ContentDeserializer::<D::Error>::new(tagged.1),
2914
+ )?;
2915
+ Ok(JSXElementName::JSXNamespacedName(node))
2916
+ }
2917
+ }
2918
+ }
2919
+}
2920
+#[derive(Serialize, Clone, Debug)]
2921
+#[serde(tag = "type")]
2922
+pub enum JSXIdentifierOrNamespacedName {
2923
+ JSXIdentifier(Box<JSXIdentifier>),
2924
+ JSXNamespacedName(Box<JSXNamespacedName>),
2925
+}
2926
+#[derive(Deserialize, Debug)]
2927
+enum __JSXIdentifierOrNamespacedNameTag {
2928
+ JSXIdentifier,
2929
+ JSXNamespacedName,
2930
+}
2931
+impl<'de> serde::Deserialize<'de> for JSXIdentifierOrNamespacedName {
2932
+ fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
2933
+ where
2934
+ D: serde::Deserializer<'de>,
2935
+ {
2936
+ let tagged = serde::Deserializer::deserialize_any(
2937
+ deserializer,
2938
+ serde::__private::de::TaggedContentVisitor::<
2939
+ __JSXIdentifierOrNamespacedNameTag,
2940
+ >::new("type", "Pattern"),
2941
+ )?;
2942
+ match tagged.0 {
2943
+ __JSXIdentifierOrNamespacedNameTag::JSXIdentifier => {
2944
+ let node: Box<JSXIdentifier> = <Box<
2945
+ JSXIdentifier,
2946
+ > as Deserialize>::deserialize(
2947
+ serde::__private::de::ContentDeserializer::<D::Error>::new(tagged.1),
2948
+ )?;
2949
+ Ok(JSXIdentifierOrNamespacedName::JSXIdentifier(node))
2950
+ }
2951
+ __JSXIdentifierOrNamespacedNameTag::JSXNamespacedName => {
2952
+ let node: Box<JSXNamespacedName> = <Box<
2953
+ JSXNamespacedName,
2954
+ > as Deserialize>::deserialize(
2955
+ serde::__private::de::ContentDeserializer::<D::Error>::new(tagged.1),
2956
+ )?;
2957
+ Ok(JSXIdentifierOrNamespacedName::JSXNamespacedName(node))
2958
+ }
2959
+ }
2960
+ }
2961
+}
2962
+#[derive(Serialize, Clone, Debug)]
2963
+#[serde(tag = "type")]
2964
+pub enum JSXChildItem {
2965
+ JSXElement(Box<JSXElement>),
2966
+ JSXExpressionContainer(Box<JSXExpressionContainer>),
2967
+ JSXFragment(Box<JSXFragment>),
2968
+ JSXSpreadChild(Box<JSXSpreadChild>),
2969
+ JSXText(Box<JSXText>),
2970
+}
2971
+#[derive(Deserialize, Debug)]
2972
+enum __JSXChildItemTag {
2973
+ JSXText,
2974
+ JSXExpressionContainer,
2975
+ JSXSpreadChild,
2976
+ JSXElement,
2977
+ JSXFragment,
2978
+}
2979
+impl<'de> serde::Deserialize<'de> for JSXChildItem {
2980
+ fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
2981
+ where
2982
+ D: serde::Deserializer<'de>,
2983
+ {
2984
+ let tagged = serde::Deserializer::deserialize_any(
2985
+ deserializer,
2986
+ serde::__private::de::TaggedContentVisitor::<
2987
+ __JSXChildItemTag,
2988
+ >::new("type", "Pattern"),
2989
+ )?;
2990
+ match tagged.0 {
2991
+ __JSXChildItemTag::JSXText => {
2992
+ let node: Box<JSXText> = <Box<
2993
+ JSXText,
2994
+ > as Deserialize>::deserialize(
2995
+ serde::__private::de::ContentDeserializer::<D::Error>::new(tagged.1),
2996
+ )?;
2997
+ Ok(JSXChildItem::JSXText(node))
2998
+ }
2999
+ __JSXChildItemTag::JSXExpressionContainer => {
3000
+ let node: Box<JSXExpressionContainer> = <Box<
3001
+ JSXExpressionContainer,
3002
+ > as Deserialize>::deserialize(
3003
+ serde::__private::de::ContentDeserializer::<D::Error>::new(tagged.1),
3004
+ )?;
3005
+ Ok(JSXChildItem::JSXExpressionContainer(node))
3006
+ }
3007
+ __JSXChildItemTag::JSXSpreadChild => {
3008
+ let node: Box<JSXSpreadChild> = <Box<
3009
+ JSXSpreadChild,
3010
+ > as Deserialize>::deserialize(
3011
+ serde::__private::de::ContentDeserializer::<D::Error>::new(tagged.1),
3012
+ )?;
3013
+ Ok(JSXChildItem::JSXSpreadChild(node))
3014
+ }
3015
+ __JSXChildItemTag::JSXElement => {
3016
+ let node: Box<JSXElement> = <Box<
3017
+ JSXElement,
3018
+ > as Deserialize>::deserialize(
3019
+ serde::__private::de::ContentDeserializer::<D::Error>::new(tagged.1),
3020
+ )?;
3021
+ Ok(JSXChildItem::JSXElement(node))
3022
+ }
3023
+ __JSXChildItemTag::JSXFragment => {
3024
+ let node: Box<JSXFragment> = <Box<
3025
+ JSXFragment,
3026
+ > as Deserialize>::deserialize(
3027
+ serde::__private::de::ContentDeserializer::<D::Error>::new(tagged.1),
3028
+ )?;
3029
+ Ok(JSXChildItem::JSXFragment(node))
3030
+ }
3031
}
3032
}
3033
}
compiler/forget/crates/estree/src/snapshots/estree__tests__fixtures@test.json.snap
+8
-11
@@ -358,13 +358,11 @@ Input:
358
359
Output:
360
{
361
- "sourceType": "script",
361
"body": [
362
{
363
"type": "FunctionDeclaration",
364
"id": {
365
"name": "foo",
367
- "binding": null,
366
"loc": {
367
"source": null,
368
"start": {
@@ -382,17 +380,13 @@ Output:
380
}
381
},
382
"params": [],
385
- "generator": false,
386
- "async": false,
383
"body": {
388
- "type": "BlockStatement",
384
"body": [
385
{
386
"type": "ReturnStatement",
387
"argument": {
388
"type": "JSXElement",
389
"openingElement": {
395
- "type": "JSXOpeningElement",
390
"name": {
391
"type": "JSXMemberExpression",
392
"object": {
@@ -415,7 +409,6 @@ Output:
409
}
410
},
411
"property": {
418
- "type": "JSXIdentifier",
412
"name": "Bar",
413
"loc": {
414
"source": null,
@@ -451,6 +444,7 @@ Output:
444
},
445
"attributes": [
446
{
447
+ "type": "JSXAttribute",
448
"name": {
449
"type": "JSXIdentifier",
450
"name": "a",
@@ -474,8 +468,11 @@ Output:
468
"type": "JSXExpressionContainer",
469
"expression": {
470
"type": "Literal",
477
- "value": 10,
471
+ "value": {
472
+ "Number": 10
473
+ },
474
"raw": "10",
475
+ "regex": null,
476
"loc": {
477
"source": null,
478
"start": {
@@ -544,7 +541,6 @@ Output:
541
},
542
"children": [],
543
"closingElement": {
547
- "type": "JSXClosingElement",
544
"name": {
545
"type": "JSXMemberExpression",
546
"object": {
@@ -567,7 +563,6 @@ Output:
563
}
564
},
565
"property": {
570
- "type": "JSXIdentifier",
566
"name": "Bar",
567
"loc": {
568
"source": null,
@@ -666,6 +661,8 @@ Output:
661
"end": 56
662
}
663
},
664
+ "generator": false,
665
+ "async": false,
666
"loc": {
667
"source": null,
668
"start": {
@@ -683,7 +680,7 @@ Output:
680
}
681
}
682
],
686
- "comments": [],
683
+ "sourceType": "script",
684
"loc": {
685
"source": null,
686
"start": {