-
-
Notifications
You must be signed in to change notification settings - Fork 724
fix(transformer/tagged-template-transform): handle \n escape sequences
#15830
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix(transformer/tagged-template-transform): handle \n escape sequences
#15830
Conversation
How to use the Graphite Merge QueueAdd either label to this PR to merge it via the merge queue:
You must have a Graphite account in order to use the merge queue. Sign up using this link. An organization admin has enabled the Graphite Merge Queue in this repository. Please do not merge from GitHub as this will restart CI on PRs being processed by the merge queue. This stack of pull requests is managed by Graphite. Learn more about stacking. |
CodSpeed Performance ReportMerging #15830 will not alter performanceComparing Summary
Footnotes
|
\n escape sequences
603308c to
d973355
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This PR fixes the handling of escape sequences in the tagged template transform plugin. Previously, the plugin incorrectly transformed template literals containing escape sequences (like \n, \t) or invalid escape sequences (like incomplete \u), causing either incorrect output or syntax errors.
The key changes include:
- Modified the transform to generate both "cooked" and "raw" string arrays when they differ
- Added support for invalid escape sequences using
void 0in the cooked array - Added comprehensive test coverage for both valid and invalid escape sequences
Reviewed Changes
Copilot reviewed 6 out of 6 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
crates/oxc_transformer/src/plugins/tagged_template_transform.rs |
Updated transform logic to detect when cooked differs from raw, generate both cooked and raw arrays when needed, and use void 0 for invalid escapes |
tasks/transform_conformance/tests/plugin-tagged-template-transform/test/fixtures/escape-sequence/input.js |
Added test input for valid escape sequences (\n and \t) |
tasks/transform_conformance/tests/plugin-tagged-template-transform/test/fixtures/escape-sequence/output.js |
Added expected output showing correct handling of escape sequences with dual array arguments |
tasks/transform_conformance/tests/plugin-tagged-template-transform/test/fixtures/invalid-escape/input.js |
Added test input for invalid escape sequence (\u) |
tasks/transform_conformance/tests/plugin-tagged-template-transform/test/fixtures/invalid-escape/output.js |
Added expected output showing void 0 in cooked array for invalid escape |
tasks/transform_conformance/snapshots/oxc.snap.md |
Updated test pass count from 198/329 to 200/331, reflecting the 2 new passing tests |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
overlookmotel
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good!
Merge activity
|
…ces (#15830) Fixes the issue identified in #15664 where the tagged template transform plugin incorrectly handled template literals containing escape sequences. ### Examples ```js // Input foo`</script>\n` // Before (incorrect): foo(_t || (_t = taggedTemplateLiteral(["</script>\\n"]))); // After (correct): foo(_t || (_t = taggedTemplateLiteral(["</script>\n"], ["</script>\\n"]))); // Input with invalid escape foo`</script>\u` // Before (syntax error): foo(_t || (_t = taggedTemplateLiteral(["</script>\\u"]))); // After (correct): foo(_t || (_t = taggedTemplateLiteral([void 0], ["</script>\\u"])));
d973355 to
7c46a9e
Compare
…ces (#15830) Fixes the issue identified in #15664 where the tagged template transform plugin incorrectly handled template literals containing escape sequences. ### Examples ```js // Input foo`</script>\n` // Before (incorrect): foo(_t || (_t = taggedTemplateLiteral(["</script>\\n"]))); // After (correct): foo(_t || (_t = taggedTemplateLiteral(["</script>\n"], ["</script>\\n"]))); // Input with invalid escape foo`</script>\u` // Before (syntax error): foo(_t || (_t = taggedTemplateLiteral(["</script>\\u"]))); // After (correct): foo(_t || (_t = taggedTemplateLiteral([void 0], ["</script>\\u"])));
### 💥 BREAKING CHANGES - cbb27fd ast: [**BREAKING**] Add `TSGlobalDeclaration` type (#15712) (overlookmotel) ### 🚀 Features - 0c1f82b linter/plugins: Add `tokens` property to `Program` (#16020) (overlookmotel) - 6cff132 span: Add `Span::merge_within` method (#15869) (sapphi-red) - 102365d allocator/vec: Add `Vec::into_bump_slice` method (#15770) (Dunqing) ### 🐛 Bug Fixes - e2ca770 codegen: Add support for printing type arguments in new expressions (#15963) (Ives van Hoorne) - 2bd3cb6 apps, editors, napi: Fix `oxlint-disable` comments (#16014) (overlookmotel) - 622cb5e parser: Preserve legal comments with @preserve/@license when preceded by other annotations (#15929) (copilot-swe-agent) - 7c46a9e transformer/tagged-template-transform: Handle `\n` escape sequences (#15830) (Dunqing) - f386efc minifier: Avoid generating invalid spans (#15778) (sapphi-red) - d4ff004 parser: Forbid invalid modifiers on `module` and `global` (#15723) (overlookmotel) - 2191ae9 semantic: Allow reserved keywords in typescript ambient contexts (#15495) (sapphi-red) - 7d1ebad isolated-declarations: Incorrect nested namespace output in isolated declarations (#15800) (copilot-swe-agent) ### ⚡ Performance - b4b0ed8 transformer/typescript: Reverse order of checks (#15722) (overlookmotel) ### 📚 Documentation - c81a331 data_structures: Doc comments on fields of `Stack` (#15793) (overlookmotel) - cfae31d allocator: Use `allocator` as var name in examples (#15781) (overlookmotel) Co-authored-by: Boshen <[email protected]>

Fixes the issue identified in #15664 where the tagged template transform plugin incorrectly handled template literals containing escape sequences.
Examples