Skip to content

Conversation

@0xrusowsky
Copy link
Contributor

Motivation

when running the new formatter on solady, we realized that if stmts in assembly blocks where sometimes broken when they shouldn't

@@ -692,7 +692,10 @@ library J50NParserLib {
 if eq(chr(_p0ut), 46) { _pout := skip0To9s(add(_pout, 1), end, 1) } // '.'.
 let t_ := mload(_pout)
 // 'E', 'e'.
- if eq(or(0x20, byte(0, t_)), 101) {
+ if eq(
+     or(0x20, byte(0, t_)),
+     101
+ ) {
    // forgefmt: disable-next-item

i tracked down 2 different root-causes:

  1. space left isn't always accurate
  2. inline disable would sometimes prevent breaks

Solution

  • for point 1, i introduced:
/// Computes the maximum space left given the context information available:
/// `block_depth`, `tab_width`, and a user-defined unavailable size `prefix_len`.
fn max_space_left(&self, prefix_len: usize) -> usize {
    self.config
        .line_length
        .saturating_sub(self.block_depth * self.config.tab_width + prefix_len)
}
  • for point 2, i used a "hardbreak" rather than a "space" when we know there is an inline disable cmnt

  • additionally, i changed word() to print_word() to update the counter in assembly blocks

PR Checklist

  • Added Tests
  • Added Documentation
  • Breaking changes

@0xrusowsky 0xrusowsky self-assigned this Oct 27, 2025
@0xrusowsky 0xrusowsky added the Cmd-forge-fmt Command: forge fmt label Oct 27, 2025
@0xrusowsky 0xrusowsky added this to the v1.4.0 milestone Oct 27, 2025
@0xrusowsky 0xrusowsky moved this to Ready For Review in Foundry Oct 27, 2025
@grandizzy grandizzy added this pull request to the merge queue Oct 28, 2025
@github-merge-queue github-merge-queue bot removed this pull request from the merge queue due to failed status checks Oct 28, 2025
@grandizzy grandizzy added this pull request to the merge queue Oct 28, 2025
Merged via the queue into master with commit d92c89e Oct 28, 2025
15 checks passed
@grandizzy grandizzy deleted the rus/fmt-inline-if branch October 28, 2025 07:00
@github-project-automation github-project-automation bot moved this from Ready For Review to Done in Foundry Oct 28, 2025
grandizzy pushed a commit to grandizzy/foundry that referenced this pull request Oct 28, 2025
grandizzy added a commit that referenced this pull request Oct 30, 2025
* fix(fmt): no trailing cmnts in opening brace of empty blocks (#12241)

* fix(fmt): only print trailing cmnts in opening brace when block is not
empty

* doc: link issue

---------

Co-authored-by: grandizzy <[email protected]>

* fix(fmt): preserve indexed callee when it fits (#12270)

* fix(fmt): preserve indexed callee when it fits

* style: typos

* fix(forge): fix dynamic gas limit check (#12267)

* fix(forge): fix dynamic gas limit check

* add repro

* chore: update traces for p256 precompile test (#12242)

chore: redact part of traces for p256 precompile test

* chore: bump v1.4.4 (#12271)

* fix(forge): update progress on rejected fuzz runs (#12243)

fix: update progress on rejected runs

* feat(fmt): enforce doc comment styling (#11955)

* feat(fmt): force doc comment styling

* tests: add unit tests

* style: clippy + comments

* fix: default config test

* chore(fmt): prefer_compact + indent bin expr w/ parenthesis (#12281)

* fix: indentation in operator exprs with parentheses

* docs: new param

* feat: prefer_compact

* fix: test

* style: typo

* fix: default config test

* Fix wrap comments test

* fix: emit and revert

---------

Co-authored-by: grandizzy <[email protected]>

* chore(docs): default `all` for `prefer_compact` fmt config (#12294)

chore: default all for prefer_compact fmt

* docs(fmt): add `none` variant (#12298)

* feat(fmt): add single_line_imports option to keep single imports on one line (#12303)

* add single_line_imports option to keep single imports on one line

* update readme

* add tests for single_line_imports feature + fmt

* fix clippy and simplify the code

* fix test failed

* fix: simplify

---------

Co-authored-by: 0xrusowsky <[email protected]>
Co-authored-by: grandizzy <[email protected]>

* fix(fmt): keep if stmts inline in assembly blocks (#12306)

fix(fmt): asm inline if stmt

* fix(fmt): prevent double-ind in complex ternary expr (#12317)

* fix(fmt): only indent wrapped trailing block cmnts (#12319)

* fix(fmt): only indent wrapped trailing cmnts which are line cmnts

* style: flip

---------

Co-authored-by: grandizzy <[email protected]>

* fix(fmt): don't break var assignments when callee fits (#12323)

* fix(fmt): don't break var assignments when callee fits

* fix: deindent calls (exception)

* chore: update arb tests, use different rpc url (#12321)

* chore: use drpc arb

* Use other

* fix(fmt): properly calc fn header size (#12343)

* fix(fmt): properly calc fn header size

* docs: add more cmnts

* fix: revert bun.lock changes

* test(fmt): ensure fn header sizes are computed correctly (#12350)

* fix(fmt): properly calc fn header size

* docs: add more cmnts

* fix: revert bun.lock changes

* test: estimate_header_size

* simplify tests

* style: clippy

* chore: patch solar to main rev (#12379)

* chore: back to arbitrum rpc (#12382)

* fix(fmt): always break consistently in calls with opts and args (#12359)

* fix(fmt): always break consistently in calls with opts and args

* more tests

* test: simplify

---------

Co-authored-by: 0xrusowsky <[email protected]>
Co-authored-by: silve K <[email protected]>
Co-authored-by: 0xrusowsky <[email protected]>
@rplusq rplusq mentioned this pull request Oct 31, 2025
@jenpaff jenpaff moved this from Done to Completed in Foundry Nov 3, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Cmd-forge-fmt Command: forge fmt

Projects

Status: Completed

Development

Successfully merging this pull request may close these issues.

3 participants