From 418c0be4fe82830acd96dbedd4b9d1b878bd9a2a Mon Sep 17 00:00:00 2001 From: overlookmotel Date: Thu, 19 Sep 2024 20:04:48 +0100 Subject: [PATCH] fix(transformer): JSX source: add `var _jsxFileName` statement --- crates/oxc_transformer/src/react/jsx_source.rs | 6 ++++++ crates/oxc_transformer/src/react/mod.rs | 2 ++ tasks/transform_conformance/oxc.snap.md | 3 ++- .../test/fixtures/react-source/basic-sample/input.jsx | 1 + .../test/fixtures/react-source/basic-sample/output.jsx | 6 ++++++ .../test/fixtures/react-source/options.json | 3 +++ 6 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 tasks/transform_conformance/tests/babel-plugin-transform-react-jsx-source/test/fixtures/react-source/basic-sample/input.jsx create mode 100644 tasks/transform_conformance/tests/babel-plugin-transform-react-jsx-source/test/fixtures/react-source/basic-sample/output.jsx create mode 100644 tasks/transform_conformance/tests/babel-plugin-transform-react-jsx-source/test/fixtures/react-source/options.json diff --git a/crates/oxc_transformer/src/react/jsx_source.rs b/crates/oxc_transformer/src/react/jsx_source.rs index 5ba0a8f0f83f3..29a64d3d5ca8a 100644 --- a/crates/oxc_transformer/src/react/jsx_source.rs +++ b/crates/oxc_transformer/src/react/jsx_source.rs @@ -59,6 +59,12 @@ impl<'a> ReactJsxSource<'a> { } impl<'a> Traverse<'a> for ReactJsxSource<'a> { + fn exit_program(&mut self, program: &mut Program<'a>, _ctx: &mut TraverseCtx<'a>) { + if let Some(stmt) = self.get_var_file_name_statement() { + program.body.insert(0, stmt); + } + } + fn enter_jsx_opening_element( &mut self, elem: &mut JSXOpeningElement<'a>, diff --git a/crates/oxc_transformer/src/react/mod.rs b/crates/oxc_transformer/src/react/mod.rs index c9523b6ad43c6..9984c5525ec4a 100644 --- a/crates/oxc_transformer/src/react/mod.rs +++ b/crates/oxc_transformer/src/react/mod.rs @@ -84,6 +84,8 @@ impl<'a> Traverse<'a> for React<'a> { } if self.jsx_plugin { self.jsx.exit_program(program, ctx); + } else if self.jsx_source_plugin { + self.jsx.jsx_source.exit_program(program, ctx); } } diff --git a/tasks/transform_conformance/oxc.snap.md b/tasks/transform_conformance/oxc.snap.md index 373fd2467ec1a..8b6c759e11ad4 100644 --- a/tasks/transform_conformance/oxc.snap.md +++ b/tasks/transform_conformance/oxc.snap.md @@ -1,12 +1,13 @@ commit: 3bcfee23 -Passed: 46/56 +Passed: 47/57 # All Passed: * babel-plugin-transform-nullish-coalescing-operator * babel-plugin-transform-optional-catch-binding * babel-plugin-transform-arrow-functions * babel-preset-typescript +* babel-plugin-transform-react-jsx-source * regexp diff --git a/tasks/transform_conformance/tests/babel-plugin-transform-react-jsx-source/test/fixtures/react-source/basic-sample/input.jsx b/tasks/transform_conformance/tests/babel-plugin-transform-react-jsx-source/test/fixtures/react-source/basic-sample/input.jsx new file mode 100644 index 0000000000000..51fee284ec085 --- /dev/null +++ b/tasks/transform_conformance/tests/babel-plugin-transform-react-jsx-source/test/fixtures/react-source/basic-sample/input.jsx @@ -0,0 +1 @@ +var x = ; diff --git a/tasks/transform_conformance/tests/babel-plugin-transform-react-jsx-source/test/fixtures/react-source/basic-sample/output.jsx b/tasks/transform_conformance/tests/babel-plugin-transform-react-jsx-source/test/fixtures/react-source/basic-sample/output.jsx new file mode 100644 index 0000000000000..9b04721c920a2 --- /dev/null +++ b/tasks/transform_conformance/tests/babel-plugin-transform-react-jsx-source/test/fixtures/react-source/basic-sample/output.jsx @@ -0,0 +1,6 @@ +var _jsxFileName = "/tests/babel-plugin-transform-react-jsx-source/test/fixtures/react-source/basic-sample/input.jsx"; +var x = ; diff --git a/tasks/transform_conformance/tests/babel-plugin-transform-react-jsx-source/test/fixtures/react-source/options.json b/tasks/transform_conformance/tests/babel-plugin-transform-react-jsx-source/test/fixtures/react-source/options.json new file mode 100644 index 0000000000000..7c71600278866 --- /dev/null +++ b/tasks/transform_conformance/tests/babel-plugin-transform-react-jsx-source/test/fixtures/react-source/options.json @@ -0,0 +1,3 @@ +{ + "plugins": ["syntax-jsx", "transform-react-jsx-source"] +}