1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
use crate::{expr::Expr, ident::Ident, prop::PropName, typescript::TsTypeAnn, Invalid};
use is_macro::Is;
use swc_common::{ast_node, Span};
#[ast_node]
#[derive(Eq, Hash, Is)]
pub enum Pat {
#[tag("Identifier")]
Ident(Ident),
#[tag("ArrayPattern")]
Array(ArrayPat),
#[tag("RestElement")]
Rest(RestPat),
#[tag("ObjectPattern")]
Object(ObjectPat),
#[tag("AssignmentPattern")]
Assign(AssignPat),
#[tag("Invalid")]
Invalid(Invalid),
#[tag("*")]
Expr(Box<Expr>),
}
#[ast_node("ArrayPattern")]
#[derive(Eq, Hash)]
pub struct ArrayPat {
pub span: Span,
#[serde(rename = "elements")]
pub elems: Vec<Option<Pat>>,
#[serde(rename = "optional")]
pub optional: bool,
#[serde(default, rename = "typeAnnotation")]
pub type_ann: Option<TsTypeAnn>,
}
#[ast_node("ObjectPattern")]
#[derive(Eq, Hash)]
pub struct ObjectPat {
pub span: Span,
#[serde(rename = "properties")]
pub props: Vec<ObjectPatProp>,
#[serde(rename = "optional")]
pub optional: bool,
#[serde(default, rename = "typeAnnotation")]
pub type_ann: Option<TsTypeAnn>,
}
#[ast_node("AssignmentPattern")]
#[derive(Eq, Hash)]
pub struct AssignPat {
pub span: Span,
pub left: Box<Pat>,
pub right: Box<Expr>,
#[serde(default, rename = "typeAnnotation")]
pub type_ann: Option<TsTypeAnn>,
}
#[ast_node("RestElement")]
#[derive(Eq, Hash)]
pub struct RestPat {
pub span: Span,
#[serde(rename = "rest")]
pub dot3_token: Span,
#[serde(rename = "argument")]
pub arg: Box<Pat>,
#[serde(default, rename = "typeAnnotation")]
pub type_ann: Option<TsTypeAnn>,
}
#[ast_node]
#[derive(Eq, Hash, Is)]
pub enum ObjectPatProp {
#[tag("KeyValuePatternProperty")]
KeyValue(KeyValuePatProp),
#[tag("AssignmentPatternProperty")]
Assign(AssignPatProp),
#[tag("RestElement")]
Rest(RestPat),
}
#[ast_node("KeyValuePatternProperty")]
#[derive(Eq, Hash)]
pub struct KeyValuePatProp {
#[span(lo)]
pub key: PropName,
#[span(hi)]
pub value: Box<Pat>,
}
#[ast_node("AssignmentPatternProperty")]
#[derive(Eq, Hash)]
pub struct AssignPatProp {
pub span: Span,
pub key: Ident,
#[serde(default)]
pub value: Option<Box<Expr>>,
}