feat(formatter): restrict formatting to only the changed range of a file. #4604
feat(formatter): restrict formatting to only the changed range of a file. #4604micuintus wants to merge 1 commit intoanomalyco:devfrom
Conversation
917250b to
f4593c6
Compare
f1dc981 to
3e15a39
Compare
df8bdf9 to
0dd5039
Compare
|
@rekram1-node What is the state on this? Are you considering these suggestions? |
|
Yeah I see what you are trying to solve there. I would need some time to look into it more to review but I will say this looks very vibe coded so I won't just auto merge without a throughout review |
Yes, I did use But yeah, this code needs to be reviewed, of course :) I started with the line-number-based range API of clang-format and actually left it as a separate commit (the rest is squashed into the subsequent commit). Then I checked which interface Qt Creator uses: char/byte range API for subfile formatting --- and as it enables us to apply the same logic with Aside from my use case (legacy code bases with humongous unformatted areas): Auto-formatting only the affected part of the file that opencode had touched makes a lot of sense to me; formatting the rest of the file should be a different task / step anyways IMO. Having such a system in place would not only be very beneficial for my workflow, I believe it would make opencode a better tool for everyone. Feel feel to request changes or I'd also be happy to hand this branch over. |
|
@rekram1-node Is there any way I can increase your confidence with that topic? |
f8ee907 to
6a9856d
Compare
d05f216 to
5b0fb78
Compare
@rekram1-node bump :) |
|
this is good we're gonna merge it, aiden will follow up |
|
@micuintus can you update your code to follow some of our style guidelines a bit better? Ex: change changedRanges to just ranges, stuff like that |
5bd0b08 to
762626d
Compare
@rekram1-node Sorry for the delay, I only just saw this. -> Done: 2d4778310978089f6001b303832cd29b377ebd12 Anything else? |
ad58d48 to
4c6598d
Compare
|
@rekram1-node Merge? :) |
82bc9e0 to
d667d94
Compare
|
Since Aiden is out, can sb else from the team take that over? Who would that be? It would help the development with legacy code bases I have to deal with a lot (also for my colleagues). |
894b791 to
7416913
Compare
|
@Hona @adamdotdevin anyone? |
There was a problem hiding this comment.
unicode surrogate pairs break range mapping. calculateRanges("", "😀a\n") can produce byteEnd=NaN, which then generates invalid clang args (--length=NaN). please fix the offset mapping so non-bmp chars are handled correctly, and add a regression test for this
|
@nexxeln Thanks! Should be fixed! |
|
Gemini 3.1 says: Claude Opus 4.6 says: |
|
Gemini Pro 3.1 |
|
Claude Opus 4.6 review: |
|
Gemini 3.1 Pro: |
Formatter range coverage: * Prettier formats one range per invocation applied backwards (highest offset first) to preserve byte offsets * clang-format supports multiple --offset/--length pairs in a single invocation. * No other formatters (gofmt, rustfmt, ruff, black) support range-based formatting; biome has experimental range support not yet integrated.




Restrict formatting only to the edited line range for clang-format
When using the Edit tool, clang-format now only formats the specific lines
that were changed, rather than reformatting the entire file. This prevents
unrelated formatting changes from cluttering the diff.
Closes #4603