From 636585b44d0f74f457b44766f8d6fda68bcc4c09 Mon Sep 17 00:00:00 2001 From: David Sherret Date: Mon, 29 Jul 2024 21:36:17 -0400 Subject: [PATCH] fix(es/codegen): Emit question token for class methods (#9342) --- .changeset/tall-cooks-speak.md | 6 ++++++ crates/swc_ecma_codegen/src/lib.rs | 4 ++++ .../tests/fixture/typescript/class_method/input.js | 2 +- .../tests/fixture/typescript/class_method/output.js | 2 +- .../tests/fixture/typescript/class_method/output.min.js | 2 +- crates/swc_ecma_transforms_typescript/src/strip_type.rs | 1 + 6 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 .changeset/tall-cooks-speak.md diff --git a/.changeset/tall-cooks-speak.md b/.changeset/tall-cooks-speak.md new file mode 100644 index 000000000000..bc3b06eae02b --- /dev/null +++ b/.changeset/tall-cooks-speak.md @@ -0,0 +1,6 @@ +--- +swc_ecma_codegen: patch +swc_ecma_transforms_typescript: patch +--- + +fix(es/codegen): Emit question token for class methods diff --git a/crates/swc_ecma_codegen/src/lib.rs b/crates/swc_ecma_codegen/src/lib.rs index 3a9737fef6c5..f2901a69464a 100644 --- a/crates/swc_ecma_codegen/src/lib.rs +++ b/crates/swc_ecma_codegen/src/lib.rs @@ -1599,6 +1599,10 @@ where } } + if n.is_optional { + punct!("?"); + } + if let Some(type_params) = &n.function.type_params { emit!(type_params); } diff --git a/crates/swc_ecma_codegen/tests/fixture/typescript/class_method/input.js b/crates/swc_ecma_codegen/tests/fixture/typescript/class_method/input.js index 8ae861559ba8..51baf161b6b8 100644 --- a/crates/swc_ecma_codegen/tests/fixture/typescript/class_method/input.js +++ b/crates/swc_ecma_codegen/tests/fixture/typescript/class_method/input.js @@ -1,5 +1,5 @@ class MyClass extends Base { public override method(param: number): string { } - public abstract override log(msg: string): void; + public abstract override log?(msg: string): TValue; } diff --git a/crates/swc_ecma_codegen/tests/fixture/typescript/class_method/output.js b/crates/swc_ecma_codegen/tests/fixture/typescript/class_method/output.js index afa69c78aceb..d2efd95d7ba3 100644 --- a/crates/swc_ecma_codegen/tests/fixture/typescript/class_method/output.js +++ b/crates/swc_ecma_codegen/tests/fixture/typescript/class_method/output.js @@ -1,4 +1,4 @@ class MyClass extends Base { public override method(param: number): string {} - public abstract override log(msg: string): void; + public abstract override log?(msg: string): TValue; } diff --git a/crates/swc_ecma_codegen/tests/fixture/typescript/class_method/output.min.js b/crates/swc_ecma_codegen/tests/fixture/typescript/class_method/output.min.js index c59261408b32..69933daf3dbc 100644 --- a/crates/swc_ecma_codegen/tests/fixture/typescript/class_method/output.min.js +++ b/crates/swc_ecma_codegen/tests/fixture/typescript/class_method/output.min.js @@ -1 +1 @@ -class MyClass extends Base{public override method(param:number):string{}public abstract override log(msg:string):void} +class MyClass extends Base{public override method(param:number):string{}public abstract override log?(msg:string):TValue} diff --git a/crates/swc_ecma_transforms_typescript/src/strip_type.rs b/crates/swc_ecma_transforms_typescript/src/strip_type.rs index 12c7e96ca93a..a6d0a6429263 100644 --- a/crates/swc_ecma_transforms_typescript/src/strip_type.rs +++ b/crates/swc_ecma_transforms_typescript/src/strip_type.rs @@ -84,6 +84,7 @@ impl VisitMut for StripType { n.accessibility = None; n.is_override = false; n.is_abstract = false; + n.is_optional = false; n.visit_mut_children_with(self); }