feat(ast): add escape_raw parameter to template_element builders#18121
feat(ast): add escape_raw parameter to template_element builders#18121graphite-app[bot] merged 1 commit intomainfrom
Conversation
There was a problem hiding this comment.
Pull request overview
This PR adds an escape_raw parameter to the template_element and template_element_with_lone_surrogates AST builder methods to enable automatic escaping of special characters (backticks, ${, backslashes, carriage returns) in template literal raw values. This allows programmatic AST construction to safely pass runtime string values without manual escaping, while the parser continues to pass pre-escaped values from source code.
Changes:
- Added
escape_template_element_rawhelper function that escapes special characters in template literal raw values - Modified the AST builder generator to add an
escape_raw: boolparameter toTemplateElementbuilders - Updated the parser to pass
falseforescape_raw(values are already escaped from source) - Added test demonstrating the escape functionality when building AST programmatically
Reviewed changes
Copilot reviewed 3 out of 4 changed files in this pull request and generated 2 comments.
| File | Description |
|---|---|
| tasks/ast_tools/src/generators/ast_builder.rs | Adds escape function and modifies generator to add escape_raw parameter to TemplateElement builder methods |
| crates/oxc_parser/src/js/expression.rs | Updates parser to pass false for the new escape_raw parameter |
| crates/oxc_codegen/tests/integration/js.rs | Adds test verifying escape functionality when building AST with escape_raw: true |
| crates/oxc_ast/src/generated/ast_builder.rs | Generated code with updated builder methods and escape function |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Merging this PR will not alter performance
Comparing Footnotes
|
51176d6 to
bd8a575
Compare
bd8a575 to
7b9e045
Compare
Merge activity
|
) ## Summary - Add `escape_raw: bool` parameter to `template_element` and `template_element_with_lone_surrogates` builder methods - When `escape_raw: true`, special characters (backticks, `${`, backslashes, carriage returns) are automatically escaped in the raw field - Parser passes `false` (already-escaped values from source) - Programmatic users pass `true` (runtime string values need escaping) This is an alternative approach to #18101 - instead of escaping in codegen, we make the escaping opt-in at the AST builder level. Closes #18101 ## Test plan - [x] Added test `template_literal_escape_when_building_ast` in codegen tests - [x] Verified parser still works correctly with `escape_raw: false` 🤖 Generated with [Claude Code](https://claude.com/claude-code)
7b9e045 to
1628f8a
Compare
) ## Summary - Add `escape_raw: bool` parameter to `template_element` and `template_element_with_lone_surrogates` builder methods - When `escape_raw: true`, special characters (backticks, `${`, backslashes, carriage returns) are automatically escaped in the raw field - Parser passes `false` (already-escaped values from source) - Programmatic users pass `true` (runtime string values need escaping) This is an alternative approach to #18101 - instead of escaping in codegen, we make the escaping opt-in at the AST builder level. Closes #18101 ## Test plan - [x] Added test `template_literal_escape_when_building_ast` in codegen tests - [x] Verified parser still works correctly with `escape_raw: false` 🤖 Generated with [Claude Code](https://claude.com/claude-code)
1628f8a to
2ef5647
Compare
### 💥 BREAKING CHANGES - 22dec6a semantic: [**BREAKING**] Remove `Scoping::scope_build_child_ids` and all related APIs (#18362) (Dunqing) - 30a4899 oxc: [**BREAKING**] Remove `CompilerInterface::semantic_child_scope_ids` (#18361) (Dunqing) - 777fc40 ast: [**BREAKING**] Add `Ident` type (#18354) (Boshen) - af0ca46 span: [**BREAKING**] Use `ModuleKind::CommonJS` for `SourceType::cjs()` (#18276) (sapphi-red) ### 🚀 Features - 0a02026 semantic: Add TS1499 code to diagnostic (#18557) (camc314) - 8b4618f parser: Add TS1500 code to diagnostic (#18547) (camc314) - 866b6b3 parser: Add TS1048 code to diagnostic (#18546) (camc314) - 1117c44 parser: Add TS1054 code to diagnostic (#18541) (camc314) - e4fcdde semantic: Add TS1053 code to diagnostic (#18539) (camc314) - bcbf396 semantic: Add TS1052 code to diagnostic (#18538) (camc314) - 8155edf semantic: Add TS1049 code to diagnostic (#18535) (camc314) - 51d3b3f parser: Add TS1502 code to diagnostic (#18534) (camc314) - 00854e8 semantic: Add TS2337 error code to super call diagnostic (#18531) (camc314) - 993fd2b parser: Parse unambiguous await with better error messages (#18480) (Boshen) - 8db0e78 linter/plugins: Handle BOMs (#18376) (overlookmotel) - 6ac09e2 linter/plugins: Support source text not being at start of buffer (#18375) (overlookmotel) - 2ef5647 ast: Add escape_raw parameter to template_element builders (#18121) (Boshen) ### 🐛 Bug Fixes - 74d0998 semantic: Update error msg for multiple `default` cases in switch stmt (#18526) (camc314) - c205b0d ast: Remove `ThisExpression` from `TSModuleReference` (#18489) (Boshen) - aed3669 parser: Parse HTML-like comments in unambiguous mode (#18442) (Boshen) - c4132fb parser: Validate accessor parameters in interface method signatures (#18391) (Boshen) - b0cd74d semantic: Allow `var` and `function` with same name in static blocks (#18358) (Boshen) - 6037995 semantic: Allow `new.target` in class field initializers (#18349) (Boshen) - 9a15c6a semantic: Do not rely on spans for node comparison in `Function::bind` (#18296) (overlookmotel) ### ⚡ Performance - 6b600c4 semantic: Skip parent lookup for function declarations in `Function::bind` (#18293) (overlookmotel) - c27ad2d semantic: Move check for function declaration out of `is_function_part_of_if_statement` (#18292) (overlookmotel) - 63eb89e semantic: Skip checking redeclarations for function expressions (#18291) (overlookmotel) - 7c12743 semantic: Skip checking unresolved exports in CommonJS files (#18250) (overlookmotel) - 2349031 allocator: Increase initial chunk size from 512B to 16KB (#18234) (Boshen) ### 📚 Documentation - 8ccd853 npm: Update package homepage URLs and add keywords (#18509) (Boshen) - 9b3165f napi/parser: Clarify when to use `parseAsync` vs `parseSync` (#18486) (Boshen) - 1b59f63 napi/parser: Correct typo in README (#18251) (overlookmotel) - 00ff75f mangler: Fix `top_level` option in example (#18233) (overlookmotel) - 2ddc073 semantic: Fix typo in comment (#18238) (overlookmotel) Co-authored-by: Boshen <[email protected]>
Summary
escape_raw: boolparameter totemplate_elementandtemplate_element_with_lone_surrogatesbuilder methodsescape_raw: true, special characters (backticks,${, backslashes, carriage returns) are automatically escaped in the raw fieldfalse(already-escaped values from source)true(runtime string values need escaping)This is an alternative approach to #18101 - instead of escaping in codegen, we make the escaping opt-in at the AST builder level.
Closes #18101
Test plan
template_literal_escape_when_building_astin codegen testsescape_raw: false🤖 Generated with Claude Code