---
Language: Cpp
BasedOnStyle: GNU

AlignAfterOpenBracket: Align
AlignEscapedNewlines: DontAlign
AlignOperands: AlignAfterOperator
AlignTrailingComments: false
AllowAllParametersOfDeclarationOnNextLine: false
AllowShortFunctionsOnASingleLine: Empty
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: None
BreakBeforeBraces: Allman
ColumnLimit: 0
IndentCaseLabels: true
IncludeBlocks: Preserve
IncludeCategories:
  - Regex: '<.*>'
    Priority: 2
    SortPriority: 0
  - Regex: '.*'
    Priority: 1
    SortPriority: 0

IndentGotoLabels: false
IndentWidth: 4
InsertNewlineAtEOF: True
KeepEmptyLinesAtTheStartOfBlocks: false
MaxEmptyLinesToKeep: 1
PenaltyReturnTypeOnItsOwnLine: 100
SpaceBeforeParens: Always
SortIncludes: CaseSensitive
SortUsingDeclarations: LexicographicNumeric
UseTab: Never
WhitespaceSensitiveMacros: ['_']

# Workaround to avoid some alignment bugs when adding a macro to WhitespaceSensitiveMacros,
# see https://github.com/llvm/llvm-project/issues/55443#issuecomment-1953268337
# This doesn't fix all alignment bugs though, so I'd rather make an exception only for '_',
# and not also for 'N_' or 'I_' for example.
# See also https://github.com/llvm/llvm-project/issues/82288
Macros:
  - _(x)=x

...
