-
-
Save nicklasfrahm/4a4fff24381f85ada76ccb651f555e1f to your computer and use it in GitHub Desktop.
AccessModifierOffset: 2 | |
AlignAfterOpenBracket: true | |
AlignConsecutiveAssignments: true | |
AlignConsecutiveDeclarations: true | |
AlignEscapedNewlines: Right | |
AlignOperands: true | |
AlignTrailingComments: true | |
AllowAllParametersOfDeclarationOnNextLine: true | |
AllowShortBlocksOnASingleLine: false | |
AllowShortCaseLabelsOnASingleLine: true | |
AllowShortFunctionsOnASingleLine: None | |
AllowShortIfStatementsOnASingleLine: true | |
AllowShortLoopsOnASingleLine: true | |
AlwaysBreakAfterReturnType: None | |
AlwaysBreakBeforeMultilineStrings: true | |
AlwaysBreakTemplateDeclarations: false | |
BinPackArguments: false | |
BinPackParameters: false | |
BreakBeforeBraces: Attach | |
BreakBeforeInheritanceComma: false | |
BreakBeforeTernaryOperators: true | |
BreakStringLiterals: false | |
ColumnLimit: 80 | |
ConstructorInitializerAllOnOneLineOrOnePerLine: true | |
ConstructorInitializerIndentWidth: 2 | |
ContinuationIndentWidth: 2 | |
CompactNamespaces: false | |
IndentCaseLabels: true | |
IndentWidth: 2 | |
TabWidth: 2 | |
UseTab: Never |
thanks!
Im using this config
Language: Cpp
ColumnLimit: 80
ContinuationIndentWidth: 2
UseTab: Never
IndentWidth: 2
TabWidth: 2
IndentCaseLabels: true
SortIncludes: true
SortUsingDeclarations: false
AlignConsecutiveMacros: false
AlignEscapedNewlines: DontAlign
AlignAfterOpenBracket: AlwaysBreak
AlignOperands: false
AlignTrailingComments: false
BinPackArguments: false
BinPackParameters: false
SpacesInContainerLiterals: false
Cpp11BracedListStyle: true
AllowShortFunctionsOnASingleLine: Empty
AllowShortIfStatementsOnASingleLine: Always
FixNamespaceComments: false
ReflowComments: false
NamespaceIndentation: All
IncludeBlocks: Merge
BreakStringLiterals: false
ConstructorInitializerIndentWidth: 2
SpaceBeforeCtorInitializerColon: true
BreakBeforeInheritanceComma: false
BreakInheritanceList: AfterColon
BreakConstructorInitializersBeforeComma: false
BreakConstructorInitializers: AfterColon
ConstructorInitializerAllOnOneLineOrOnePerLine: true
This was a good starting point and I managed to get quite a bit closer and at least get stuff in braces to be formatted just as Prettier would. I'm quite happy with this and felt like sharing because I spent hours searching for something like this and going through clang-format options. Note that I use 4 space indentation which you can change that if you prefer.
The key things I changed that made it work much better were AlignAfterOpenBracket: BlockIndent
, AllowAllArgumentsOnNextLine: false
, and AllowAllParametersOfDeclarationOnNextLine: false
AlignAfterOpenBracket: BlockIndent
AlignConsecutiveMacros: false
AlignEscapedNewlines: DontAlign
AlignOperands: Align
AlignTrailingComments: false
AllowAllArgumentsOnNextLine: false
AllowAllParametersOfDeclarationOnNextLine: false
AllowShortBlocksOnASingleLine: Empty
AllowShortCaseLabelsOnASingleLine: false
AllowShortEnumsOnASingleLine: false
AllowShortFunctionsOnASingleLine: Inline
AllowShortIfStatementsOnASingleLine: false
AllowShortLoopsOnASingleLine: false
BinPackArguments: false
BinPackParameters: false
BreakBeforeInheritanceComma: false
BreakConstructorInitializers: AfterColon
BreakConstructorInitializersBeforeComma: false
BreakInheritanceList: AfterColon
BreakStringLiterals: false
ColumnLimit: 80
ConstructorInitializerAllOnOneLineOrOnePerLine: true
ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 4
Cpp11BracedListStyle: false
DeriveLineEnding: true
FixNamespaceComments: false
IncludeBlocks: Merge
IndentCaseLabels: true
IndentWidth: 4
LambdaBodyIndentation: OuterScope
Language: Cpp
NamespaceIndentation: All
PackConstructorInitializers: CurrentLine
PointerAlignment: Right
QualifierAlignment: Left
ReferenceAlignment: Right
ReflowComments: true
SeparateDefinitionBlocks: Always
SortIncludes: true
IncludeBlocks: Regroup
IncludeCategories:
- Regex: '"[[:alnum:]._-]+"'
Priority: 1
SortPriority: 1
- Regex: '^((<|").*/)'
Priority: 2
SortPriority: 2
- Regex: '<[[:alnum:]._-]+>'
Priority: 3
SortPriority: 3
SortUsingDeclarations: false
SpaceBeforeCtorInitializerColon: true
SpacesInContainerLiterals: false
TabWidth: 4
UseTab: Never
@JonnyHaystack which version of clang-format are you using?
I get this error on 13.0.1
error: unknown enumerated scalar
AlignAfterOpenBracket: BlockIndent
Latest 14.0. I use vim with coc.nvim clangd extension and it installs the latest automatically. And for VS Code on Windows I just installed LLVM 14.0 from github.
I see, looks like homebrew in mac didn't updated yet
Ah, shame. I didn't even know it was a new option because it doesn't say the version in which each value was introduced. But definitely worth upgrading for imo. Also when I said braces before, I meant parentheses, but arrays in braces work as well if you use a trailing comma.
@JonnyHaystack thank you for your config, it improved mine one, now it looks like this
# https://clang.llvm.org/docs/ClangFormatStyleOptions.html
ColumnLimit: 80
ContinuationIndentWidth: 2
IndentWidth: 2
TabWidth: 2
ConstructorInitializerIndentWidth: 2
IndentCaseLabels: true
UseTab: Never
SortIncludes: true
SortUsingDeclarations: false
AlignConsecutiveMacros: false
AlignEscapedNewlines: DontAlign
AlignAfterOpenBracket: BlockIndent
AlignOperands: false
AlignTrailingComments: false
BinPackArguments: false
BinPackParameters: false
SpacesInContainerLiterals: false
Cpp11BracedListStyle: true
AllowShortFunctionsOnASingleLine: Empty
AllowShortIfStatementsOnASingleLine: Always
FixNamespaceComments: false
ReflowComments: false
NamespaceIndentation: All
IncludeBlocks: Merge
BreakStringLiterals: false
BreakConstructorInitializers: AfterColon
IndentPPDirectives: BeforeHash
IncludeCategories:
- Regex: '"[[:alnum:]._-]+"'
Priority: 1
SortPriority: 1
- Regex: '^((<|").*/)'
Priority: 2
SortPriority: 2
- Regex: "<[[:alnum:]._-]+>"
Priority: 3
SortPriority: 3
@JonnyHaystack I like your IncludeCategories config but I found a case that sorts includes like this
#include "selectedTile.hpp"
#include "../../input.hpp"
#include "../../size.hpp"
#include "../../tiles/style.hpp"
#include "../tilemap.hpp"
do you think that it will be possible push to the bottom directories that are more deep like this?
#include "selectedTile.hpp"
#include "../tilemap.hpp"
#include "../../input.hpp"
#include "../../size.hpp"
#include "../../tiles/style.hpp"
Hmm, not sure how to make it treat those differently and essentially reverse the sort order while keeping them in the same group.
@dortamiguel thanks, this works great for me!
I only had to add one more setting:
PenaltyReturnTypeOnItsOwnLine: 200
Otherwise I ended up with something like this:
bool
myFunction(/* some args that would fit into one line */) {
// ...
}
PenaltyReturnTypeOnItsOwnLine
thank you! that is great :)
For anyone looking for the full version :
# https://clang.llvm.org/docs/ClangFormatStyleOptions.html
ColumnLimit: 80
ContinuationIndentWidth: 2
IndentWidth: 2
TabWidth: 2
ConstructorInitializerIndentWidth: 2
IndentCaseLabels: true
PenaltyReturnTypeOnItsOwnLine: 200
UseTab: Never
SortIncludes: true
SortUsingDeclarations: false
AlignConsecutiveMacros: false
AlignEscapedNewlines: DontAlign
AlignAfterOpenBracket: BlockIndent
AlignOperands: false
AlignTrailingComments: false
BinPackArguments: false
BinPackParameters: false
SpacesInContainerLiterals: false
Cpp11BracedListStyle: true
AllowShortFunctionsOnASingleLine: Empty
AllowShortIfStatementsOnASingleLine: Always
FixNamespaceComments: false
ReflowComments: false
NamespaceIndentation: All
IncludeBlocks: Merge
BreakStringLiterals: false
BreakConstructorInitializers: AfterColon
IndentPPDirectives: BeforeHash
IncludeCategories:
- Regex: '"[[:alnum:]._-]+"'
Priority: 1
SortPriority: 1
- Regex: '^((<|").*/)'
Priority: 2
SortPriority: 2
- Regex: "<[[:alnum:]._-]+>"
Priority: 3
SortPriority: 3
Feel free to improve and append. At some point I got bored reading through this. Maybe somebody else has more patience. Maybe one could mimick the
prettier
behaviour.