Skip to content

Instantly share code, notes, and snippets.

@intinig
Last active January 13, 2024 11:56
Show Gist options
  • Star 48 You must be signed in to star a gist
  • Fork 7 You must be signed in to fork a gist
  • Save intinig/9bba3a3faee80250b781bf916a4ab8b7 to your computer and use it in GitHub Desktop.
Save intinig/9bba3a3faee80250b781bf916a4ab8b7 to your computer and use it in GitHub Desktop.
.clang-format for UE4
---
Language: Cpp
AccessModifierOffset: -4
AlignAfterOpenBracket: DontAlign
AlignConsecutiveAssignments: false
AlignConsecutiveDeclarations: false
AlignEscapedNewlines: Left
AlignOperands: true
AlignTrailingComments: true
AllowAllParametersOfDeclarationOnNextLine: true
AllowShortBlocksOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: None
AllowShortIfStatementsOnASingleLine: false
AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: true
AlwaysBreakTemplateDeclarations: Yes
BinPackArguments: true
BinPackParameters: true
BreakBeforeBinaryOperators: None
BreakBeforeBraces: Allman
BreakBeforeInheritanceComma: false
BreakInheritanceList: BeforeColon
BreakBeforeTernaryOperators: true
BreakConstructorInitializersBeforeComma: false
BreakConstructorInitializers: BeforeComma
BreakAfterJavaFieldAnnotations: false
BreakStringLiterals: true
ColumnLimit: 132
CommentPragmas: '^ IWYU pragma:'
CompactNamespaces: true
ConstructorInitializerAllOnOneLineOrOnePerLine: true
ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 4
Cpp11BracedListStyle: true
DerivePointerAlignment: false
DisableFormat: false
FixNamespaceComments: true
ForEachMacros:
- for
IncludeBlocks: Regroup
IncludeCategories:
- Regex: '.*\.generated\.h'
Priority: 100
- Regex: '.*(PCH).*'
Priority: -1
- Regex: '".*"'
Priority: 1
- Regex: '^<.*\.(h)>'
Priority: 3
- Regex: '^<.*>'
Priority: 4
IncludeIsMainRegex: '([-_](test|unittest))?$'
IndentCaseLabels: true
IndentPPDirectives: None
IndentWidth: 4
IndentWrappedFunctionNames: false
JavaScriptQuotes: Leave
JavaScriptWrapImports: true
KeepEmptyLinesAtTheStartOfBlocks: false
MacroBlockBegin: ''
MacroBlockEnd: ''
MaxEmptyLinesToKeep: 1
NamespaceIndentation: None
ObjCBinPackProtocolList: Never
ObjCBlockIndentWidth: 2
ObjCSpaceAfterProperty: false
ObjCSpaceBeforeProtocolList: true
PenaltyBreakAssignment: 2
PenaltyBreakBeforeFirstCallParameter: 1
PenaltyBreakComment: 300
PenaltyBreakFirstLessLess: 120
PenaltyBreakString: 1000
PenaltyBreakTemplateDeclaration: 10
PenaltyExcessCharacter: 1000000
PenaltyReturnTypeOnItsOwnLine: 200
PointerAlignment: Left
RawStringFormats:
- Language: Cpp
Delimiters:
- cc
- CC
- cpp
- Cpp
- CPP
- 'c++'
- 'C++'
CanonicalDelimiter: ''
BasedOnStyle: google
- Language: TextProto
Delimiters:
- pb
- PB
- proto
- PROTO
EnclosingFunctions:
- EqualsProto
- EquivToProto
- PARSE_PARTIAL_TEXT_PROTO
- PARSE_TEST_PROTO
- PARSE_TEXT_PROTO
- ParseTextOrDie
- ParseTextProtoOrDie
CanonicalDelimiter: ''
ReflowComments: true
SortIncludes: true
SortUsingDeclarations: true
SpaceAfterCStyleCast: true
SpaceAfterTemplateKeyword: true
SpaceBeforeAssignmentOperators: true
SpaceBeforeCpp11BracedList: false
SpaceBeforeCtorInitializerColon: true
SpaceBeforeInheritanceColon: true
SpaceBeforeParens: ControlStatements
SpaceBeforeRangeBasedForLoopColon: true
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 4
SpacesInAngles: false
SpacesInContainerLiterals: true
SpacesInCStyleCastParentheses: false
SpacesInParentheses: false
SpacesInSquareBrackets: false
Standard: Auto
TabWidth: 4
UseTab: Always
...
@tbienias
Copy link

tbienias commented Jun 1, 2019

sweet - you saved me a ton of time, thanks! 👍

@intijk
Copy link

intijk commented Sep 2, 2019

Thanks @intinig for such a good clang-format, it can even automatically sort .generated.h include file to correct order.

For people have below error

YAML:18:34: error: invalid boolean
AlwaysBreakTemplateDeclarations: Yes
                                 ^~~

This is because your clang-format version is old, in my test, clang-format-6 notwork, but clang-format-8 works.

# apt install clang-format-8

and in vscode setting

    "clang-format.executable": "clang-format-8",

solved my issue.

@Danielmelody
Copy link

Danielmelody commented Apr 16, 2020

Shouldn't the SortIncludes been set to false?

@intinig
Copy link
Author

intinig commented Apr 16, 2020

Shouldn't the SortIncludes been set to false?

Why do you say so?

@Danielmelody
Copy link

Because the UHT requires a header file been first included in it's cpp file, which would broken the sort include rule.

@intinig
Copy link
Author

intinig commented May 8, 2020 via email

@Danielmelody
Copy link

Danielmelody commented May 8, 2020

B.cpp should be:

#include "B.h"
#include "A.h"

however with this option opened, it will be sort to

#include "A.h"
#include "B.h"

this is also mentioned in clang-format's official page:

SortIncludes (bool)
If true, clang-format will sort #includes.

false:                                 true:
#include "b.h"                 vs.     #include "a.h"
#include "a.h"                         #include "b.h"

@intinig
Copy link
Author

intinig commented May 8, 2020

What you're saying doesn't consider IncludeBlocks and and IncludeCategories.

@intinig
Copy link
Author

intinig commented May 8, 2020

In .cpp files you'll get your own include at the top, then sorted separate blocks according to how they should go.

image

@intinig
Copy link
Author

intinig commented May 8, 2020

If you read the docs on IncludeCategories you'll see the main header always gets priority 0.

@brycehutchings
Copy link

Thanks for this file--you saved me a lot of time. The only change I've made so far is NamespaceIndentation to "All" from "None"

@intinig
Copy link
Author

intinig commented Jun 23, 2020

Thanks for this file--you saved me a lot of time. The only change I've made so far is NamespaceIndentation to "All" from "None"

No problem :) sharing is caring!

@JanSeliv
Copy link

JanSeliv commented Jul 7, 2020

Thank you @intinig
Just asking, is it possible to disable formatting for inline functions?
f.e:

FORCEINLINE class USpringArmComponent* GetCameraBoom() const { return CameraBoom; }

breaks it to

FORCEINLINE class USpringArmComponent* GetCameraBoom() const
{
	return CameraBoom;
}

@ufna
Copy link

ufna commented Dec 28, 2020

@JanSeliv just place ; :)

FORCEINLINE class USpringArmComponent* GetCameraBoom() const { return CameraBoom; };

@JanSeliv
Copy link

JanSeliv commented Jan 2, 2021

@JanSeliv just place ; :)

FORCEINLINE class USpringArmComponent* GetCameraBoom() const { return CameraBoom; };

yeah, thank you! :)

@freaknbigpanda
Copy link

freaknbigpanda commented Feb 25, 2021

This is breaking my code, for example:

image

becomes:

image

And it doesn't compile, any idea what setting would be causing this?

@ughstudios
Copy link

Anyone have a similar configuration for clang-tidy?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment