Repository navigation
Conversation
If I remember correctly, we intentionally chose left alignment with a 4-character spacing. |
Thanks. Updated description, accidentally pasted older version. This line wasn't changed. |
|
What is the correct strategy to migrate old branches to new main after the formatting was merged into main? |
|
removed this text, everything is in the main description |
|
Did you test it? Does it work? This does not look as if it would work. I would expect the formatting needs to be merged into each commit of the branch? |
Can you plz add short code examples before and after the changes? |
|
I'll update the description soon with more validating, newer guide, and code examples. |
|
This needs progress. |
bf5acb4 to
0a067f8
Compare
|
So now the big question is: WHEN MERGE? 👀 |
| : m_offset(0) | ||
| , m_size(0) | ||
| : m_offset(0) | ||
| , m_size(0) |
There was a problem hiding this comment.
Leading tab and then 2 spaces, is that as intended? Naturally we would have expected leading tabs.
There was a problem hiding this comment.
This was intentional to prevent Github from showing the wrong width. We can revert this to "AlignWithSpaces".
"UseTab: ForIndentation: Fixes the tab-space rendering mismatch in preprocessor block comments on GitHub (where GitHub defaults to tab=8, causing space-aligned block comments inside tab-indented preprocessor blocks to look misaligned)."
Didn't find a UseTab that wouldn't either uglify, keep github aligned or uses a single type of whitespace.
| #define DEBUG_LOG_RAW(m) do { { DebugLogRaw m ; } } while (0) // Log message without trailing new line character (LF) | ||
| #define DEBUG_LOG_LEVEL(l, m) do { if (l & DebugLevelMask) { DebugLog m ; } } while (0) | ||
| #define DEBUG_LOG_LEVEL_RAW(l, m) do { if (l & DebugLevelMask) { DebugLogRaw m ; } } while (0) | ||
| #define DEBUG_ASSERTLOG(c, m) do { { if (!(c)) DebugLog m ; } } while (0) |
There was a problem hiding this comment.
Maybe a clang format off would be better readable for these macros
There was a problem hiding this comment.
We can also try AfterControlStatement: MultiLine.
"Changing AfterControlStatement from Always to MultiLine tells clang-format to only break the { onto a new line if the controlling expression spans multiple lines. Since do has no condition, and single-line if (cond) conditions stay on one line, the { stays inline for all short macro bodies."
There was a problem hiding this comment.
That does not sound ideal for this one case.
There was a problem hiding this comment.
What about:
#define DEBUG_LOG(m) ((void)(DebugLog m, 0)) // Log message with trailing new line character (LF)
#define DEBUG_LOG_RAW(m) ((void)(DebugLogRaw m, 0)) // Log message without trailing new line character (LF)
#define DEBUG_LOG_LEVEL(l, m) ((void)((l & DebugLevelMask) ? (DebugLog m, 0) : 0))
#define DEBUG_LOG_LEVEL_RAW(l, m) ((void)((l & DebugLevelMask) ? (DebugLogRaw m, 0) : 0))
#define DEBUG_ASSERTLOG(c, m) ((void)((!(c)) ? (DebugLog m, 0) : 0))
Quickly checking I found 16 of these instances in this codebase. 10 of them can be fixed in this way. The remaining 6 are complex enough where the expansion would make sense.
0a067f8 to
cd0af70
Compare
cd0af70 to
d65ade8
Compare
d65ade8 to
f1e1de1
Compare
|
Regenerated with: IndentPPDirectives: None |
f1e1de1 to
c8524e9
Compare
|
Regenerated with: |
be9637b to
77f0cd5
Compare
659a3e9 to
1347200
Compare
|
Needs rebase and update. |
1347200 to
4e88810
Compare
| for (int i = 0; i < STATECOUNT; ++i) | ||
| { |
There was a problem hiding this comment.
Every single line loop or condition now adds the {}. Is this intentional? It will add a extra vertical space when not always needed.
There was a problem hiding this comment.
InsertBraces: true did that. Reverting on next regeneration.
There was a problem hiding this comment.
For starters I would be happy if braces are only added if it is missing on one of the if else branches.
So for example
if (...)
{
// does something
}
else
// does something else without bracesto
if (...)
{
// does something
}
else
{
// does something else
}4e88810 to
e8a547f
Compare
|
Were the last comments addressed? |
|
this was a small regression fix. I'll look into the last comments soon |
e8a547f to
c9d4779
Compare
WalkthroughWarning Review details and warnings were omitted to fit the comment limit. |
[Low impact] The formatting pass reaches source code across the repository without intending to change runtime behavior. The table-alignment requirement needs to be satisfied before merging. Findings
|
|
Can be rebased. |
c9d4779 to
dbff175
Compare
…sm block layout Follow-up to TheSuperHackers#2811, prerequisite for the clang-format pass in TheSuperHackers#2820. clang-format joins consecutive brace-less `__asm` statements onto one line, and MSVC treats everything after a brace-less `__asm` up to the end of the line as assembly, which pulls following C++ statements into the asm (e.g. `__asm fistp ... return retval;`). Wrap the remaining occurrences in `__asm { }` blocks, and inline the multi-line TRANSPOSE asm macro into its only use. clang-format also never formats the inside of an inline assembly block, and formats `_asm` followed by `{` on the next line as a continuation. Write every block as `__asm {` on one line with a tab-indented body, asm labels at the `__asm` level and no `;` after the closing brace. VC6 codegen of all affected translation units is unchanged.
|
would adding a preset like |
dbff175 to
8f77e35
Compare
| { "Filename", INI::parseAsciiString, nullptr, offsetof(AudioEventInfo, m_filename) }, | ||
| { "Volume", INI::parsePercentToReal, nullptr, offsetof(AudioEventInfo, m_volume) }, | ||
| { "VolumeShift", INI::parsePercentToReal, nullptr, offsetof(AudioEventInfo, m_volumeShift) }, | ||
| { "MinVolume", INI::parsePercentToReal, nullptr, offsetof(AudioEventInfo, m_minVolume) }, |
There was a problem hiding this comment.
The formatter removes the aligned columns from AudioEventInfo::m_audioEventInfo, making its rows harder to scan. The repository requires columns in changed lookup tables and initialization lists to stay aligned. Restore this alignment before merging and adjust the formatting settings so future runs preserve it. The same pattern appears in other tables across the PR.
Rule Used: Align columns in data-oriented blocks (like lookup tables, initialization lists, or structured data) for readability; otherwise prefer single spacing. When modifying a block, maintain alignment only within that specific block being changed. (source)
Learned From
TheSuperHackers/GeneralsGameCode#2067
Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
There was a problem hiding this comment.
the old version don't look aligned to me as well
There was a problem hiding this comment.
You’re right that the old formatting isn’t especially clear in the diff view. Looking at the source, though, the initializer fields were padded with tabs so the columns lined up in an editor; the new version replaces that with single spaces, so the columns no longer line up. My comment should have made that distinction clearer.
There was a problem hiding this comment.
I think its fine. The padding also has a cost for diffs, because adding a new row with columns wider than all others in a block forces updating all rows, which is not good.
There was a problem hiding this comment.
That’s a fair trade-off: padding can make a new wider row touch every existing row, while the formatter’s single-spacing avoids that churn. This is a style/readability choice, not a correctness issue, so I’ll withdraw the finding for this PR. The current review guidance prefers aligned columns in data-oriented blocks; should I update it to prefer single spacing when alignment would cause table-wide edits for new rows?
|
I checked out all the webkit settings and didn't find any useful changes. Most things looked more wrong after this. |
Fair, i was just using it as an example. |
|
Was there anything left to tweak here or is this ready for re-review? |

This PR applies a repository-wide mechanical reformatting across all project source code using
clang-format22.1.8.This is the successor to the original formatting attempt in PR #2638 (submitted by @DevGeniusCode). Following up on the community poll in Discord ("Apply clang-format on all code", which passed with 53%), this PR establishes the formatting baseline. Because the output is 100% automated, if conflicts arise from other PRs landing before this one, regenerating the diff is trivial (re-run the formatter and force-push).
A follow-up PR will add a
.git-blame-ignore-revsfile containing the commit hash of this formatting pass so thatgit blame(both locally and on GitHub) automatically skips over the formatting changes and preserves the historical authorship of every line.What Changed vs PR #2638
Three config adjustments have been applied based on review feedback and legacy toolchain compatibility:
UseTab: ForIndentation: Fixes the tab-space rendering mismatch in preprocessor block comments on GitHub (where GitHub defaults to tab=8, causing space-aligned block comments inside tab-indented preprocessor blocks to look misaligned).SpacesInAngles: Leave: Retains existing spacing inside template brackets (e.g., keeping> >rather than collapsing them to>>), which is required for legacy C++98 / VC6 compiler compatibility.Cpp11BracedListStyle: false: Prevents the formatter from collapsing braced initializer lists to C++11 single-line style, maintaining Allman brace layout consistency.1.
UseTab: ForIndentationGameLogic.h 25–45Current (Before):
2.
SpacesInAngles: LeavePerfTimer.cpp 205–2253.
Cpp11BracedListStyle: falseWOLGameSetupMenu.cpp 218–226All other open review items from PR #2638 have been resolved, are hardcoded
clang-formatparser behaviors (such as the Doxygen Javadoc star alignment), or have since landed onmain.Key Legacy & Toolchain Compatibility Settings
To ensure the codebase continues to compile cleanly on both modern toolchains (VS2022) and the legacy target toolchain (Visual C++ 6), the following settings are established in
.clang-format:SpacesInAngles: Leave):Prevents
clang-formatfrom collapsing nested template arguments (e.g.,std::vector<std::vector<int> >to>>). VC6 and older compilers misparse>>as a right-shift operator. PR chore: Prevent conflict between clang-format and pre-C++11 nested template parsing #2760 (and its closed predecessor PR refactor: Extract nested templates into typedefs for legacy compatibility #2642) already resolved the instances where it was collapsed, and this setting ensures it stays that way.Cpp11BracedListStyle: false):Prevents formatting braced-init-lists in C++11 style, which causes parsing issues on legacy compilers.
clang-formathas known parser conflicts with MSVC-style inline assembly blocks when not enclosed in curly braces (which can cause the formatter to join assembly lines and break compilation). These have been pre-emptively wrapped in curly braces (__asm { ... }) inmainvia PR chore: Prevent conflict between clang-format and MSVC by wrapping inline assembly blocks in curly braces #2811, making the formatter pass entirely safe.Problems regarding assignment formatting split across macros have been pre-emptively addressed by PR refactor: Eliminate macro-split assignments #2641.
Scope & Merging Strategy
The PR includes the full codebase diff across all source files.
mainbefore this one, resolving conflicts is trivial: we simply re-run the formatter locally on top of the updatedmainbranch and force-push.Zero-Trust Verification
Reviewers can verify that this PR is 100% mechanically generated with no manual edits by running the following steps directly from
mainwithout checking out this branch:Expected result: The
diffoutput must be completely empty. If silent, it guarantees the PR contains only tool-generated formatting changes.How to Migrate Existing Feature Branches
If you have an active feature branch developed before this bulk formatting pass, you can migrate it to the new formatted main branch by letting Git automatically ignore whitespace-only conflicts during the rebase. Any remaining conflicts after this step are genuine code-logic overlaps between your changes and this PR and will need to be resolved manually as usual.