From 0cee0e1af7f8c476fe3622e687e6b953aef8cd31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Fri, 25 Nov 2022 20:28:01 +0900 Subject: [PATCH] fix(es/visit): Visit TypeScript satisfies expressions (#6511) --- crates/swc_ecma_transforms_base/src/resolver/mod.rs | 8 ++++++++ .../tests/ts-resolver/stc/2/input.ts | 11 +++++++++++ .../tests/ts-resolver/stc/2/output.ts | 8 ++++++++ .../tests/ts-resolver/stc/3/input.ts | 11 +++++++++++ .../tests/ts-resolver/stc/3/output.ts | 8 ++++++++ crates/swc_ecma_visit/src/lib.rs | 6 ++++++ 6 files changed, 52 insertions(+) create mode 100644 crates/swc_ecma_transforms_base/tests/ts-resolver/stc/2/input.ts create mode 100644 crates/swc_ecma_transforms_base/tests/ts-resolver/stc/2/output.ts create mode 100644 crates/swc_ecma_transforms_base/tests/ts-resolver/stc/3/input.ts create mode 100644 crates/swc_ecma_transforms_base/tests/ts-resolver/stc/3/output.ts diff --git a/crates/swc_ecma_transforms_base/src/resolver/mod.rs b/crates/swc_ecma_transforms_base/src/resolver/mod.rs index c9fbbbca5825..ce58b1d34d44 100644 --- a/crates/swc_ecma_transforms_base/src/resolver/mod.rs +++ b/crates/swc_ecma_transforms_base/src/resolver/mod.rs @@ -1133,6 +1133,14 @@ impl<'a> VisitMut for Resolver<'a> { n.expr.visit_mut_with(self); } + fn visit_mut_ts_satisfies_expr(&mut self, n: &mut TsSatisfiesExpr) { + if self.config.handle_types { + n.type_ann.visit_mut_with(self); + } + + n.expr.visit_mut_with(self); + } + fn visit_mut_ts_call_signature_decl(&mut self, n: &mut TsCallSignatureDecl) { if !self.config.handle_types { return; diff --git a/crates/swc_ecma_transforms_base/tests/ts-resolver/stc/2/input.ts b/crates/swc_ecma_transforms_base/tests/ts-resolver/stc/2/input.ts new file mode 100644 index 000000000000..a3dbaf484a8a --- /dev/null +++ b/crates/swc_ecma_transforms_base/tests/ts-resolver/stc/2/input.ts @@ -0,0 +1,11 @@ +type Movable = { + move(distance: number): void; +}; + +const car = { + start() { }, + move(d) { + // d should be number + }, + stop() { } +} satisfies Movable & Record; diff --git a/crates/swc_ecma_transforms_base/tests/ts-resolver/stc/2/output.ts b/crates/swc_ecma_transforms_base/tests/ts-resolver/stc/2/output.ts new file mode 100644 index 000000000000..116681a13d8b --- /dev/null +++ b/crates/swc_ecma_transforms_base/tests/ts-resolver/stc/2/output.ts @@ -0,0 +1,8 @@ +type Movable__1 = { + move__0(distance: number): void; +}; +const car__1 = { + start () {}, + move (d__3) {}, + stop () {} +} satisfies Movable__1 & Record; diff --git a/crates/swc_ecma_transforms_base/tests/ts-resolver/stc/3/input.ts b/crates/swc_ecma_transforms_base/tests/ts-resolver/stc/3/input.ts new file mode 100644 index 000000000000..3c286bc680cf --- /dev/null +++ b/crates/swc_ecma_transforms_base/tests/ts-resolver/stc/3/input.ts @@ -0,0 +1,11 @@ +type Movable = { + move(distance: number): void; +}; + +const car = { + start() { }, + move(d) { + // d should be number + }, + stop() { } +} as Movable & Record; diff --git a/crates/swc_ecma_transforms_base/tests/ts-resolver/stc/3/output.ts b/crates/swc_ecma_transforms_base/tests/ts-resolver/stc/3/output.ts new file mode 100644 index 000000000000..9b84927bf215 --- /dev/null +++ b/crates/swc_ecma_transforms_base/tests/ts-resolver/stc/3/output.ts @@ -0,0 +1,8 @@ +type Movable__1 = { + move__0(distance: number): void; +}; +const car__1 = { + start () {}, + move (d__3) {}, + stop () {} +} as Movable__1 & Record; diff --git a/crates/swc_ecma_visit/src/lib.rs b/crates/swc_ecma_visit/src/lib.rs index 6d4d76a85661..ddde6e709ade 100644 --- a/crates/swc_ecma_visit/src/lib.rs +++ b/crates/swc_ecma_visit/src/lib.rs @@ -1816,6 +1816,12 @@ define!({ pub type_args: Box, } + pub struct TsSatisfiesExpr { + pub span: Span, + pub expr: Box, + pub type_ann: Box, + } + pub struct ReservedUnused { pub span: Span, pub body: Option>,