From 76aa91f83cf37a11aa55feba40d6f73819fc811d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Mon, 19 Jun 2023 12:18:19 +0900 Subject: [PATCH] fix(es/typescript): Don't panic of `@jsxFrag null` (#7540) **Related issue:** - Closes #7539. --- crates/swc/tests/fixture/issues-7xxx/7539/input/.swcrc | 9 +++++++++ crates/swc/tests/fixture/issues-7xxx/7539/input/index.js | 3 +++ .../swc/tests/fixture/issues-7xxx/7539/output/index.js | 1 + crates/swc_ecma_transforms_typescript/src/strip.rs | 1 + .../tests/fixture/issue-7539/input.tsx | 3 +++ .../tests/fixture/issue-7539/output.js | 1 + 6 files changed, 18 insertions(+) create mode 100644 crates/swc/tests/fixture/issues-7xxx/7539/input/.swcrc create mode 100644 crates/swc/tests/fixture/issues-7xxx/7539/input/index.js create mode 100644 crates/swc/tests/fixture/issues-7xxx/7539/output/index.js create mode 100644 crates/swc_ecma_transforms_typescript/tests/fixture/issue-7539/input.tsx create mode 100644 crates/swc_ecma_transforms_typescript/tests/fixture/issue-7539/output.js diff --git a/crates/swc/tests/fixture/issues-7xxx/7539/input/.swcrc b/crates/swc/tests/fixture/issues-7xxx/7539/input/.swcrc new file mode 100644 index 000000000000..497481f1a012 --- /dev/null +++ b/crates/swc/tests/fixture/issues-7xxx/7539/input/.swcrc @@ -0,0 +1,9 @@ +{ + "jsc": { + "parser": { + "syntax": "typescript", + "tsx": true + } + }, + "isModule": true +} \ No newline at end of file diff --git a/crates/swc/tests/fixture/issues-7xxx/7539/input/index.js b/crates/swc/tests/fixture/issues-7xxx/7539/input/index.js new file mode 100644 index 000000000000..27ad390aca3b --- /dev/null +++ b/crates/swc/tests/fixture/issues-7xxx/7539/input/index.js @@ -0,0 +1,3 @@ +/* @jsx h */ +/* @jsxFrag null */ +<>; \ No newline at end of file diff --git a/crates/swc/tests/fixture/issues-7xxx/7539/output/index.js b/crates/swc/tests/fixture/issues-7xxx/7539/output/index.js new file mode 100644 index 000000000000..2c1488f43228 --- /dev/null +++ b/crates/swc/tests/fixture/issues-7xxx/7539/output/index.js @@ -0,0 +1 @@ +/* @jsx h */ /* @jsxFrag null */ /*#__PURE__*/ h(null, null); diff --git a/crates/swc_ecma_transforms_typescript/src/strip.rs b/crates/swc_ecma_transforms_typescript/src/strip.rs index ddf48d8050f2..3118a019f399 100644 --- a/crates/swc_ecma_transforms_typescript/src/strip.rs +++ b/crates/swc_ecma_transforms_typescript/src/strip.rs @@ -248,6 +248,7 @@ fn id_for_jsx(e: &Expr) -> Id { match e { Expr::Ident(i) => i.to_id(), Expr::Member(MemberExpr { obj, .. }) => id_for_jsx(obj), + Expr::Lit(Lit::Null(..)) => (js_word!("null"), Default::default()), _ => { panic!("failed to determine top-level Id for jsx expression") } diff --git a/crates/swc_ecma_transforms_typescript/tests/fixture/issue-7539/input.tsx b/crates/swc_ecma_transforms_typescript/tests/fixture/issue-7539/input.tsx new file mode 100644 index 000000000000..27ad390aca3b --- /dev/null +++ b/crates/swc_ecma_transforms_typescript/tests/fixture/issue-7539/input.tsx @@ -0,0 +1,3 @@ +/* @jsx h */ +/* @jsxFrag null */ +<>; \ No newline at end of file diff --git a/crates/swc_ecma_transforms_typescript/tests/fixture/issue-7539/output.js b/crates/swc_ecma_transforms_typescript/tests/fixture/issue-7539/output.js new file mode 100644 index 000000000000..d0f3e9c84a29 --- /dev/null +++ b/crates/swc_ecma_transforms_typescript/tests/fixture/issue-7539/output.js @@ -0,0 +1 @@ +/* @jsx h */ /* @jsxFrag null */ <>;