@@ -15,7 +15,7 @@ type PatternVisitorCallback = (
15
15
16
16
type PatternVisitorOptions = VisitorOptions ;
17
17
class PatternVisitor extends Visitor {
18
- static isPattern (
18
+ public static isPattern (
19
19
node : TSESTree . Node ,
20
20
) : node is
21
21
| TSESTree . Identifier
@@ -55,54 +55,55 @@ class PatternVisitor extends Visitor {
55
55
this . callback = callback ;
56
56
}
57
57
58
- Identifier ( pattern : TSESTree . Identifier ) : void {
59
- const lastRestElement =
60
- this . restElements [ this . restElements . length - 1 ] ?? null ;
61
-
62
- this . callback ( pattern , {
63
- topLevel : pattern === this . rootPattern ,
64
- rest :
65
- lastRestElement !== null &&
66
- lastRestElement !== undefined &&
67
- lastRestElement . argument === pattern ,
68
- assignments : this . assignments ,
69
- } ) ;
70
- }
71
-
72
- Property ( property : TSESTree . Property ) : void {
73
- // Computed property's key is a right hand node.
74
- if ( property . computed ) {
75
- this . rightHandNodes . push ( property . key ) ;
76
- }
77
-
78
- // If it's shorthand, its key is same as its value.
79
- // If it's shorthand and has its default value, its key is same as its value.left (the value is AssignmentPattern).
80
- // If it's not shorthand, the name of new variable is its value's.
81
- this . visit ( property . value ) ;
58
+ protected ArrayExpression ( node : TSESTree . ArrayExpression ) : void {
59
+ node . elements . forEach ( this . visit , this ) ;
82
60
}
83
61
84
- ArrayPattern ( pattern : TSESTree . ArrayPattern ) : void {
62
+ protected ArrayPattern ( pattern : TSESTree . ArrayPattern ) : void {
85
63
for ( let i = 0 ; i < pattern . elements . length ; ++ i ) {
86
64
const element = pattern . elements [ i ] ;
87
65
88
66
this . visit ( element ) ;
89
67
}
90
68
}
91
69
92
- AssignmentPattern ( pattern : TSESTree . AssignmentPattern ) : void {
70
+ protected AssignmentExpression ( node : TSESTree . AssignmentExpression ) : void {
71
+ this . assignments . push ( node ) ;
72
+ this . visit ( node . left ) ;
73
+ this . rightHandNodes . push ( node . right ) ;
74
+ this . assignments . pop ( ) ;
75
+ }
76
+
77
+ protected AssignmentPattern ( pattern : TSESTree . AssignmentPattern ) : void {
93
78
this . assignments . push ( pattern ) ;
94
79
this . visit ( pattern . left ) ;
95
80
this . rightHandNodes . push ( pattern . right ) ;
96
81
this . assignments . pop ( ) ;
97
82
}
98
83
99
- RestElement ( pattern : TSESTree . RestElement ) : void {
100
- this . restElements . push ( pattern ) ;
101
- this . visit ( pattern . argument ) ;
102
- this . restElements . pop ( ) ;
84
+ protected CallExpression ( node : TSESTree . CallExpression ) : void {
85
+ // arguments are right hand nodes.
86
+ node . arguments . forEach ( a => {
87
+ this . rightHandNodes . push ( a ) ;
88
+ } ) ;
89
+ this . visit ( node . callee ) ;
103
90
}
104
91
105
- MemberExpression ( node : TSESTree . MemberExpression ) : void {
92
+ protected Identifier ( pattern : TSESTree . Identifier ) : void {
93
+ const lastRestElement =
94
+ this . restElements [ this . restElements . length - 1 ] ?? null ;
95
+
96
+ this . callback ( pattern , {
97
+ topLevel : pattern === this . rootPattern ,
98
+ rest :
99
+ lastRestElement !== null &&
100
+ lastRestElement !== undefined &&
101
+ lastRestElement . argument === pattern ,
102
+ assignments : this . assignments ,
103
+ } ) ;
104
+ }
105
+
106
+ protected MemberExpression ( node : TSESTree . MemberExpression ) : void {
106
107
// Computed property's key is a right hand node.
107
108
if ( node . computed ) {
108
109
this . rightHandNodes . push ( node . property ) ;
@@ -112,34 +113,26 @@ class PatternVisitor extends Visitor {
112
113
this . rightHandNodes . push ( node . object ) ;
113
114
}
114
115
115
- //
116
- // ForInStatement.left and AssignmentExpression.left are LeftHandSideExpression.
117
- // By spec, LeftHandSideExpression is Pattern or MemberExpression.
118
- // (see also: https://github.com/estree/estree/pull/20#issuecomment-74584758)
119
- // But espree 2.0 parses to ArrayExpression, ObjectExpression, etc...
120
- //
121
-
122
- SpreadElement ( node : TSESTree . SpreadElement ) : void {
123
- this . visit ( node . argument ) ;
124
- }
116
+ protected Property ( property : TSESTree . Property ) : void {
117
+ // Computed property's key is a right hand node.
118
+ if ( property . computed ) {
119
+ this . rightHandNodes . push ( property . key ) ;
120
+ }
125
121
126
- ArrayExpression ( node : TSESTree . ArrayExpression ) : void {
127
- node . elements . forEach ( this . visit , this ) ;
122
+ // If it's shorthand, its key is same as its value.
123
+ // If it's shorthand and has its default value, its key is same as its value.left (the value is AssignmentPattern).
124
+ // If it's not shorthand, the name of new variable is its value's.
125
+ this . visit ( property . value ) ;
128
126
}
129
127
130
- AssignmentExpression ( node : TSESTree . AssignmentExpression ) : void {
131
- this . assignments . push ( node ) ;
132
- this . visit ( node . left ) ;
133
- this . rightHandNodes . push ( node . right ) ;
134
- this . assignments . pop ( ) ;
128
+ protected RestElement ( pattern : TSESTree . RestElement ) : void {
129
+ this . restElements . push ( pattern ) ;
130
+ this . visit ( pattern . argument ) ;
131
+ this . restElements . pop ( ) ;
135
132
}
136
133
137
- CallExpression ( node : TSESTree . CallExpression ) : void {
138
- // arguments are right hand nodes.
139
- node . arguments . forEach ( a => {
140
- this . rightHandNodes . push ( a ) ;
141
- } ) ;
142
- this . visit ( node . callee ) ;
134
+ protected SpreadElement ( node : TSESTree . SpreadElement ) : void {
135
+ this . visit ( node . argument ) ;
143
136
}
144
137
}
145
138
0 commit comments