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
use crate::{expr::Expr, ident::Ident, prop::PropName, typescript::TsTypeAnn};
use swc_common::{ast_node, Span};
#[ast_node]
pub enum Pat {
Ident(Ident),
Array(ArrayPat),
Rest(RestPat),
Object(ObjectPat),
Assign(AssignPat),
Expr(Box<Expr>),
}
#[ast_node("ArrayPattern")]
pub struct ArrayPat {
#[serde(default)]
pub span: Span,
#[serde(rename = "elements")]
pub elems: Vec<(Option<Pat>)>,
#[serde(
default,
rename = "typeAnnotation",
skip_serializing_if = "Option::is_none"
)]
pub type_ann: Option<TsTypeAnn>,
}
#[ast_node("ObjectPattern")]
pub struct ObjectPat {
#[serde(default)]
pub span: Span,
#[serde(rename = "properties")]
pub props: Vec<ObjectPatProp>,
#[serde(
default,
rename = "typeAnnotation",
skip_serializing_if = "Option::is_none"
)]
pub type_ann: Option<TsTypeAnn>,
}
#[ast_node("AssignmentPattern")]
pub struct AssignPat {
#[serde(default)]
pub span: Span,
pub left: Box<Pat>,
pub right: Box<Expr>,
#[serde(
default,
rename = "typeAnnotation",
skip_serializing_if = "Option::is_none"
)]
pub type_ann: Option<TsTypeAnn>,
}
#[ast_node("RestElement")]
pub struct RestPat {
#[serde(rename = "rest")]
#[span(lo)]
pub dot3_token: Span,
#[serde(rename = "argument")]
#[span(hi)]
pub arg: Box<Pat>,
#[serde(
default,
rename = "typeAnnotation",
skip_serializing_if = "Option::is_none"
)]
pub type_ann: Option<TsTypeAnn>,
}
#[ast_node]
pub enum ObjectPatProp {
KeyValue(KeyValuePatProp),
Assign(AssignPatProp),
Rest(RestPat),
}
#[ast_node("KeyValuePatternProperty")]
pub struct KeyValuePatProp {
#[span(lo)]
pub key: PropName,
#[span(hi)]
pub value: Box<Pat>,
}
#[ast_node("AssignmentPatternProperty")]
pub struct AssignPatProp {
#[serde(default)]
pub span: Span,
pub key: Ident,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub value: Option<Box<Expr>>,
}