@@ -5,10 +5,9 @@ use either::Either;
5
5
use rustc_hash:: FxHashMap ;
6
6
use swc_atoms:: JsWord ;
7
7
use swc_common:: {
8
- chain, comments:: Comments , errors:: Handler , sync:: Lrc , util:: take:: Take , FileName , Mark ,
9
- SourceMap ,
8
+ comments:: Comments , errors:: Handler , sync:: Lrc , util:: take:: Take , FileName , Mark , SourceMap ,
10
9
} ;
11
- use swc_ecma_ast:: { EsVersion , Module , Script } ;
10
+ use swc_ecma_ast:: { EsVersion , Module , Pass , Script } ;
12
11
use swc_ecma_minifier:: option:: { terser:: TerserTopLevelOptions , MinifyOptions } ;
13
12
use swc_ecma_parser:: Syntax ;
14
13
use swc_ecma_transforms:: {
@@ -19,15 +18,15 @@ use swc_ecma_transforms::{
19
18
hygiene:: { self , hygiene_with_config} ,
20
19
modules:: { self , path:: ImportResolver } ,
21
20
optimization:: const_modules,
22
- pass:: Optional ,
23
21
resolver, Assumptions ,
24
22
} ;
25
- use swc_ecma_visit:: { as_folder, noop_visit_mut_type, VisitMut , VisitMutWith } ;
23
+ use swc_ecma_visit:: { noop_visit_mut_type, visit_mut_pass, VisitMut , VisitMutWith } ;
24
+ use swc_visit:: Optional ;
26
25
27
26
use crate :: config:: { GlobalPassOption , JsMinifyOptions , ModuleConfig } ;
28
27
29
28
/// Builder is used to create a high performance `Compiler`.
30
- pub struct PassBuilder < ' a , ' b , P : swc_ecma_visit :: Fold > {
29
+ pub struct PassBuilder < ' a , ' b , P : Pass > {
31
30
cm : & ' a Arc < SourceMap > ,
32
31
handler : & ' b Handler ,
33
32
env : Option < swc_ecma_preset_env:: Config > ,
@@ -48,7 +47,7 @@ pub struct PassBuilder<'a, 'b, P: swc_ecma_visit::Fold> {
48
47
regenerator : regenerator:: Config ,
49
48
}
50
49
51
- impl < ' a , ' b , P : swc_ecma_visit :: Fold > PassBuilder < ' a , ' b , P > {
50
+ impl < ' a , ' b , P : Pass > PassBuilder < ' a , ' b , P > {
52
51
pub fn new (
53
52
cm : & ' a Arc < SourceMap > ,
54
53
handler : & ' b Handler ,
@@ -76,11 +75,11 @@ impl<'a, 'b, P: swc_ecma_visit::Fold> PassBuilder<'a, 'b, P> {
76
75
}
77
76
}
78
77
79
- pub fn then < N > ( self , next : N ) -> PassBuilder < ' a , ' b , swc_visit :: AndThen < P , N > >
78
+ pub fn then < N > ( self , next : N ) -> PassBuilder < ' a , ' b , ( P , N ) >
80
79
where
81
- N : swc_ecma_visit :: Fold ,
80
+ N : Pass ,
82
81
{
83
- let pass = chain ! ( self . pass, next) ;
82
+ let pass = ( self . pass , next) ;
84
83
PassBuilder {
85
84
cm : self . cm ,
86
85
handler : self . handler ,
@@ -126,15 +125,12 @@ impl<'a, 'b, P: swc_ecma_visit::Fold> PassBuilder<'a, 'b, P> {
126
125
pub fn const_modules (
127
126
self ,
128
127
globals : FxHashMap < JsWord , FxHashMap < JsWord , String > > ,
129
- ) -> PassBuilder < ' a , ' b , impl swc_ecma_visit :: Fold > {
128
+ ) -> PassBuilder < ' a , ' b , ( P , impl Pass ) > {
130
129
let cm = self . cm . clone ( ) ;
131
130
self . then ( const_modules ( cm, globals) )
132
131
}
133
132
134
- pub fn inline_globals (
135
- self ,
136
- c : GlobalPassOption ,
137
- ) -> PassBuilder < ' a , ' b , impl swc_ecma_visit:: Fold > {
133
+ pub fn inline_globals ( self , c : GlobalPassOption ) -> PassBuilder < ' a , ' b , ( P , impl Pass ) > {
138
134
let pass = c. build ( self . cm , self . handler ) ;
139
135
self . then ( pass)
140
136
}
@@ -172,7 +168,7 @@ impl<'a, 'b, P: swc_ecma_visit::Fold> PassBuilder<'a, 'b, P> {
172
168
module : Option < ModuleConfig > ,
173
169
comments : Option < & ' cmt dyn Comments > ,
174
170
resolver : Option < ( FileName , Arc < dyn ImportResolver > ) > ,
175
- ) -> impl ' cmt + swc_ecma_visit :: Fold
171
+ ) -> impl ' cmt + Pass
176
172
where
177
173
P : ' cmt ,
178
174
{
@@ -206,7 +202,7 @@ impl<'a, 'b, P: swc_ecma_visit::Fold> PassBuilder<'a, 'b, P> {
206
202
207
203
feature_flag = enable_available_feature_from_es_version ( self . target ) ;
208
204
209
- Either :: Right ( chain ! (
205
+ Either :: Right ( (
210
206
Optional :: new (
211
207
compat:: class_fields_use_set:: class_fields_use_set ( assumptions. pure_getters ) ,
212
208
assumptions. set_public_class_fields ,
@@ -221,60 +217,60 @@ impl<'a, 'b, P: swc_ecma_visit::Fold> PassBuilder<'a, 'b, P> {
221
217
no_document_all : assumptions. no_document_all ,
222
218
static_blocks_mark : Mark :: new ( ) ,
223
219
pure_getter : assumptions. pure_getters ,
224
- }
220
+ } ,
225
221
} ,
226
- self . unresolved_mark
222
+ self . unresolved_mark ,
227
223
) ,
228
- should_enable( self . target, EsVersion :: Es2022 )
224
+ should_enable ( self . target , EsVersion :: Es2022 ) ,
229
225
) ,
230
226
Optional :: new (
231
227
compat:: es2021:: es2021 ( ) ,
232
- should_enable( self . target, EsVersion :: Es2021 )
228
+ should_enable ( self . target , EsVersion :: Es2021 ) ,
233
229
) ,
234
230
Optional :: new (
235
231
compat:: es2020:: es2020 (
236
232
compat:: es2020:: Config {
237
233
nullish_coalescing : compat:: es2020:: nullish_coalescing:: Config {
238
- no_document_all: assumptions. no_document_all
234
+ no_document_all : assumptions. no_document_all ,
239
235
} ,
240
236
optional_chaining : compat:: es2020:: optional_chaining:: Config {
241
237
no_document_all : assumptions. no_document_all ,
242
- pure_getter: assumptions. pure_getters
243
- }
238
+ pure_getter : assumptions. pure_getters ,
239
+ } ,
244
240
} ,
245
- self . unresolved_mark
241
+ self . unresolved_mark ,
246
242
) ,
247
- should_enable( self . target, EsVersion :: Es2020 )
243
+ should_enable ( self . target , EsVersion :: Es2020 ) ,
248
244
) ,
249
245
Optional :: new (
250
246
compat:: es2019:: es2019 ( ) ,
251
- should_enable( self . target, EsVersion :: Es2019 )
247
+ should_enable ( self . target , EsVersion :: Es2019 ) ,
252
248
) ,
253
249
Optional :: new (
254
250
compat:: es2018 ( compat:: es2018:: Config {
255
251
object_rest_spread : compat:: es2018:: object_rest_spread:: Config {
256
252
no_symbol : assumptions. object_rest_no_symbols ,
257
253
set_property : assumptions. set_spread_properties ,
258
- pure_getters: assumptions. pure_getters
259
- }
254
+ pure_getters : assumptions. pure_getters ,
255
+ } ,
260
256
} ) ,
261
- should_enable( self . target, EsVersion :: Es2018 )
257
+ should_enable ( self . target , EsVersion :: Es2018 ) ,
262
258
) ,
263
259
Optional :: new (
264
260
compat:: es2017 (
265
261
compat:: es2017:: Config {
266
262
async_to_generator : compat:: es2017:: async_to_generator:: Config {
267
263
ignore_function_name : assumptions. ignore_function_name ,
268
- ignore_function_length: assumptions. ignore_function_length
264
+ ignore_function_length : assumptions. ignore_function_length ,
269
265
} ,
270
266
} ,
271
- self . unresolved_mark
267
+ self . unresolved_mark ,
272
268
) ,
273
- should_enable( self . target, EsVersion :: Es2017 )
269
+ should_enable ( self . target , EsVersion :: Es2017 ) ,
274
270
) ,
275
271
Optional :: new (
276
272
compat:: es2016 ( ) ,
277
- should_enable( self . target, EsVersion :: Es2016 )
273
+ should_enable ( self . target , EsVersion :: Es2016 ) ,
278
274
) ,
279
275
Optional :: new (
280
276
compat:: es2015 (
@@ -286,36 +282,36 @@ impl<'a, 'b, P: swc_ecma_visit::Fold> PassBuilder<'a, 'b, P> {
286
282
no_class_calls : assumptions. no_class_calls ,
287
283
set_class_methods : assumptions. set_class_methods ,
288
284
super_is_callable_constructor : assumptions
289
- . super_is_callable_constructor
285
+ . super_is_callable_constructor ,
290
286
} ,
291
287
computed_props : compat:: es2015:: computed_props:: Config {
292
- loose: self . loose
288
+ loose : self . loose ,
293
289
} ,
294
290
for_of : compat:: es2015:: for_of:: Config {
295
291
assume_array : false ,
296
- loose: self . loose
292
+ loose : self . loose ,
297
293
} ,
298
294
spread : compat:: es2015:: spread:: Config { loose : self . loose } ,
299
295
destructuring : compat:: es2015:: destructuring:: Config {
300
- loose: self . loose
296
+ loose : self . loose ,
301
297
} ,
302
298
regenerator : self . regenerator ,
303
299
template_literal : compat:: es2015:: template_literal:: Config {
304
300
ignore_to_primitive : assumptions. ignore_to_primitive_hint ,
305
- mutable_template: assumptions. mutable_template_object
301
+ mutable_template : assumptions. mutable_template_object ,
306
302
} ,
307
303
parameters : compat:: es2015:: parameters:: Config {
308
304
ignore_function_length : assumptions. ignore_function_length ,
309
305
} ,
310
- typescript: syntax. typescript( )
311
- }
306
+ typescript : syntax. typescript ( ) ,
307
+ } ,
312
308
) ,
313
- should_enable( self . target, EsVersion :: Es2015 )
309
+ should_enable ( self . target , EsVersion :: Es2015 ) ,
314
310
) ,
315
311
Optional :: new (
316
312
compat:: es3 ( true ) ,
317
- cfg!( feature = "es3" ) && self . target == EsVersion :: Es3
318
- )
313
+ cfg ! ( feature = "es3" ) && self . target == EsVersion :: Es3 ,
314
+ ) ,
319
315
) )
320
316
} ;
321
317
@@ -325,21 +321,21 @@ impl<'a, 'b, P: swc_ecma_visit::Fold> PassBuilder<'a, 'b, P> {
325
321
. map ( |v| v. mangle . is_obj ( ) || v. mangle . is_true ( ) )
326
322
. unwrap_or ( false ) ;
327
323
328
- chain ! (
324
+ (
329
325
self . pass ,
330
326
Optional :: new (
331
327
paren_remover ( comments. map ( |v| v as & dyn Comments ) ) ,
332
- self . fixer
328
+ self . fixer ,
333
329
) ,
334
330
compat_pass,
335
331
// module / helper
336
332
Optional :: new (
337
333
modules:: import_analysis:: import_analyzer ( import_interop, ignore_dynamic) ,
338
- need_analyzer
334
+ need_analyzer,
339
335
) ,
340
336
Optional :: new (
341
337
helpers:: inject_helpers ( self . unresolved_mark ) ,
342
- self . inject_helpers
338
+ self . inject_helpers ,
343
339
) ,
344
340
ModuleConfig :: build (
345
341
self . cm . clone ( ) ,
@@ -349,7 +345,7 @@ impl<'a, 'b, P: swc_ecma_visit::Fold> PassBuilder<'a, 'b, P> {
349
345
feature_flag,
350
346
resolver,
351
347
) ,
352
- as_folder ( MinifierPass {
348
+ visit_mut_pass ( MinifierPass {
353
349
options : self . minify ,
354
350
cm : self . cm . clone ( ) ,
355
351
comments,
@@ -360,7 +356,7 @@ impl<'a, 'b, P: swc_ecma_visit::Fold> PassBuilder<'a, 'b, P> {
360
356
top_level_mark : self . top_level_mark ,
361
357
..self . hygiene . clone ( ) . unwrap_or_default ( )
362
358
} ) ,
363
- self . hygiene. is_some( ) && !is_mangler_enabled
359
+ self . hygiene . is_some ( ) && !is_mangler_enabled,
364
360
) ,
365
361
Optional :: new ( fixer ( comments. map ( |v| v as & dyn Comments ) ) , self . fixer ) ,
366
362
)
0 commit comments