mirror of
https://github.com/danbulant/oxc
synced 2026-05-19 12:19:15 +00:00
fix(transformer/typescript): should strip import specifiers type with only_remove_type_imports (#8141)
close: https://github.com/oxc-project/oxc/issues/8140 close: https://github.com/rolldown/rolldown/issues/3244 --------- Co-authored-by: Dunqing <dengqing0821@gmail.com>
This commit is contained in:
parent
f87da160df
commit
2e7207f11c
2 changed files with 27 additions and 6 deletions
|
|
@ -95,8 +95,6 @@ impl<'a, 'ctx> Traverse<'a> for TypeScriptAnnotations<'a, 'ctx> {
|
|||
Statement::ImportDeclaration(decl) => {
|
||||
if decl.import_kind.is_type() {
|
||||
false
|
||||
} else if self.only_remove_type_imports {
|
||||
true
|
||||
} else if let Some(specifiers) = &mut decl.specifiers {
|
||||
if specifiers.is_empty() {
|
||||
// import {} from 'mod' -> import 'mod'
|
||||
|
|
@ -118,9 +116,28 @@ impl<'a, 'ctx> Traverse<'a> for TypeScriptAnnotations<'a, 'ctx> {
|
|||
&s.local
|
||||
}
|
||||
};
|
||||
self.has_value_reference(&id.name, ctx)
|
||||
// If `only_remove_type_imports` is true, then we can return `true` to keep it because
|
||||
// it is not a type import, otherwise we need to check if the identifier is referenced
|
||||
if self.only_remove_type_imports {
|
||||
true
|
||||
} else {
|
||||
self.has_value_reference(&id.name, ctx)
|
||||
}
|
||||
});
|
||||
!specifiers.is_empty()
|
||||
|
||||
if specifiers.is_empty() {
|
||||
// `import { type A } from 'mod'`
|
||||
if self.only_remove_type_imports {
|
||||
// -> `import 'mod'`
|
||||
decl.specifiers = None;
|
||||
true
|
||||
} else {
|
||||
// Remove the import declaration if all specifiers are removed
|
||||
false
|
||||
}
|
||||
} else {
|
||||
true
|
||||
}
|
||||
}
|
||||
} else {
|
||||
true
|
||||
|
|
|
|||
|
|
@ -2173,7 +2173,9 @@ after transform: []
|
|||
rebuilt : ["require"]
|
||||
|
||||
* imports/only-remove-type-imports/input.ts
|
||||
x Output mismatch
|
||||
Bindings mismatch:
|
||||
after transform: ScopeId(0): ["H", "I", "I2", "J", "K1", "K2", "L1", "L2", "L3", "a", "b", "c2", "d", "d2", "e", "e4"]
|
||||
rebuilt : ScopeId(0): ["L2", "a", "b", "c2", "d", "d2", "e", "e4"]
|
||||
|
||||
* imports/property-signature/input.ts
|
||||
Bindings mismatch:
|
||||
|
|
@ -2204,7 +2206,9 @@ after transform: ScopeId(0): ["Foo1", "Foo2"]
|
|||
rebuilt : ScopeId(0): []
|
||||
|
||||
* imports/type-only-import-specifier-4/input.ts
|
||||
x Output mismatch
|
||||
Bindings mismatch:
|
||||
after transform: ScopeId(0): ["A"]
|
||||
rebuilt : ScopeId(0): []
|
||||
|
||||
* lvalues/TSTypeParameterInstantiation/input.ts
|
||||
Symbol reference IDs mismatch for "AbstractClass":
|
||||
|
|
|
|||
Loading…
Reference in a new issue