BasedOnStyle: LLVM
Language: Cpp
Standard: c++17

IndentWidth: 4
TabWidth: 4
UseTab: Never

ContinuationIndentWidth: 8

# -------------------------------------------------
# Braces (LLVM style)
# -------------------------------------------------
BreakBeforeBraces: Custom
BraceWrapping:
  AfterClass: false
  AfterControlStatement: false
  AfterEnum: false
  AfterFunction: false
  AfterNamespace: false
  AfterStruct: false
  AfterUnion: false
  BeforeElse: false
  IndentBraces: false

# -------------------------------------------------
# Pointer / Reference
# -------------------------------------------------
PointerAlignment: Left
ReferenceAlignment: Left
DerivePointerAlignment: false

# -------------------------------------------------
# Line breaking
# -------------------------------------------------
ColumnLimit: 100
BreakBeforeBinaryOperators: NonAssignment
BreakConstructorInitializers: AfterColon

AllowShortFunctionsOnASingleLine: InlineOnly
AllowShortIfStatementsOnASingleLine: false
AllowShortLoopsOnASingleLine: false
AllowShortBlocksOnASingleLine: false

# -------------------------------------------------
# Includes
# -------------------------------------------------
SortIncludes: true
IncludeBlocks: Regroup

# -------------------------------------------------
# Namespace / class layout
# -------------------------------------------------
NamespaceIndentation: None
FixNamespaceComments: true
AccessModifierOffset: -4
EmptyLineBeforeAccessModifier: LogicalBlock

# -------------------------------------------------
# Parameters
# -------------------------------------------------
BinPackParameters: false
BinPackArguments: false

AlwaysBreakTemplateDeclarations: Yes
