-
-
Notifications
You must be signed in to change notification settings - Fork 722
refactor(formatter): improve AstNode and AstNodes
#14686
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
refactor(formatter): improve AstNode and AstNodes
#14686
Conversation
c6f7d3f to
70ea53e
Compare
CodSpeed Performance ReportMerging #14686 will not alter performanceComparing Summary
Footnotes
|
70ea53e to
a82df7e
Compare
AstNode and AstNodes
a82df7e to
8c0b5ca
Compare
8c0b5ca to
0cfe45b
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 refactors the formatter module by moving the AstNode and AstNodes types out of the generated code folder into their own dedicated module structure. This improves code organization and enables the implementation of useful methods for these types outside of generated code.
- Reorganizes
AstNodeandAstNodesinto a proper module structure with separate files for core types and iterators - Updates all import paths from
generated::ast_nodestoast_nodes - Implements iterator functionality using macros for better code reuse
Reviewed Changes
Copilot reviewed 62 out of 66 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| tasks/ast_tools/src/generators/formatter/format.rs | Updates generator to use new ast_nodes module and removes generated iterator code |
| tasks/ast_tools/src/generators/formatter/ast_nodes.rs | Major refactor removing AstNode definitions and iterator implementations, moving to dedicated module |
| crates/oxc_formatter/src/ast_nodes/*.rs | New module structure with separate files for AstNode, AstNodes, and iterator implementations |
| crates/oxc_formatter/src/lib.rs | Updates module structure to reference new ast_nodes location |
| crates/oxc_formatter/src/**/*.rs | Updates import paths from generated::ast_nodes to ast_nodes across all formatter files |
Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.
Merge activity
|
0cfe45b to
bae5f11
Compare
## [0.6.0] - 2025-10-20 ### 🚀 Features - 7f91a26 oxfmt: Handle ignoring files (#14798) (leaysgur) - 199a2c6 oxfmt: Support `--with-node-modules` option (#14713) (leaysgur) - 6bf8bac formatter: Reimplement formatting for `ImportExpression` (#14712) (Dunqing) - 3f2e036 formatter: Introduce `AstNode<ExpressionStatement>::is_arrow_function_body` (#14709) (Dunqing) - df225e9 formatter: Add `AstNode::ancestor` and `AstNode::grand_parent` methods (#14700) (Dunqing) - 26c5f5a oxfmt: Ignore VCS directories by default (#14616) (leaysgur) - fec2ed9 oxfmt: Use Prettier style config key and value (#14612) (leaysgur) - 1b58521 oxfmt,language_server: Enable JSX for all JS source type (#14605) (leaysgur) ### 🐛 Bug Fixes - 21c4285 formatter: Correct printing remaining trailing comments for `TSMappedType` (#14761) (Dunqing) - 1d1573e formatter: Correct adding semicolons for TypeScript left-hand side nodes (#14760) (Dunqing) - 4cc3b10 formatter: Improve handling of new lines between comments in `MemberChain` (#14759) (Dunqing) - e6bce8e formatter: Break the left hand side of AssignmentLike node if it is an `ObjectPattern` with three properties (#14756) (Dunqing) - dc57a2b formatter: Incorrect handling of `VariableDeclarator` with an `ArrowFunctionExpression` initializer (#14731) (Dunqing) - 537185d formatter: Should always group the left side of `AssignmentPattern` (#14730) (Dunqing) - ef02760 oxfmt: Handle relative path starts with dot (#14708) (leaysgur) - ee37f5d oxfmt: Handle default cwd correctly (#14704) (leaysgur) - 4283fd8 formatter: Correct printing comments for `JSXAttributeValue` (#14719) (Dunqing) - 59c9e1b formatter: Avoid conditional being broken in arguments by trailing comments (#14718) (Dunqing) - 7d64b96 formatter: Should wrap parentheses with JSX arguments of `NewExpression` (#14717) (Dunqing) - 2068a63 formatter: Should indent TemplateExpression if it is a member expression that is part of `ChainExpression` (#14714) (Dunqing) - 5ea3bb6 formatter: Incorrect handling of `ObjectPattern` as an `AssignmentPattern` of a parameter (#14711) (Dunqing) - eb52529 formatter: Incorrect handling of `ObjectPattern` as a parameter (#14670) (Dunqing) - 8ac10da formatter: Correct checking assignment layout for the right side with ownline comment and it is a `PrivateFieldExpression` (#14664) (Dunqing) - 6cba9b1 formatter: Should not merge tail with head for MemberChain when its parent is ArrowFunctionExpression (#14663) (Dunqing) - f44d3c0 formatter: Should not indent BinaryLikeExpression when its parent is `NewExpression` (#14662) (Dunqing) - bf953b8 formatter: Should group nested test for TSConditionalType (#14661) (Dunqing) - 63dc57b formatter: Correct handling if a template literal should be printed as a signle line (#14660) (Dunqing) - 0150ad5 formatter: Should group type parameters and parameters for method-like and function-like nodes (#14659) (Dunqing) - 392bf74 formatter: Improve handling of dangling comments in if statements (#14658) (Dunqing) - fd52b10 formatter: Don't print CallExpression as MemberChain style when its only has one argument and it is a TemplateLiteral on its own line (#14657) (Dunqing) - 29c3c60 formatter: Don't group nested await expression when its is the leftmost expression (#14656) (Dunqing) - 72c7503 formatter: Correct checking function composition when the arguments have an call expression before function (#14655) (Dunqing) - 2b645e2 formatter: Don't wrap parenthesis for `type` when its grandparent isn't a `ExpressionStatement` (#14654) (Dunqing) - e0eb966 formatter: Skip the leading semicolon when calculating leading lines (#14653) (Dunqing) - 0961c3a oxlint,oxfmt: Skip traversing `.git` directories (#14590) (Boshen) ### 🚜 Refactor - b7926f3 oxfmt: Update CLI --help details (#14796) (leaysgur) - 173168b oxfmt: Refactor walk.rs and format.rs relationship (#14795) (leaysgur) - aea9d79 oxfmt: Pass `PathBuf` from walk.rs to service.rs (#14716) (leaysgur) - 83e783a formatter: Organize utils structure (#14710) (Dunqing) - 58dd74a formatter: Remove all `without_parentheses` usages (#14707) (Dunqing) - 75dfcad formatter: Simplify `ExpressionLeftSide` (#14706) (Dunqing) - 273f0fe formatter: Remove unnecessary lifetimes for the implementations of `NeedsParentheses` (#14703) (Dunqing) - bae5f11 formatter: Improve `AstNode` and `AstNodes` (#14686) (Dunqing) ### ⚡ Performance - c6395c7 formatter: Optimize string reservation in print_text (#14751) (Boshen) ### 🧪 Testing - 7c42ea0 oxfmt: Remove args from snapshot file name (#14800) (leaysgur) - 42d8c62 formatter: Add tests for sort-imports (#14685) (leaysgur)

Reorganize it so that we can impl some useful methods for them