fix(transformer/typescript): modifiers should not be removed (#3005)

`codegen` relies on the modifier to decide whether to print or not. For
example, if declare is present, nothing will be printed if typescript is
not enabled.

We may need to solve this problem in a way that doesn't rely on
modifers.
This commit is contained in:
Dunqing 2024-04-16 18:33:13 +08:00 committed by GitHub
parent ae9d681b4d
commit 99e038cfc0
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 6 additions and 15 deletions

View file

@ -88,15 +88,10 @@ impl<'a> TypeScriptAnnotations<'a> {
decl.export_kind.is_type() decl.export_kind.is_type()
|| ((decl.declaration.is_none() || ((decl.declaration.is_none()
|| decl.declaration.as_ref().is_some_and(|d| { || decl
d.modifiers().is_some_and(|modifiers| { .declaration
modifiers.contains(ModifierKind::Declare) .as_ref()
}) || matches!( .is_some_and(Declaration::is_typescript_syntax))
d,
Declaration::TSInterfaceDeclaration(_)
| Declaration::TSTypeAliasDeclaration(_)
)
}))
&& decl.specifiers.is_empty()) && decl.specifiers.is_empty())
} }
ModuleDeclaration::ImportDeclaration(decl) => { ModuleDeclaration::ImportDeclaration(decl) => {
@ -196,7 +191,6 @@ impl<'a> TypeScriptAnnotations<'a> {
class.type_parameters = None; class.type_parameters = None;
class.super_type_parameters = None; class.super_type_parameters = None;
class.implements = None; class.implements = None;
class.modifiers.remove_type_modifiers();
} }
pub fn transform_class_body(&mut self, body: &mut ClassBody<'a>) { pub fn transform_class_body(&mut self, body: &mut ClassBody<'a>) {
@ -236,7 +230,6 @@ impl<'a> TypeScriptAnnotations<'a> {
func.this_param = None; func.this_param = None;
func.type_parameters = None; func.type_parameters = None;
func.return_type = None; func.return_type = None;
func.modifiers.remove_type_modifiers();
} }
pub fn transform_jsx_opening_element(&mut self, elem: &mut JSXOpeningElement<'a>) { pub fn transform_jsx_opening_element(&mut self, elem: &mut JSXOpeningElement<'a>) {

View file

@ -1,4 +1,4 @@
Passed: 134/217 Passed: 136/217
# All Passed: # All Passed:
* babel-plugin-transform-react-jsx-source * babel-plugin-transform-react-jsx-source
@ -16,7 +16,7 @@ Passed: 134/217
* opts/optimizeConstEnums/input.ts * opts/optimizeConstEnums/input.ts
* opts/rewriteImportExtensions/input.ts * opts/rewriteImportExtensions/input.ts
# babel-plugin-transform-typescript (80/147) # babel-plugin-transform-typescript (82/147)
* class/abstract-allowDeclareFields-false/input.ts * class/abstract-allowDeclareFields-false/input.ts
* class/abstract-allowDeclareFields-true/input.ts * class/abstract-allowDeclareFields-true/input.ts
* class/abstract-class-decorated/input.ts * class/abstract-class-decorated/input.ts
@ -31,9 +31,7 @@ Passed: 134/217
* class/parameter-properties-with-super/input.ts * class/parameter-properties-with-super/input.ts
* class/private-method-override-transform-private/input.ts * class/private-method-override-transform-private/input.ts
* class/transform-properties-declare-wrong-order/input.ts * class/transform-properties-declare-wrong-order/input.ts
* declarations/erased/input.ts
* declarations/nested-namespace/input.mjs * declarations/nested-namespace/input.mjs
* exports/declare-shadowed/input.ts
* exports/declared-types/input.ts * exports/declared-types/input.ts
* exports/export-const-enums/input.ts * exports/export-const-enums/input.ts
* exports/export-type-star-from/input.ts * exports/export-type-star-from/input.ts