From 2307a4d4d3def405c4a04726272e14d998880abb Mon Sep 17 00:00:00 2001 From: CPunisher <1343316114@qq.com> Date: Tue, 31 Dec 2024 17:10:52 +0800 Subject: [PATCH] fix(typescript): Fix wrong check for super class (#9822) - Closes https://github.com/swc-project/swc/issues/9817 --- .changeset/blue-rules-eat.md | 6 ++++++ .../swc_typescript/examples/isolated_declarations.rs | 7 +++++-- crates/swc_typescript/src/fast_dts/class.rs | 2 +- crates/swc_typescript/tests/fixture/issues/9817.snap | 10 ++++++++++ crates/swc_typescript/tests/fixture/issues/9817.tsx | 8 ++++++++ crates/swc_typescript/tests/typescript.rs | 8 ++++++-- 6 files changed, 36 insertions(+), 5 deletions(-) create mode 100644 .changeset/blue-rules-eat.md create mode 100644 crates/swc_typescript/tests/fixture/issues/9817.snap create mode 100644 crates/swc_typescript/tests/fixture/issues/9817.tsx diff --git a/.changeset/blue-rules-eat.md b/.changeset/blue-rules-eat.md new file mode 100644 index 000000000000..be889fbdb436 --- /dev/null +++ b/.changeset/blue-rules-eat.md @@ -0,0 +1,6 @@ +--- +swc_core: patch +swc_typescript: patch +--- + +fix(typescript): Fix wrong check for super class diff --git a/crates/swc_typescript/examples/isolated_declarations.rs b/crates/swc_typescript/examples/isolated_declarations.rs index 367a21b544f6..0ffb9a987c97 100644 --- a/crates/swc_typescript/examples/isolated_declarations.rs +++ b/crates/swc_typescript/examples/isolated_declarations.rs @@ -2,7 +2,7 @@ use std::{env, path::Path}; use swc_common::{comments::SingleThreadedComments, Mark}; use swc_ecma_codegen::to_code_with_comments; -use swc_ecma_parser::{parse_file_as_program, Syntax}; +use swc_ecma_parser::{parse_file_as_program, Syntax, TsSyntax}; use swc_ecma_transforms_base::{fixer::paren_remover, resolver}; use swc_typescript::fast_dts::{FastDts, FastDtsOptions}; @@ -18,7 +18,10 @@ pub fn main() { let comments = SingleThreadedComments::default(); let mut program = parse_file_as_program( &fm, - Syntax::Typescript(Default::default()), + Syntax::Typescript(TsSyntax { + tsx: true, + ..Default::default() + }), Default::default(), Some(&comments), &mut Vec::new(), diff --git a/crates/swc_typescript/src/fast_dts/class.rs b/crates/swc_typescript/src/fast_dts/class.rs index 56d5bae6f706..f2d2ae18e8f2 100644 --- a/crates/swc_typescript/src/fast_dts/class.rs +++ b/crates/swc_typescript/src/fast_dts/class.rs @@ -33,7 +33,7 @@ impl FastDts { } _ => {} } - break object.is_ident(); + break !object.is_ident(); } } _ => true, diff --git a/crates/swc_typescript/tests/fixture/issues/9817.snap b/crates/swc_typescript/tests/fixture/issues/9817.snap new file mode 100644 index 000000000000..27028aa436fc --- /dev/null +++ b/crates/swc_typescript/tests/fixture/issues/9817.snap @@ -0,0 +1,10 @@ +```==================== .D.TS ==================== + +import React from "react"; +export declare class Component extends React.PureComponent<{ +}, { +}> { + render(): React.ReactNode; +} + + diff --git a/crates/swc_typescript/tests/fixture/issues/9817.tsx b/crates/swc_typescript/tests/fixture/issues/9817.tsx new file mode 100644 index 000000000000..44e6ac84a007 --- /dev/null +++ b/crates/swc_typescript/tests/fixture/issues/9817.tsx @@ -0,0 +1,8 @@ +import React from "react"; + +export class Component extends React.PureComponent<{}, {}> { + + render(): React.ReactNode { + return
Hello world
; + } +} \ No newline at end of file diff --git a/crates/swc_typescript/tests/typescript.rs b/crates/swc_typescript/tests/typescript.rs index 8c38c903b93d..a31ccc3fbebb 100644 --- a/crates/swc_typescript/tests/typescript.rs +++ b/crates/swc_typescript/tests/typescript.rs @@ -2,12 +2,13 @@ use std::path::PathBuf; use swc_common::{comments::SingleThreadedComments, Mark}; use swc_ecma_codegen::to_code_with_comments; -use swc_ecma_parser::{parse_file_as_program, Syntax}; +use swc_ecma_parser::{parse_file_as_program, Syntax, TsSyntax}; use swc_ecma_transforms_base::{fixer::paren_remover, resolver}; use swc_typescript::fast_dts::{FastDts, FastDtsOptions}; use testing::NormalizedOutput; #[testing::fixture("tests/**/*.ts")] +#[testing::fixture("tests/**/*.tsx")] fn fixture(input: PathBuf) { let mut dts_code = String::new(); let res = testing::run_test2(false, |cm, handler| { @@ -18,7 +19,10 @@ fn fixture(input: PathBuf) { let comments = SingleThreadedComments::default(); let mut program = parse_file_as_program( &fm, - Syntax::Typescript(Default::default()), + Syntax::Typescript(TsSyntax { + tsx: true, + ..Default::default() + }), Default::default(), Some(&comments), &mut Vec::new(),