# https://clang.llvm.org/docs/ClangFormatStyleOptions.html

Language: Cpp

BreakBeforeBraces: Custom
BraceWrapping:
  AfterCaseLabel: true
  AfterClass: true
  AfterControlStatement: Always
  AfterEnum: true
  AfterFunction: true
  AfterNamespace: true
  AfterStruct: true
  AfterUnion: true
  BeforeCatch: true
  BeforeElse: true
  BeforeLambdaBody: false
  BeforeWhile: true
  SplitEmptyFunction: false
  SplitEmptyNamespace: false
  SplitEmptyRecord: false

AlignAfterOpenBracket: Align
#AlignConsecutiveAssignments: AcrossComments
#AlignConsecutiveDeclarations: AcrossComments
AlignOperands: true
AlignTrailingComments: true
AllowShortBlocksOnASingleLine: Always
AllowShortCaseLabelsOnASingleLine: true
AllowShortEnumsOnASingleLine: true
AllowShortFunctionsOnASingleLine: All
AllowShortIfStatementsOnASingleLine: AllIfsAndElse
AllowShortLambdasOnASingleLine: All
AllowShortLoopsOnASingleLine: true
AlwaysBreakTemplateDeclarations: No

BreakBeforeBinaryOperators: None
BreakConstructorInitializers: AfterColon

ColumnLimit: 0

FixNamespaceComments: true

IncludeBlocks: Regroup
IncludeCategories:
  # put third party headers before standard headers
  - Regex: "<.*\\.(h|hpp|hxx)>"
    Priority: 100
  # match standard headers
  - Regex: "<[a-z_]+>"
    Priority: 1000

IndentCaseLabels: true
IndentWidth: 2

#PackConstructorInitializers: CurrentLine
PointerAlignment: Left

#QualifierAlignment: Left

ReferenceAlignment: Left

SpaceBeforeRangeBasedForLoopColon: true

Standard: Latest

UseTab: Never
