fix(formatter): handle poor layout for grouped call arguments#16093
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 #16093 will not alter performanceComparing Summary
Footnotes
|
b821907 to
622e000
Compare
5d773f0 to
204ce99
Compare
78cd591 to
cb8c1fd
Compare
204ce99 to
925c9d7
Compare
Merge activity
|
cb8c1fd to
531dce4
Compare
925c9d7 to
e577c98
Compare
531dce4 to
9c2ec78
Compare
e577c98 to
9c46bb8
Compare
9c46bb8 to
fdca1e4
Compare
This PR is a follow-up to astral-sh/ruff#6613. ### Why can we do it https://github.com/oxc-project/oxc/blob/622e000934d97ade5588f1e8cc3badde96e7328e/crates/oxc_formatter/src/formatter/diagnostics.rs#L11-L29 We can also make it non-failable since the entire program only has two points that can trigger an error, neither of which needs to interrupt the program immediately, and both can be improved to avoid making FormatResult everywhere 1. `FormatError::PoorLayout` This error may occur only when handling call arguments, and only the first or the last argument is a `Function` or `ArrowFunctionExpression`. The error may be thrown during the formatting of them. I commented out the related logic of this in this PR and fixed it in #16093 to make it easier to review 2. `FormatError::InvalidDocument` This is a printer error, but it may also occur only when we format `TaggedTemplateExpression`. There is a formatting logic that will format the template expression and print the IR immediately. If the IR we generated is incorrect, then the error will occur, but this is quite rare! So it's not worth using `FormatResult` everywhere to handle it. Currently, I just `unwrap` it. If we really need to handle it, we can store the error somewhere and return it after formatting in the future. https://github.com/oxc-project/oxc/blob/78cd5910985cece594e74884717f77ad75347b8a/crates/oxc_formatter/src/write/template.rs#L602-L603 ### Key changes The most significant change is: ```diff pub trait Format<'ast, T = ()> { - fn fmt(&self, f: &mut Formatter<'_, 'ast>) -> FormatResult<()>; + fn fmt(&self, f: &mut Formatter<'_, 'ast>); } ``` All remaining changes to the order stem from the above change: 1. Remove all `FormatResult` usages 2. Remove all `?` operators that pair with the `format!` macro 4. Commented out `PoorLayout` related logic, which is going to be fixed in the #16093 ### Benefits We don't need to deal with `Option`, and removing all `Option` handling makes the code cleaner and more readable. Of course, the performance improved a little bit
fdca1e4 to
91bf68f
Compare
91bf68f to
e272669
Compare
There was a problem hiding this comment.
Pull request overview
This PR refactors the formatter's handling of "poor layout" detection for grouped call arguments, moving the logic from Function and ArrowFunctionExpression to CallArguments. This change improves Prettier conformance from 570/602 (94.68%) to 571/602 (94.85%) for TypeScript and from 723/759 (95.26%) to 729/759 (96.05%) for JavaScript.
Key Changes:
- Moved poor layout detection from function/arrow formatters to call arguments formatter where it more naturally belongs
- Implemented proper checking of whether function parameters would break even without soft lines
- Optimized comma formatting by including it in the initial argument format instead of appending separately
Reviewed changes
Copilot reviewed 5 out of 5 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| tasks/prettier_conformance/snapshots/prettier.ts.snap.md | Updated TypeScript conformance metrics showing 1 additional passing test |
| tasks/prettier_conformance/snapshots/prettier.js.snap.md | Updated JavaScript conformance metrics showing 6 additional passing tests |
| crates/oxc_formatter/src/write/function.rs | Removed unused RemoveSoftLinesBuffer import and cleaned up commented-out poor layout handling code |
| crates/oxc_formatter/src/write/call_arguments.rs | Added RemoveSoftLinesBuffer import and implemented proper poor layout detection by checking if parameters break without soft lines, with optimized comma handling |
| crates/oxc_formatter/src/write/arrow_function_expression.rs | Simplified soft line removal logic for call arguments, now only applies to non-first arrows in chains |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
This PR is a follow-up on #16036 Move `PoorLayout` handling from `Function` and `ArrowFunctionExpression` to call arguments
d6b72b3 to
889d2e7
Compare
This PR is a follow-up to astral-sh/ruff#6613. ### Why can we do it https://github.com/oxc-project/oxc/blob/622e000934d97ade5588f1e8cc3badde96e7328e/crates/oxc_formatter/src/formatter/diagnostics.rs#L11-L29 We can also make it non-failable since the entire program only has two points that can trigger an error, neither of which needs to interrupt the program immediately, and both can be improved to avoid making FormatResult everywhere 1. `FormatError::PoorLayout` This error may occur only when handling call arguments, and only the first or the last argument is a `Function` or `ArrowFunctionExpression`. The error may be thrown during the formatting of them. I commented out the related logic of this in this PR and fixed it in #16093 to make it easier to review 2. `FormatError::InvalidDocument` This is a printer error, but it may also occur only when we format `TaggedTemplateExpression`. There is a formatting logic that will format the template expression and print the IR immediately. If the IR we generated is incorrect, then the error will occur, but this is quite rare! So it's not worth using `FormatResult` everywhere to handle it. Currently, I just `unwrap` it. If we really need to handle it, we can store the error somewhere and return it after formatting in the future. https://github.com/oxc-project/oxc/blob/78cd5910985cece594e74884717f77ad75347b8a/crates/oxc_formatter/src/write/template.rs#L602-L603 ### Key changes The most significant change is: ```diff pub trait Format<'ast, T = ()> { - fn fmt(&self, f: &mut Formatter<'_, 'ast>) -> FormatResult<()>; + fn fmt(&self, f: &mut Formatter<'_, 'ast>); } ``` All remaining changes to the order stem from the above change: 1. Remove all `FormatResult` usages 2. Remove all `?` operators that pair with the `format!` macro 4. Commented out `PoorLayout` related logic, which is going to be fixed in the #16093 ### Benefits We don't need to deal with `Option`, and removing all `Option` handling makes the code cleaner and more readable. Of course, the performance improved a little bit
This PR is a follow-up on #16036 Move `PoorLayout` handling from `Function` and `ArrowFunctionExpression` to call arguments
) This is a regression I found in the VSCode repo, caused by #16093. This is a mistake I made, as we should never use a hard space.
# Oxlint ### 🚀 Features - 5da1a63 linter/plugins: Introduce `RuleTester` (#16206) (overlookmotel) - 41129ab linter/plugins: Implement `languageOptions.parser` (#16292) (overlookmotel) - 4b24825 linter: Implement no-restricted-types rule (#16276) (camc314) - 7150209 linter/plugins: Implement `SourceCode#getNodeByRangeIndex` (#16256) (overlookmotel) - 3226864 linter/plugins: Implement options merging (#16217) (overlookmotel) - cbb108a linter/plugins: Support default options (#16170) (overlookmotel) - 04a3a66 linter/plugins: Implement `SourceCode#getTokenOrCommentAfter()` (#16045) (Arsh) - 68b63d9 linter/plugins: Implement `SourceCode#getTokenOrCommentBefore()` (#16044) (Arsh) - 04d9454 linter/plugins: Implement `SourceCode#getTokenByRangeStart()` (#16043) (Arsh) - 7b8d578 linter/plugins: Implement `SourceCode#getTokensBetween()` (#16034) (Arsh) - 79c242f linter/plugins: Implement `SourceCode#getLastTokensBetween()` (#16033) (Arsh) - 1772078 linter/plugins: Implement `SourceCode#getFirstTokenBetween()` (#16032) (Arsh) - 21bb86d linter/plugins: Implement `SourceCode#getFirstTokensBetween()` (#16019) (Arsh) - 78f74b1 linter/plugins: Implement `SourceCode#getLastTokenBetween()` (#16008) (Arsh) - df0b948 linter/plugins: Implement `SourceCode#getLastToken()` (#16003) (Arsh) ### 🐛 Bug Fixes - cf249f5 linter/plugins: Fix message interpolation (#16300) (overlookmotel) - 9149a26 linter/plugins, napi/parser: Deep freeze visitor keys (#16293) (overlookmotel) - 71271ee linter: Fix `typescript/no-empty-interface` config option casing. (#16282) (connorshea) - 653fa6c oxlint/oxfmt/lsp: Tell client the real tool name & version (#16212) (Sysix) - 385e13e linter: Support both prefer-inline and preferInline for import/no-duplicates (#16275) (copilot-swe-agent) - efc08d3 linter: Fix config docs for no-return-assign and unicode-bom rules. (#16260) (connorshea) - dc96d3f linter: Correct docs to use string option for import/first rule. (#16264) (connorshea) - 15ce491 linter: Correct the default config options for the switch-exhaustiveness-check rule. (#16268) (connorshea) - 13f985c linter: Fix casing for unicorn/explicit-length-check config option. (#16269) (connorshea) - 0df1901 linter/plugins: Reset state after error during AST visitation (#16246) (overlookmotel) - 42e9dcc linter: Fix docs for `consistent-type-specifier-style` and `consistent-type-definitions` rules. (#16253) (connorshea) - 505ceb1 linter: Fix the radix rule docs to correctly render as a string-only config option (#16248) (connorshea) - 135cee6 oxlint/lsp: Run diagnostics after delayed worker initialization (#16244) (Sysix) - 78aa294 linter/plugins: Deep freeze options (#16218) (overlookmotel) - 123bffe linter/plugins: Handle zero-token files in `SourceCode#getLastToken()` (#16184) (Arsh) - 55fcfba linter: Add considerDefaultExhaustiveForUnions option to switch-exhaustiveness-check (#16204) (camc314) - 9cc20a1 minifier: Avoid merging side effectful expressions to next assignment statement if the side effect may change the left hand side reference (#16165) (sapphi-red) - 75249e0 linter/plugins: Handle non-UTF8 file paths (#16157) (overlookmotel) - 86fa667 linter/plugins: Improve type def for `RuleMeta` `defaultOptions` property (#16159) (overlookmotel) - d2b7dcb tsgolint: Improve lsp diagnostic when linting fails (#16115) (camc314) - 8810bd5 linter: Prevent conflicting fixes between prefer_number_properties and prefer_numeric_literals (#16113) (camc314) - 91eb3f2 ast/estree: Convert `TSImportType` `argument` field to `Literal` (#16109) (overlookmotel) - 2da2fc1 linter: Fix prefer-string-raw fixer producing invalid JS for non-ASCII strings (#16102) (camc314) - f5cb601 linter/plugins: Perform length checks before continuing loops (#16025) (Arsh) - e1c21ca linter/jsx-key: Implement missing options (#15731) (camc314) ### ⚡ Performance - 02bdf90 linter/plugins, napi/parser: Reuse arrays in visitor keys (#16294) (overlookmotel) - 714a91a linter/no-restricted-types: Skip running if config is empty (#16278) (camc314) - d3a34f8 linter/plugins: Optimize `getTokens()` and other methods (#16188) (Arsh) - c05db06 linter/plugins: Speed up `initTokensWithComments` (#16117) (overlookmotel) - 4846886 linter/plugins: Optimize merging of `tokens` and `comments` (#16071) (Arsh) - e232d35 linter/plugins: Recycle objects in token methods (#16068) (overlookmotel) ### 📚 Documentation - e928732 linter/plugins: Fix JSDoc comment (#16295) (overlookmotel) - d4a1581 linter: Add a link to MDN for the no-proto rule. (#16213) (connorshea) - be36e36 linter/plugins: Fix JSDoc comment for `loadPluginImpl` (#16211) (overlookmotel) - 6d6e9c9 linter: Improve the docs for oxc/no-async-await rule. (#16181) (connorshea) - 0e1d38a linter/plugins: Clarify JSDoc comment for `getTokensBetween` (#16070) (overlookmotel) - 3ee22b2 linter/plugins: Fix JSDoc comments for tokens methods (#16063) (overlookmotel) - f257b5c linter/plugins: Clarify JSDoc comments for tokens methods (#16062) (overlookmotel) # Oxfmt ### 🚀 Features - 116e0d1 website: Auto generate oxfmt docs (#15985) (Boshen) - 862bdf7 oxfmt: Detect unsupported experimental options (take2) (#16088) (leaysgur) ### 🐛 Bug Fixes - 75ac90c formatter: Comments in call arguments should be printed as-is (#16327) (Dunqing) - fd77568 formatter: Don't wrap parenthesis for yield expression if there is no leading comment (#16326) (Dunqing) - 8ccfb06 formatter: Should indent class extends and interface heritage when it is a member expression without type arguments (#16323) (Dunqing) - 0faa978 oxfmt: JsFormatEmbeddedCb types (#16324) (Brooooooklyn) - 2b8f982 formatter: JSX text wrapping incorrect (#16318) (Dunqing) - f3ffebe formatter: Should indent variable declarator if there is a trailing comment (#16243) (Dunqing) - 31d3186 formatter: Incorrect handling of directives with comments (#16235) (Dunqing) - ac8fcaf formatter: Add parens for new: private field expr (#16312) (leaysgur) - 653fa6c oxlint/oxfmt/lsp: Tell client the real tool name & version (#16212) (Sysix) - 380a0af formatter: Incorrect printing of class binding trailing comments (#16234) (Dunqing) - 0ca8154 formatter: Incorrect printing of trailing comments of callee when the call arguments are empty (#16232) (Dunqing) - ac3a92e formatter: Print comment in ternary jsx (#16224) (leaysgur) - e3a7388 formatter: Fix parens for static member chain (#16229) (leaysgur) - 55334c3 formatter: Incorrect printing of dangling comments in the if statement (#16228) (Dunqing) - 9096a63 formatter: Correct printing of trailing comments after the semicolon for class properties (#16225) (Dunqing) - 75fd568 formatter: Inconsistent union type output between two runs (#16222) (Dunqing) - cd70484 formatter: Should not add a hard space before function body (#16221) (Dunqing) - 9097167 formatter: Incorrect printing of union types with comments (#16205) (Dunqing) - 79b78b3 formatter: Template literal element should not be indented (#16189) (Dunqing) - 48d6ed2 formatter: Nested assignment pattern should not expand outer object pattern (#16160) (Dunqing) - 8f4137d formatter: Output is incorrect when using comments inside JSX which is the right hand-side of `LogicalExpression` (#16156) (Dunqing) - 85c3a10 formatter/sort_imports: Handle internal prefixes correctly (#16128) (leaysgur) - 38b7bc4 oxfmt: Make no-napi build work (#16134) (leaysgur) - 889d2e7 formatter: Handle poor layout for grouped call arguments (#16093) (Dunqing) - 14b0a6a oxfmt: Fix JS-ish file detection (#16092) (leaysgur) - 9706a1a oxfmt: Ignore unsupported options (#16085) (leaysgur)
This PR is a follow-up to astral-sh/ruff#6613. ### Why can we do it https://github.com/oxc-project/oxc/blob/622e000934d97ade5588f1e8cc3badde96e7328e/crates/oxc_formatter/src/formatter/diagnostics.rs#L11-L29 We can also make it non-failable since the entire program only has two points that can trigger an error, neither of which needs to interrupt the program immediately, and both can be improved to avoid making FormatResult everywhere 1. `FormatError::PoorLayout` This error may occur only when handling call arguments, and only the first or the last argument is a `Function` or `ArrowFunctionExpression`. The error may be thrown during the formatting of them. I commented out the related logic of this in this PR and fixed it in oxc-project#16093 to make it easier to review 2. `FormatError::InvalidDocument` This is a printer error, but it may also occur only when we format `TaggedTemplateExpression`. There is a formatting logic that will format the template expression and print the IR immediately. If the IR we generated is incorrect, then the error will occur, but this is quite rare! So it's not worth using `FormatResult` everywhere to handle it. Currently, I just `unwrap` it. If we really need to handle it, we can store the error somewhere and return it after formatting in the future. https://github.com/oxc-project/oxc/blob/78cd5910985cece594e74884717f77ad75347b8a/crates/oxc_formatter/src/write/template.rs#L602-L603 ### Key changes The most significant change is: ```diff pub trait Format<'ast, T = ()> { - fn fmt(&self, f: &mut Formatter<'_, 'ast>) -> FormatResult<()>; + fn fmt(&self, f: &mut Formatter<'_, 'ast>); } ``` All remaining changes to the order stem from the above change: 1. Remove all `FormatResult` usages 2. Remove all `?` operators that pair with the `format!` macro 4. Commented out `PoorLayout` related logic, which is going to be fixed in the oxc-project#16093 ### Benefits We don't need to deal with `Option`, and removing all `Option` handling makes the code cleaner and more readable. Of course, the performance improved a little bit
…oject#16093) This PR is a follow-up on oxc-project#16036 Move `PoorLayout` handling from `Function` and `ArrowFunctionExpression` to call arguments
…-project#16221) This is a regression I found in the VSCode repo, caused by oxc-project#16093. This is a mistake I made, as we should never use a hard space.
# Oxlint ### 🚀 Features - 5da1a63 linter/plugins: Introduce `RuleTester` (oxc-project#16206) (overlookmotel) - 41129ab linter/plugins: Implement `languageOptions.parser` (oxc-project#16292) (overlookmotel) - 4b24825 linter: Implement no-restricted-types rule (oxc-project#16276) (camc314) - 7150209 linter/plugins: Implement `SourceCode#getNodeByRangeIndex` (oxc-project#16256) (overlookmotel) - 3226864 linter/plugins: Implement options merging (oxc-project#16217) (overlookmotel) - cbb108a linter/plugins: Support default options (oxc-project#16170) (overlookmotel) - 04a3a66 linter/plugins: Implement `SourceCode#getTokenOrCommentAfter()` (oxc-project#16045) (Arsh) - 68b63d9 linter/plugins: Implement `SourceCode#getTokenOrCommentBefore()` (oxc-project#16044) (Arsh) - 04d9454 linter/plugins: Implement `SourceCode#getTokenByRangeStart()` (oxc-project#16043) (Arsh) - 7b8d578 linter/plugins: Implement `SourceCode#getTokensBetween()` (oxc-project#16034) (Arsh) - 79c242f linter/plugins: Implement `SourceCode#getLastTokensBetween()` (oxc-project#16033) (Arsh) - 1772078 linter/plugins: Implement `SourceCode#getFirstTokenBetween()` (oxc-project#16032) (Arsh) - 21bb86d linter/plugins: Implement `SourceCode#getFirstTokensBetween()` (oxc-project#16019) (Arsh) - 78f74b1 linter/plugins: Implement `SourceCode#getLastTokenBetween()` (oxc-project#16008) (Arsh) - df0b948 linter/plugins: Implement `SourceCode#getLastToken()` (oxc-project#16003) (Arsh) ### 🐛 Bug Fixes - cf249f5 linter/plugins: Fix message interpolation (oxc-project#16300) (overlookmotel) - 9149a26 linter/plugins, napi/parser: Deep freeze visitor keys (oxc-project#16293) (overlookmotel) - 71271ee linter: Fix `typescript/no-empty-interface` config option casing. (oxc-project#16282) (connorshea) - 653fa6c oxlint/oxfmt/lsp: Tell client the real tool name & version (oxc-project#16212) (Sysix) - 385e13e linter: Support both prefer-inline and preferInline for import/no-duplicates (oxc-project#16275) (copilot-swe-agent) - efc08d3 linter: Fix config docs for no-return-assign and unicode-bom rules. (oxc-project#16260) (connorshea) - dc96d3f linter: Correct docs to use string option for import/first rule. (oxc-project#16264) (connorshea) - 15ce491 linter: Correct the default config options for the switch-exhaustiveness-check rule. (oxc-project#16268) (connorshea) - 13f985c linter: Fix casing for unicorn/explicit-length-check config option. (oxc-project#16269) (connorshea) - 0df1901 linter/plugins: Reset state after error during AST visitation (oxc-project#16246) (overlookmotel) - 42e9dcc linter: Fix docs for `consistent-type-specifier-style` and `consistent-type-definitions` rules. (oxc-project#16253) (connorshea) - 505ceb1 linter: Fix the radix rule docs to correctly render as a string-only config option (oxc-project#16248) (connorshea) - 135cee6 oxlint/lsp: Run diagnostics after delayed worker initialization (oxc-project#16244) (Sysix) - 78aa294 linter/plugins: Deep freeze options (oxc-project#16218) (overlookmotel) - 123bffe linter/plugins: Handle zero-token files in `SourceCode#getLastToken()` (oxc-project#16184) (Arsh) - 55fcfba linter: Add considerDefaultExhaustiveForUnions option to switch-exhaustiveness-check (oxc-project#16204) (camc314) - 9cc20a1 minifier: Avoid merging side effectful expressions to next assignment statement if the side effect may change the left hand side reference (oxc-project#16165) (sapphi-red) - 75249e0 linter/plugins: Handle non-UTF8 file paths (oxc-project#16157) (overlookmotel) - 86fa667 linter/plugins: Improve type def for `RuleMeta` `defaultOptions` property (oxc-project#16159) (overlookmotel) - d2b7dcb tsgolint: Improve lsp diagnostic when linting fails (oxc-project#16115) (camc314) - 8810bd5 linter: Prevent conflicting fixes between prefer_number_properties and prefer_numeric_literals (oxc-project#16113) (camc314) - 91eb3f2 ast/estree: Convert `TSImportType` `argument` field to `Literal` (oxc-project#16109) (overlookmotel) - 2da2fc1 linter: Fix prefer-string-raw fixer producing invalid JS for non-ASCII strings (oxc-project#16102) (camc314) - f5cb601 linter/plugins: Perform length checks before continuing loops (oxc-project#16025) (Arsh) - e1c21ca linter/jsx-key: Implement missing options (oxc-project#15731) (camc314) ### ⚡ Performance - 02bdf90 linter/plugins, napi/parser: Reuse arrays in visitor keys (oxc-project#16294) (overlookmotel) - 714a91a linter/no-restricted-types: Skip running if config is empty (oxc-project#16278) (camc314) - d3a34f8 linter/plugins: Optimize `getTokens()` and other methods (oxc-project#16188) (Arsh) - c05db06 linter/plugins: Speed up `initTokensWithComments` (oxc-project#16117) (overlookmotel) - 4846886 linter/plugins: Optimize merging of `tokens` and `comments` (oxc-project#16071) (Arsh) - e232d35 linter/plugins: Recycle objects in token methods (oxc-project#16068) (overlookmotel) ### 📚 Documentation - e928732 linter/plugins: Fix JSDoc comment (oxc-project#16295) (overlookmotel) - d4a1581 linter: Add a link to MDN for the no-proto rule. (oxc-project#16213) (connorshea) - be36e36 linter/plugins: Fix JSDoc comment for `loadPluginImpl` (oxc-project#16211) (overlookmotel) - 6d6e9c9 linter: Improve the docs for oxc/no-async-await rule. (oxc-project#16181) (connorshea) - 0e1d38a linter/plugins: Clarify JSDoc comment for `getTokensBetween` (oxc-project#16070) (overlookmotel) - 3ee22b2 linter/plugins: Fix JSDoc comments for tokens methods (oxc-project#16063) (overlookmotel) - f257b5c linter/plugins: Clarify JSDoc comments for tokens methods (oxc-project#16062) (overlookmotel) # Oxfmt ### 🚀 Features - 116e0d1 website: Auto generate oxfmt docs (oxc-project#15985) (Boshen) - 862bdf7 oxfmt: Detect unsupported experimental options (take2) (oxc-project#16088) (leaysgur) ### 🐛 Bug Fixes - 75ac90c formatter: Comments in call arguments should be printed as-is (oxc-project#16327) (Dunqing) - fd77568 formatter: Don't wrap parenthesis for yield expression if there is no leading comment (oxc-project#16326) (Dunqing) - 8ccfb06 formatter: Should indent class extends and interface heritage when it is a member expression without type arguments (oxc-project#16323) (Dunqing) - 0faa978 oxfmt: JsFormatEmbeddedCb types (oxc-project#16324) (Brooooooklyn) - 2b8f982 formatter: JSX text wrapping incorrect (oxc-project#16318) (Dunqing) - f3ffebe formatter: Should indent variable declarator if there is a trailing comment (oxc-project#16243) (Dunqing) - 31d3186 formatter: Incorrect handling of directives with comments (oxc-project#16235) (Dunqing) - ac8fcaf formatter: Add parens for new: private field expr (oxc-project#16312) (leaysgur) - 653fa6c oxlint/oxfmt/lsp: Tell client the real tool name & version (oxc-project#16212) (Sysix) - 380a0af formatter: Incorrect printing of class binding trailing comments (oxc-project#16234) (Dunqing) - 0ca8154 formatter: Incorrect printing of trailing comments of callee when the call arguments are empty (oxc-project#16232) (Dunqing) - ac3a92e formatter: Print comment in ternary jsx (oxc-project#16224) (leaysgur) - e3a7388 formatter: Fix parens for static member chain (oxc-project#16229) (leaysgur) - 55334c3 formatter: Incorrect printing of dangling comments in the if statement (oxc-project#16228) (Dunqing) - 9096a63 formatter: Correct printing of trailing comments after the semicolon for class properties (oxc-project#16225) (Dunqing) - 75fd568 formatter: Inconsistent union type output between two runs (oxc-project#16222) (Dunqing) - cd70484 formatter: Should not add a hard space before function body (oxc-project#16221) (Dunqing) - 9097167 formatter: Incorrect printing of union types with comments (oxc-project#16205) (Dunqing) - 79b78b3 formatter: Template literal element should not be indented (oxc-project#16189) (Dunqing) - 48d6ed2 formatter: Nested assignment pattern should not expand outer object pattern (oxc-project#16160) (Dunqing) - 8f4137d formatter: Output is incorrect when using comments inside JSX which is the right hand-side of `LogicalExpression` (oxc-project#16156) (Dunqing) - 85c3a10 formatter/sort_imports: Handle internal prefixes correctly (oxc-project#16128) (leaysgur) - 38b7bc4 oxfmt: Make no-napi build work (oxc-project#16134) (leaysgur) - 889d2e7 formatter: Handle poor layout for grouped call arguments (oxc-project#16093) (Dunqing) - 14b0a6a oxfmt: Fix JS-ish file detection (oxc-project#16092) (leaysgur) - 9706a1a oxfmt: Ignore unsupported options (oxc-project#16085) (leaysgur)

This PR is a follow-up on #16036
Move
PoorLayouthandling fromFunctionandArrowFunctionExpressionto call arguments