From 29ba05d137c606f9e67fec9db8bd2377671900e1 Mon Sep 17 00:00:00 2001 From: HeYunfei Date: Thu, 8 Dec 2022 07:40:40 +0800 Subject: [PATCH] fix(es/resolver): Reset `in_type` flag correctly (#6597) --- crates/swc_ecma_transforms_base/src/resolver/mod.rs | 2 ++ .../tests/ts-resolver/issues/6533/input.ts | 7 +++++++ .../tests/ts-resolver/issues/6533/output.ts | 6 ++++++ 3 files changed, 15 insertions(+) create mode 100644 crates/swc_ecma_transforms_base/tests/ts-resolver/issues/6533/input.ts create mode 100644 crates/swc_ecma_transforms_base/tests/ts-resolver/issues/6533/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 ce58b1d34d44..5cc9058e4472 100644 --- a/crates/swc_ecma_transforms_base/src/resolver/mod.rs +++ b/crates/swc_ecma_transforms_base/src/resolver/mod.rs @@ -974,8 +974,10 @@ impl<'a> VisitMut for Resolver<'a> { // Always resolve the import declaration identifiers even if it's type only. // We need to analyze these identifiers for type stripping purposes. self.ident_type = IdentType::Binding; + let old_in_type = self.in_type; self.in_type = n.type_only; n.visit_mut_children_with(self); + self.in_type = old_in_type; } fn visit_mut_import_named_specifier(&mut self, s: &mut ImportNamedSpecifier) { diff --git a/crates/swc_ecma_transforms_base/tests/ts-resolver/issues/6533/input.ts b/crates/swc_ecma_transforms_base/tests/ts-resolver/issues/6533/input.ts new file mode 100644 index 000000000000..811a2ec8ac23 --- /dev/null +++ b/crates/swc_ecma_transforms_base/tests/ts-resolver/issues/6533/input.ts @@ -0,0 +1,7 @@ +import * as F from "foo"; +import type { Thing } from "anywhere"; +console.log(F) + +export const inner = (a: F) => { + console.log(F) +}; \ No newline at end of file diff --git a/crates/swc_ecma_transforms_base/tests/ts-resolver/issues/6533/output.ts b/crates/swc_ecma_transforms_base/tests/ts-resolver/issues/6533/output.ts new file mode 100644 index 000000000000..24522dbf2b90 --- /dev/null +++ b/crates/swc_ecma_transforms_base/tests/ts-resolver/issues/6533/output.ts @@ -0,0 +1,6 @@ +import * as F__1 from "foo"; +import { Thing__1 } from "anywhere"; +console.log(F__1); +export const inner__1 = (a__3: F__3)=>{ + console.log(F__1); +};