---
# Language
Language:        Cpp
Standard:        c++20

# Indentation
TabWidth:        4
UseTab:          Always
IndentWidth:     4
ColumnLimit:     120

# Indentation detail
AlignAfterOpenBracket: DontAlign
ContinuationIndentWidth: 4
BreakConstructorInitializers: BeforeComma
ConstructorInitializerIndentWidth: 4
ConstructorInitializerAllOnOneLineOrOnePerLine: false
BinPackParameters: true
BinPackArguments: true
AlignOperands: false

# Alignment
AlignEscapedNewlines: DontAlign
AccessModifierOffset: -4
AllowShortBlocksOnASingleLine: Always
AllowShortIfStatementsOnASingleLine: Always
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: InlineOnly
BreakBeforeBinaryOperators: All

# Includes
IncludeBlocks:   Regroup
IncludeCategories:
  # windows.h must go before everything else
  # otherwise, you will get errors
  - Regex:           '^<windows.h>$'
    Priority:        -99
  # the "main header" implicitly gets priority 0
  # system headers
  - Regex:           '^<[^>]+>$'
    Priority:        1
  # non-system headers
  - Regex:           '.*'
    Priority:        2
SortIncludes:    true

# Spaces
SpaceBeforeAssignmentOperators: true
SpaceBeforeParens: ControlStatements
SpacesInAngles:  false
SpacesInCStyleCastParentheses: false
SpacesInParentheses: false

# Brace wrapping
# Not directly mentioned in the coding conventions,
# but required to avoid tons of auto reformatting
BreakBeforeBraces: Custom
BraceWrapping:
  AfterClass: true
  AfterControlStatement: Always
  AfterEnum: true
  AfterFunction: true
  AfterNamespace: false
  AfterStruct: true
  AfterUnion: true
  AfterExternBlock: false
  BeforeCatch: true
  BeforeElse: true
  IndentBraces: false
  SplitEmptyFunction: true
  SplitEmptyRecord: true
  SplitEmptyNamespace: true
  BeforeWhile: false
  BeforeLambdaBody: false

# Do not break doxygen comments
CommentPragmas:  '^[[:space:]]*\\.+'

# Pointers
# Use pointer close to type: `const char* const* function()`
PointerAlignment: Left

...

