Language: Cpp
Standard: Latest

IndentWidth: 4
TabWidth: 4
UseTab: Always
ColumnLimit: 120
BreakBeforeBraces: Allman
AllowShortFunctionsOnASingleLine: None
AllowShortIfStatementsOnASingleLine: Never
AllowShortLoopsOnASingleLine: false
AlwaysBreakTemplateDeclarations: Yes
IndentCaseLabels: true
IndentCaseBlocks: false
IndentGotoLabels: false
IndentPPDirectives: None
IndentWrappedFunctionNames: false
SpaceAfterTemplateKeyword: true
SpaceBeforeAssignmentOperators: true
SpaceBeforeCpp11BracedList: true
SpaceBeforeParens: ControlStatements
SpacesBeforeTrailingComments: 4
SpaceBeforeSquareBrackets: false
SpacesInParens: Custom
SpacesInParensOptions:
  InConditionalStatements: false
  InEmptyParentheses: false
  InCStyleCasts: false
  Other: false
SpacesInSquareBrackets: false
AllowShortCaseLabelsOnASingleLine: true
AlignConsecutiveMacros: AcrossComments
AlignAfterOpenBracket: Align
AlignEscapedNewlines: DontAlign
AlignOperands: Align
AlignTrailingComments: true
BreakAdjacentStringLiterals: true
BreakAfterAttributes: Leave

BinPackArguments: true
BinPackParameters: true
BitFieldColonSpacing: None
BraceWrapping:
  AfterClass: true
  AfterControlStatement: Always
  AfterCaseLabel: true
  AfterEnum: true
  AfterFunction: true
  AfterNamespace: true
  AfterStruct: true
  AfterExternBlock: true
  AfterUnion: true
  BeforeCatch: true
  BeforeElse: true
  BeforeLambdaBody: true
  BeforeWhile: true
  IndentBraces: false
  SplitEmptyFunction: false
  SplitEmptyRecord: false
AlignArrayOfStructures: Left
BreakBeforeBinaryOperators: None
BreakBeforeTernaryOperators: false
BreakStringLiterals: false
DerivePointerAlignment: false
FixNamespaceComments: true
PointerAlignment: Left
SpaceAfterLogicalNot: false

# Custom header sorting
IncludeBlocks: Regroup
IncludeCategories:
  - Regex: "^<menix/.*>"
    Priority: 1
  - Regex: '^<.*\.h>'
    Priority: 2
  - Regex: '^".*\.h"'
    Priority: 3
SortIncludes: CaseInsensitive

# Comment style
CommentPragmas: "^//.*"
ReflowComments: true

AllowShortEnumsOnASingleLine: false

# Additional formatting options
MaxEmptyLinesToKeep: 1
KeepEmptyLinesAtTheStartOfBlocks: false
AllowAllArgumentsOnNextLine: false
AllowAllParametersOfDeclarationOnNextLine: false
InsertNewlineAtEOF: true
AttributeMacros: [ATTR]
