-
-
Save YodaEmbedding/c2c77dc693d11f3734d78489f9a6eea4 to your computer and use it in GitHub Desktop.
| AccessModifierOffset: -2 | |
| AlignAfterOpenBracket: BlockIndent # New in v14. For earlier clang-format versions, use AlwaysBreak instead. | |
| AlignConsecutiveMacros: false | |
| AlignConsecutiveAssignments: false | |
| AlignConsecutiveDeclarations: false | |
| AlignEscapedNewlines: DontAlign | |
| AlignOperands: false | |
| AlignTrailingComments: false | |
| AllowAllArgumentsOnNextLine: false | |
| AllowAllConstructorInitializersOnNextLine: false | |
| AllowAllParametersOfDeclarationOnNextLine: false | |
| AllowShortBlocksOnASingleLine: Empty | |
| AllowShortCaseLabelsOnASingleLine: false | |
| AllowShortFunctionsOnASingleLine: Empty | |
| AllowShortIfStatementsOnASingleLine: Never | |
| AllowShortLambdasOnASingleLine: All | |
| AllowShortLoopsOnASingleLine: false | |
| AlwaysBreakAfterReturnType: None | |
| AlwaysBreakBeforeMultilineStrings: true | |
| AlwaysBreakTemplateDeclarations: Yes | |
| BinPackArguments: false | |
| BinPackParameters: false | |
| BreakBeforeBinaryOperators: NonAssignment | |
| BreakBeforeBraces: Attach | |
| BreakBeforeTernaryOperators: true | |
| BreakConstructorInitializers: AfterColon | |
| BreakInheritanceList: AfterColon | |
| BreakStringLiterals: false | |
| ColumnLimit: 80 | |
| CompactNamespaces: false | |
| ConstructorInitializerAllOnOneLineOrOnePerLine: true | |
| ConstructorInitializerIndentWidth: 4 | |
| ContinuationIndentWidth: 4 | |
| Cpp11BracedListStyle: true | |
| DerivePointerAlignment: false | |
| FixNamespaceComments: true | |
| IncludeBlocks: Regroup | |
| IncludeCategories: | |
| - Regex: '^<ext/.*\.h>' | |
| Priority: 2 | |
| SortPriority: 0 | |
| CaseSensitive: false | |
| - Regex: '^<.*\.h>' | |
| Priority: 1 | |
| SortPriority: 0 | |
| CaseSensitive: false | |
| - Regex: '^<.*' | |
| Priority: 2 | |
| SortPriority: 0 | |
| CaseSensitive: false | |
| - Regex: '.*' | |
| Priority: 3 | |
| SortPriority: 0 | |
| CaseSensitive: false | |
| IncludeIsMainRegex: '([-_](test|unittest))?$' | |
| IndentCaseLabels: true | |
| IndentPPDirectives: BeforeHash | |
| IndentWidth: 4 | |
| IndentWrappedFunctionNames: false | |
| KeepEmptyLinesAtTheStartOfBlocks: false | |
| MaxEmptyLinesToKeep: 1 | |
| NamespaceIndentation: Inner | |
| PointerAlignment: Left | |
| ReferenceAlignment: Left # New in v13. int &name ==> int& name | |
| ReflowComments: false | |
| SeparateDefinitionBlocks: Always # New in v14. | |
| SortIncludes: true | |
| SortUsingDeclarations: true | |
| SpaceAfterCStyleCast: false | |
| SpaceAfterLogicalNot: false | |
| SpaceAfterTemplateKeyword: false | |
| SpaceBeforeAssignmentOperators: true | |
| SpaceBeforeCpp11BracedList: true | |
| SpaceBeforeCtorInitializerColon: true | |
| SpaceBeforeInheritanceColon: false | |
| SpaceBeforeParens: ControlStatements | |
| SpaceBeforeRangeBasedForLoopColon: true | |
| SpaceInEmptyParentheses: false | |
| SpacesBeforeTrailingComments: 1 | |
| SpacesInAngles: false | |
| SpacesInCStyleCastParentheses: false | |
| SpacesInContainerLiterals: false | |
| SpacesInParentheses: false | |
| SpacesInSquareBrackets: false | |
| Standard: Cpp11 | |
| TabWidth: 4 | |
| UseTab: Never |
Should we let AllowShortBlocksOnASingleLine: Empty? It will allow us to do this:
int count = 0;
for (; count < 10; ++count) {}I've tested with rustfmt, it forces an empty block on the same line.
👍🏻
When clang-format 16 is widely supported, you could consider adding BreakAfterAttributes: Always
thank you so much for this :)
@YodaEmbedding According to https://doc.rust-lang.org/nightly/style-guide/#comments, SpacesBeforeTrailingComments should be set to 1, not 2; to quote: “Prefer to put a comment on its own line. Where a comment follows code, put a single space before it. […]”.
Setting this to 1 also incidentally fixes the formatting of said comments for me when using tabs instead of spaces.
Here's a more rust-like .clang-format in https://gist.github.com/julyfun/8a739e0529818a4a41bf1762e6859fbf
I created this after reading through https://doc.rust-lang.org/nightly/style-guide , as well as a rust-like .clang-tidy here: https://github.com/SJTU-RoboMaster-Team/style-team/blob/main/.clang-tidy
@julyfun Awesome, thanks for sharing! By the way, it appears that Cpp11 is a deprecated alias for Latest, so it's probably best to avoid using it: https://clang.llvm.org/docs/ClangFormatStyleOptions.html#standard
Edit: Also, according to the documentation above, AllowAllConstructorInitializersOnNextLine and ConstructorInitializerAllOnOneLineOrOnePerLine are also deprecated.
gorgeous. thanks alot!
@YodaEmbedding Is there any updated version of this? compatible with the c++20 or further
I had to add PenaltyReturnTypeOnItsOwnLine: 1000000. Otherwise it format this:
Sha2_32 sha2_32_new(
MmioFortimacRegs* regs,
Sha2_32Variant variant,
uint32_t hw_seed
);as this:
Sha2_32
sha2_32_new(MmioFortimacRegs* regs, Sha2_32Variant variant, uint32_t hw_seed);
This style tries its best to match Rust style, which is highly readable and maintains conventions found in modern programming styles from other languages. For things that are unique to C++, I have aimed for either maximum clarity, or how I think the Rust style guide would have handled such a situation.
Most options require clang-format v9+ (released in 2019). Some options (e.g.
AlignAfterOpenBracket: BlockIndent) may require clang-format v14+ (released in 2022).Related alternative styles:
https://chromium.googlesource.com/chromium/src/+/HEAD/styleguide/c++/c++.md
https://google.github.io/styleguide/cppguide.html
Useful links:
The indent size is 4 spaces. If you prefer 2 spaces, run:
Here are some flags that are personal taste, and are not strictly specified by rustfmt, so I chose something reasonable:
Personal taste
Other suggested settings that are not currently in the config above:
Future replacement settings for deprecations:
These will be updated in the posted config in a few years once everyone has moved to using newer clang-format versions.
Changelog: