Skip to content

Commit 501e974

Browse files
committed
API for object rest spread
1 parent 567ffbf commit 501e974

File tree

3 files changed

+27
-9
lines changed

3 files changed

+27
-9
lines changed

crates/swc_ecma_transformer/src/es2018/mod.rs

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,23 @@
11
use swc_ecma_hooks::VisitMutHook;
2+
use swc_ecma_transforms_base::assumptions::Assumptions;
23

3-
use crate::TraverseCtx;
4+
use crate::{hook_utils::OptionalHook, TraverseCtx};
5+
6+
mod object_rest_spread;
47

58
#[derive(Debug, Default)]
69
#[non_exhaustive]
7-
pub struct Es2018Options {}
8-
9-
pub fn hook(options: Es2018Options) -> impl VisitMutHook<TraverseCtx> {
10-
Es2018Pass { options }
10+
pub struct Es2018Options {
11+
pub object_rest_spread: bool,
1112
}
1213

13-
struct Es2018Pass {
14+
pub(crate) fn hook(
1415
options: Es2018Options,
16+
assumptions: Assumptions,
17+
) -> impl VisitMutHook<TraverseCtx> {
18+
OptionalHook(if options.object_rest_spread {
19+
Some(self::object_rest_spread::hook(assumptions))
20+
} else {
21+
None
22+
})
1523
}
16-
17-
impl VisitMutHook<TraverseCtx> for Es2018Pass {}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
use swc_ecma_hooks::VisitMutHook;
2+
use swc_ecma_transforms_base::assumptions::Assumptions;
3+
4+
use crate::TraverseCtx;
5+
6+
pub fn hook(assumptions: Assumptions) -> impl VisitMutHook<TraverseCtx> {
7+
ObjectRestSpreadPass {}
8+
}
9+
10+
struct ObjectRestSpreadPass {}
11+
12+
impl VisitMutHook<TraverseCtx> for ObjectRestSpreadPass {}

crates/swc_ecma_transformer/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ pub fn transform_hook(options: Options) -> impl VisitMutHook<TraverseCtx> {
4343
let hook = hook.chain(crate::es2021::hook(options.env.es2021));
4444
let hook = hook.chain(crate::es2020::hook(options.env.es2020));
4545
let hook = hook.chain(crate::es2019::hook(options.env.es2019));
46-
let hook = hook.chain(crate::es2018::hook(options.env.es2018));
46+
let hook = hook.chain(crate::es2018::hook(options.env.es2018, options.assumptions));
4747
let hook = hook.chain(crate::es2017::hook(
4848
options.unresolved_ctxt,
4949
options.env.es2017,

0 commit comments

Comments
 (0)