11use oxc_ast:: {
2- ast:: { BindingIdentifier , BindingPattern , IdentifierReference } ,
2+ ast:: { AssignmentTarget , BindingIdentifier , BindingPattern , Expression , IdentifierReference } ,
33 NONE ,
44} ;
55use oxc_span:: { Atom , Span , SPAN } ;
@@ -58,11 +58,18 @@ impl<'a> BoundIdentifier<'a> {
5858 ctx. ast . binding_pattern ( binding_pattern_kind, NONE , false )
5959 }
6060
61+ // --- Read only ---
62+
6163 /// Create `IdentifierReference` referencing this binding, which is read from, with dummy `Span`
6264 pub fn create_read_reference ( & self , ctx : & mut TraverseCtx < ' a > ) -> IdentifierReference < ' a > {
6365 self . create_spanned_read_reference ( SPAN , ctx)
6466 }
6567
68+ /// Create `Expression::Identifier` referencing this binding, which is read from, with dummy `Span`
69+ pub fn create_read_expression ( & self , ctx : & mut TraverseCtx < ' a > ) -> Expression < ' a > {
70+ self . create_spanned_read_expression ( SPAN , ctx)
71+ }
72+
6673 /// Create `IdentifierReference` referencing this binding, which is read from, with specified `Span`
6774 pub fn create_spanned_read_reference (
6875 & self ,
@@ -72,12 +79,32 @@ impl<'a> BoundIdentifier<'a> {
7279 self . create_spanned_reference ( span, ReferenceFlags :: Read , ctx)
7380 }
7481
82+ /// Create `Expression::Identifier` referencing this binding, which is read from, with specified `Span`
83+ pub fn create_spanned_read_expression (
84+ & self ,
85+ span : Span ,
86+ ctx : & mut TraverseCtx < ' a > ,
87+ ) -> Expression < ' a > {
88+ self . create_spanned_expression ( span, ReferenceFlags :: Read , ctx)
89+ }
90+
91+ // --- Write only ---
92+
7593 /// Create `IdentifierReference` referencing this binding, which is written to, with dummy `Span`
76- #[ allow( unused) ]
7794 pub fn create_write_reference ( & self , ctx : & mut TraverseCtx < ' a > ) -> IdentifierReference < ' a > {
7895 self . create_spanned_write_reference ( SPAN , ctx)
7996 }
8097
98+ /// Create `Expression::Identifier` referencing this binding, which is written to, with dummy `Span`
99+ pub fn create_write_expression ( & self , ctx : & mut TraverseCtx < ' a > ) -> Expression < ' a > {
100+ self . create_spanned_write_expression ( SPAN , ctx)
101+ }
102+
103+ /// Create `AssignmentTarget` referencing this binding, which is written to, with dummy `Span`
104+ pub fn create_write_target ( & self , ctx : & mut TraverseCtx < ' a > ) -> AssignmentTarget < ' a > {
105+ self . create_spanned_write_target ( SPAN , ctx)
106+ }
107+
81108 /// Create `IdentifierReference` referencing this binding, which is written to, with specified `Span`
82109 pub fn create_spanned_write_reference (
83110 & self ,
@@ -87,16 +114,47 @@ impl<'a> BoundIdentifier<'a> {
87114 self . create_spanned_reference ( span, ReferenceFlags :: Write , ctx)
88115 }
89116
117+ /// Create `Expression::Identifier` referencing this binding, which is written to, with specified `Span`
118+ pub fn create_spanned_write_expression (
119+ & self ,
120+ span : Span ,
121+ ctx : & mut TraverseCtx < ' a > ,
122+ ) -> Expression < ' a > {
123+ self . create_spanned_expression ( span, ReferenceFlags :: Write , ctx)
124+ }
125+
126+ /// Create `AssignmentTarget` referencing this binding, which is written to, with specified `Span`
127+ pub fn create_spanned_write_target (
128+ & self ,
129+ span : Span ,
130+ ctx : & mut TraverseCtx < ' a > ,
131+ ) -> AssignmentTarget < ' a > {
132+ self . create_spanned_target ( span, ReferenceFlags :: Write , ctx)
133+ }
134+
135+ // --- Read and write ---
136+
90137 /// Create `IdentifierReference` referencing this binding, which is read from + written to,
91138 /// with dummy `Span`
92- #[ allow( unused) ]
93139 pub fn create_read_write_reference (
94140 & self ,
95141 ctx : & mut TraverseCtx < ' a > ,
96142 ) -> IdentifierReference < ' a > {
97143 self . create_spanned_read_write_reference ( SPAN , ctx)
98144 }
99145
146+ /// Create `Expression::Identifier` referencing this binding, which is read from + written to,
147+ /// with dummy `Span`
148+ pub fn create_read_write_expression ( & self , ctx : & mut TraverseCtx < ' a > ) -> Expression < ' a > {
149+ self . create_spanned_read_write_expression ( SPAN , ctx)
150+ }
151+
152+ /// Create `AssignmentTarget` referencing this binding, which is read from + written to,
153+ /// with dummy `Span`
154+ pub fn create_read_write_target ( & self , ctx : & mut TraverseCtx < ' a > ) -> AssignmentTarget < ' a > {
155+ self . create_spanned_read_write_target ( SPAN , ctx)
156+ }
157+
100158 /// Create `IdentifierReference` referencing this binding, which is read from + written to,
101159 /// with specified `Span`
102160 pub fn create_spanned_read_write_reference (
@@ -107,6 +165,28 @@ impl<'a> BoundIdentifier<'a> {
107165 self . create_spanned_reference ( span, ReferenceFlags :: Read | ReferenceFlags :: Write , ctx)
108166 }
109167
168+ /// Create `Expression::Identifier` referencing this binding, which is read from + written to,
169+ /// with specified `Span`
170+ pub fn create_spanned_read_write_expression (
171+ & self ,
172+ span : Span ,
173+ ctx : & mut TraverseCtx < ' a > ,
174+ ) -> Expression < ' a > {
175+ self . create_spanned_expression ( span, ReferenceFlags :: Read | ReferenceFlags :: Write , ctx)
176+ }
177+
178+ /// Create `AssignmentTarget` referencing this binding, which is read from + written to,
179+ /// with specified `Span`
180+ pub fn create_spanned_read_write_target (
181+ & self ,
182+ span : Span ,
183+ ctx : & mut TraverseCtx < ' a > ,
184+ ) -> AssignmentTarget < ' a > {
185+ self . create_spanned_target ( span, ReferenceFlags :: Read | ReferenceFlags :: Write , ctx)
186+ }
187+
188+ // --- Specified ReferenceFlags ---
189+
110190 /// Create `IdentifierReference` referencing this binding, with specified `ReferenceFlags`
111191 pub fn create_reference (
112192 & self ,
@@ -116,6 +196,24 @@ impl<'a> BoundIdentifier<'a> {
116196 self . create_spanned_reference ( SPAN , flags, ctx)
117197 }
118198
199+ /// Create `Expression::Identifier` referencing this binding, with specified `ReferenceFlags`
200+ pub fn create_expression (
201+ & self ,
202+ flags : ReferenceFlags ,
203+ ctx : & mut TraverseCtx < ' a > ,
204+ ) -> Expression < ' a > {
205+ self . create_spanned_expression ( SPAN , flags, ctx)
206+ }
207+
208+ /// Create `AssignmentTarget` referencing this binding, with specified `ReferenceFlags`
209+ pub fn create_target (
210+ & self ,
211+ flags : ReferenceFlags ,
212+ ctx : & mut TraverseCtx < ' a > ,
213+ ) -> AssignmentTarget < ' a > {
214+ self . create_spanned_target ( SPAN , flags, ctx)
215+ }
216+
119217 /// Create `IdentifierReference` referencing this binding, with specified `Span` and `ReferenceFlags`
120218 pub fn create_spanned_reference (
121219 & self ,
@@ -125,4 +223,26 @@ impl<'a> BoundIdentifier<'a> {
125223 ) -> IdentifierReference < ' a > {
126224 ctx. create_bound_reference_id ( span, self . name . clone ( ) , self . symbol_id , flags)
127225 }
226+
227+ /// Create `Expression::Identifier` referencing this binding, with specified `Span` and `ReferenceFlags`
228+ pub fn create_spanned_expression (
229+ & self ,
230+ span : Span ,
231+ flags : ReferenceFlags ,
232+ ctx : & mut TraverseCtx < ' a > ,
233+ ) -> Expression < ' a > {
234+ let ident = self . create_spanned_reference ( span, flags, ctx) ;
235+ ctx. ast . expression_from_identifier_reference ( ident)
236+ }
237+
238+ /// Create `Expression::Identifier` referencing this binding, with specified `Span` and `ReferenceFlags`
239+ pub fn create_spanned_target (
240+ & self ,
241+ span : Span ,
242+ flags : ReferenceFlags ,
243+ ctx : & mut TraverseCtx < ' a > ,
244+ ) -> AssignmentTarget < ' a > {
245+ let ident = self . create_spanned_reference ( span, flags, ctx) ;
246+ AssignmentTarget :: from ( ctx. ast . simple_assignment_target_from_identifier_reference ( ident) )
247+ }
128248}
0 commit comments