########################################################################################
# NOTE: At least clang-format-15 is needed to format the code of this project correctly
########################################################################################
---
BasedOnStyle:  Google
---
Language:        Cpp
AccessModifierOffset: -2
# AlignAfterOpenBracket: Align
# AlignArrayOfStructures: None
# AlignConsecutiveMacros: None
# AlignConsecutiveAssignments: None
# AlignConsecutiveBitFields: None
# AlignConsecutiveDeclarations: None
# AlignEscapedNewlines: Left
# AlignOperands:   Align
# AlignTrailingComments: true
# AllowAllArgumentsOnNextLine: true
# AllowAllParametersOfDeclarationOnNextLine: true
# AllowShortEnumsOnASingleLine: true
# AllowShortBlocksOnASingleLine: Never
# AllowShortCaseLabelsOnASingleLine: false
# AllowShortFunctionsOnASingleLine: All
# AllowShortLambdasOnASingleLine: All
# AllowShortIfStatementsOnASingleLine: WithoutElse
# AllowShortLoopsOnASingleLine: true
# AlwaysBreakAfterDefinitionReturnType: None
# AlwaysBreakAfterReturnType: None
# AlwaysBreakBeforeMultilineStrings: true
# AlwaysBreakTemplateDeclarations: Yes
# AttributeMacros:
#   - __capability
# BinPackArguments: true
# BinPackParameters: true
BraceWrapping:
#   AfterCaseLabel:  false
#   AfterClass:      false
#   AfterControlStatement: Never
#   AfterEnum:       false
  AfterFunction:   true
#   AfterNamespace:  false
#   AfterObjCDeclaration: false
#   AfterStruct:     false
#   AfterUnion:      false
#   AfterExternBlock: false
#   BeforeCatch:     false
#   BeforeElse:      false
#   BeforeLambdaBody: false
#   BeforeWhile:     false
#   IndentBraces:    false
#   SplitEmptyFunction: true
  SplitEmptyRecord: false
#   SplitEmptyNamespace: true
# BreakBeforeBinaryOperators: None
# BreakBeforeConceptDeclarations: Always
BreakBeforeBraces: Custom
# BreakBeforeInheritanceComma: false
BreakInheritanceList: AfterColon
# BreakBeforeTernaryOperators: true
BreakConstructorInitializersBeforeComma: true
BreakConstructorInitializers: AfterColon
# BreakAfterJavaFieldAnnotations: false
# BreakStringLiterals: true
ColumnLimit:     120
CommentPragmas:  '^ NOLINT'
# CommentPragmas:  '^ IWYU pragma:'
QualifierAlignment: Left
# CompactNamespaces: false
# ConstructorInitializerIndentWidth: 4
ContinuationIndentWidth: 2
# Cpp11BracedListStyle: true
DeriveLineEnding: false
DerivePointerAlignment: false
# DisableFormat:   false
# EmptyLineAfterAccessModifier: Never
EmptyLineBeforeAccessModifier: Leave
# ExperimentalAutoDetectBinPacking: false
# PackConstructorInitializers: NextLine
# ConstructorInitializerAllOnOneLineOrOnePerLine: false
# AllowAllConstructorInitializersOnNextLine: true
# FixNamespaceComments: true
# ForEachMacros:
#   - foreach
#   - Q_FOREACH
#   - BOOST_FOREACH
# IfMacros:
#   - KJ_IF_MAYBE
IncludeBlocks:   Merge
IncludeCategories:
  - Regex:           '^".*'
    Priority:        1
  - Regex:           '^".+/.*'
    Priority:        2
  - Regex:           '^<.+/.*'
    Priority:        3
  - Regex:           '^<.*\.h>'
    Priority:        4
  - Regex:           '^<.*'
    Priority:        5
# IncludeIsMainRegex: '([-_](test|unittest))?$'
# IncludeIsMainSourceRegex: ''
# IndentAccessModifiers: false
# IndentCaseLabels: true
# IndentCaseBlocks: false
# IndentGotoLabels: true
# IndentPPDirectives: None
# IndentExternBlock: AfterExternBlock
# IndentRequiresClause: true
# IndentWidth:     2
# IndentWrappedFunctionNames: false
# InsertBraces:    false
# InsertTrailingCommas: None
# JavaScriptQuotes: Leave
# JavaScriptWrapImports: true
# KeepEmptyLinesAtTheStartOfBlocks: false
# LambdaBodyIndentation: Signature
# MacroBlockBegin: ''
# MacroBlockEnd:   ''
MaxEmptyLinesToKeep: 2
# NamespaceIndentation: None
# ObjCBinPackProtocolList: Never
# ObjCBlockIndentWidth: 2
# ObjCBreakBeforeNestedBlockParam: true
# ObjCSpaceAfterProperty: false
# ObjCSpaceBeforeProtocolList: true
# PenaltyBreakAssignment: 2
# PenaltyBreakBeforeFirstCallParameter: 1
# PenaltyBreakComment: 300
# PenaltyBreakFirstLessLess: 120
# PenaltyBreakOpenParenthesis: 0
# PenaltyBreakString: 1000
# PenaltyBreakTemplateDeclaration: 10
# PenaltyExcessCharacter: 1000000
# PenaltyReturnTypeOnItsOwnLine: 200
# PenaltyIndentedWhitespace: 0
# PointerAlignment: Left
# PPIndentWidth:   -1
# 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
#       - ParseTestProto
#       - ParsePartialTestProto
#     CanonicalDelimiter: pb
#     BasedOnStyle:    google
# ReferenceAlignment: Pointer
# ReflowComments:  true
# RemoveBracesLLVM: false
# RequiresClausePosition: OwnLine
# SeparateDefinitionBlocks: Leave
# ShortNamespaceLines: 1
# SortIncludes:    CaseSensitive
# SortJavaStaticImport: Before
# SortUsingDeclarations: true
# SpaceAfterCStyleCast: false
# SpaceAfterLogicalNot: false
SpaceAfterTemplateKeyword: false
# SpaceBeforeAssignmentOperators: true
# SpaceBeforeCaseColon: false
# SpaceBeforeCpp11BracedList: false
# SpaceBeforeCtorInitializerColon: true
# SpaceBeforeInheritanceColon: true
# SpaceBeforeParens: ControlStatements
SpaceBeforeParensOptions:
#   AfterControlStatements: true
#   AfterForeachMacros: true
#   AfterFunctionDefinitionName: false
#   AfterFunctionDeclarationName: false
#   AfterIfMacros:   true
#   AfterOverloadedOperator: false
  AfterRequiresInClause: true
#   AfterRequiresInExpression: false
#   BeforeNonEmptyParentheses: false
# SpaceAroundPointerQualifiers: Default
# SpaceBeforeRangeBasedForLoopColon: true
# SpaceInEmptyBlock: false
# SpaceInEmptyParentheses: false
# SpacesBeforeTrailingComments: 2
# SpacesInAngles:  Never
# SpacesInConditionalStatement: false
# SpacesInContainerLiterals: true
# SpacesInCStyleCastParentheses: false
# SpacesInLineCommentPrefix:
#   Minimum:         1
#   Maximum:         -1
# SpacesInParentheses: false
# SpacesInSquareBrackets: false
# SpaceBeforeSquareBrackets: false
# BitFieldColonSpacing: Both
Standard: Latest
# StatementAttributeLikeMacros:
#   - Q_EMIT
# StatementMacros:
#   - Q_UNUSED
#   - QT_REQUIRE_VERSION
# TabWidth:        8
# UseCRLF:         false
# UseTab:          Never
# WhitespaceSensitiveMacros:
#   - STRINGIZE
#   - PP_STRINGIZE
#   - BOOST_PP_STRINGIZE
#   - NS_SWIFT_NAME
#   - CF_SWIFT_NAME
# ...
