-
-
Notifications
You must be signed in to change notification settings - Fork 722
refactor(formatter): improve printing comments for special nodes #14544
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 printing comments for special nodes #14544
Conversation
CodSpeed Performance ReportMerging #14544 will not alter performanceComparing Summary
Footnotes
|
e347966 to
997b2eb
Compare
191b50b to
5db9774
Compare
997b2eb to
afe0be2
Compare
afe0be2 to
18f6334
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 comment handling in the formatter by removing SiblingNode usages and moving comment processing logic to dedicated formatting methods. The changes improve how comments are handled for special nodes like control structures, call expressions, and import/export statements.
- Removes
SiblingNode-based comment handling from theCommentsstruct - Introduces specialized comment formatting for empty statements in control structures
- Consolidates import/export source formatting with proper comment handling
Reviewed Changes
Copilot reviewed 8 out of 8 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| tasks/prettier_conformance/snapshots/prettier.ts.snap.md | Updates test compatibility percentage for TypeScript definite assignment |
| crates/oxc_formatter/src/write/utils/statement_body.rs | Adds special handling for trailing comments in if statement consequents |
| crates/oxc_formatter/src/write/mod.rs | Implements comment formatting for empty statements and control structure tests |
| crates/oxc_formatter/src/write/import_declaration.rs | Extracts shared logic for formatting import/export sources with clauses |
| crates/oxc_formatter/src/write/export_declarations.rs | Uses shared formatting function for export sources with proper comment handling |
| crates/oxc_formatter/src/utils/member_chain/chain_member.rs | Adds conditional trailing comment formatting for member expressions |
| crates/oxc_formatter/src/utils/assignment_like.rs | Implements trailing comment handling for assignment-like expressions |
| crates/oxc_formatter/src/formatter/comments.rs | Removes SiblingNode-based comment logic and simplifies comment detection |
Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.
85ce0af to
f6a70a2
Compare
Merge activity
|
) Remove `SiblingNode` usages. It used to check comments for special nodes based on [Prettier's](https://github.com/prettier/prettier/blob/7584432401a47a26943dd7a9ca9a8e032ead7285/src/language-js/comments/handle-comments.js#L861) behavior, but we have moved all of the logic to the comments printing side, so `SiblingNode` becomes unnecessary; it will be removed in the next PR.
f6a70a2 to
893bdac
Compare
Remove `SiblingNode`; all of the last usages are removed in #14544.
## [0.5.0] - 2025-10-14 ### 🚀 Features - 8077f9b oxfmt: Provide JSON schema for `.oxfmtrc.json` (#14399) (leaysgur) - 51ddfa8 oxfmt: Support `.oxfmtrc.json(c)` config file (#14398) (leaysgur) ### 🐛 Bug Fixes - c4e12df formatter: Correct checking comments around the return argument (#14585) (Dunqing) - 454303b formatter: Check empty lines between arguments incorrectly (#14584) (Dunqing) - a5554a8 formatter: Print a line break incorrectly for directives (#14577) (Dunqing) - 5db9774 formatter: Correct printing comments that are around the `StaticMemberExpression` (#14543) (Dunqing) - 620dbac formatter: No need to wrap a parenthesis for `TSConditionalType` and `TSFunctionType` when its parent is `TSUnionType` and it only has one element (#14540) (Dunqing) - 1aec74f formatter: Missing parenthesis for `ComputedMemberExpression` when its parent is an `NewExpression` (#14530) (Dunqing) - 59f1d8f formatter: Missing parenthesis for `PrivateInExpression` when its parent is an `UnaryExpression` (#14529) (Dunqing) - b06059e formatter: Correct printing comments for logical expression (#14500) (Dunqing) - be38095 formatter: Should break even if the right side of the assignment is a require when it has a leading own line comment (#14499) (Dunqing) - 4d55654 formatter: Correct printing comments for the end of union type (#14498) (Dunqing) - 4994872 formatter: Correct printing comments for `try` statement (#14497) (Dunqing) - 9a4da3d formatter: Should expand the parent if the member chain will break (#14487) (Dunqing) - bba9689 formatter: Correct printing comments around the expression of `ComputedMemberExpression` (#14486) (Dunqing) - dc5e08a formatter: Correct printing yield argument (#14485) (Dunqing) - b8a0905 formatter: No need to wrap with parentheses for a type cast node (#14484) (Dunqing) - b159215 formatter: Ignore the leading line break for the first argument of the call expression (#14483) (Dunqing) - ea8f9ed formatter: Correct checking comments between the operator and the right side for assignment like nodes (#14482) (Dunqing) - 4f19504 formatter: Block comments without a leading linebreak that are around the operator of the conditional expression should be printed as-is (#14474) (Dunqing) - ef77997 formatter: Correct printing comments for `for` statements (#14473) (Dunqing) - 31595c3 formatter: Correct printing comments for assignment pattern (#14469) (Dunqing) - 0f19be0 oxfmt: Normalize path delimiter on Windows (#14463) (leaysgur) - 5856bc9 oxc_formatter: Fix arrow_parentheses: 'avoid' > 'as-needed' (#14462) (leaysgur) ### 🚜 Refactor - 7bc86f4 formatter: Simplify foramtting import and export (#14576) (Dunqing) - 29c3cf2 formatter: Remove `SiblingNode` (#14551) (Dunqing) - 893bdac formatter: Improve printing comments for special nodes (#14544) (Dunqing) - 97bb964 formatter: Improve line break detaching logic in SourceText (#14539) (Dunqing) ### 🧪 Testing - bb43dc5 formatter: Add snapshot-based test infrastructure (#14400) (Dunqing) Co-authored-by: leaysgur <6259812+leaysgur@users.noreply.github.com>

Remove
SiblingNodeusages. It used to check comments for special nodes based on Prettier's behavior, but we have moved all of the logic to the comments printing side, soSiblingNodebecomes unnecessary; it will be removed in the next PR.