#      created by asphyxia for clang-format 15.0.2 version      #
#      alphabetically aranged (except global options)      #
# https://clang.llvm.org/docs/ClangFormatStyleOptions.html #

# global options
DisableFormat: false
BasedOnStyle: Microsoft
Language: Cpp
Standard: c++20

# @todo: remove variables that equal defaults

AccessModifierOffset: -4
AlignAfterOpenBracket: DontAlign # @test: use false # @note: when set to 'DontAlign', dependent on 'ContinuationIndentWidth'
AlignArrayOfStructures: None
AlignConsecutiveAssignments: None
AlignConsecutiveBitFields: None
AlignConsecutiveDeclarations: None
AlignConsecutiveMacros: None
AlignEscapedNewlines: Left
AlignOperands: DontAlign # @test: use false # @note: when set to 'DontAlign', dependent on 'ContinuationIndentWidth'; when set to 'AlignAfterOperator', dependent on 'BreakBeforeBinaryOperators'
AlignTrailingComments: false
AllowAllArgumentsOnNextLine: false # @note: ignores 'BinPackArguments'
AllowAllParametersOfDeclarationOnNextLine: false # @note: ignores 'BinPackArguments'
AllowShortBlocksOnASingleLine: Empty
AllowShortCaseLabelsOnASingleLine: false
AllowShortEnumsOnASingleLine: false
AllowShortFunctionsOnASingleLine: Empty
AllowShortIfStatementsOnASingleLine: Never
AllowShortLambdasOnASingleLine: Inline
AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterReturnType: None # @note: when set to 'None', dependent on 'PenaltyReturnTypeOnItsOwnLine'
AlwaysBreakBeforeMultilineStrings: false # @note: if true, dependent on 'ContinuationIndentWidth'
#AlwaysBreakTemplateDeclarations: Yes # @test: to make it work correctly with 'RequiresClausePosition' leave it unspecified # @note: when set to 'No', dependent on 'PenaltyBreakTemplateDeclaration'
#AttributeMacros: # @todo: tweak
BinPackArguments: true
BinPackParameters: true
BitFieldColonSpacing: Both
BraceWrapping:
  AfterCaseLabel: true
  AfterControlStatement: Always
  AfterEnum: true
  AfterFunction: true
  AfterNamespace: true
  AfterStruct: true
  AfterUnion: true
  AfterExternBlock: true
  BeforeCatch: true
  BeforeElse: true
  BeforeLambdaBody: true
  BeforeWhile: false
  IndentBraces: false
  SplitEmptyFunction: false # @note: dependent on 'AfterFunction' and 'AllowShortFunctionsOnASingleLine'
  SplitEmptyRecord: false # @note: dependent on 'AfterClass'
  SplitEmptyNamespace: true # @note: dependent on 'AfterNamespace'
#BreakAfterAttributes: Never # @todo: clan-format 16
#BreakArrays: false # @todo: clang-format 16 # @note: supported only for JSON
BreakBeforeBinaryOperators: None
BreakBeforeBraces: Custom # @note: when set to 'Custom', dependent on 'BraceWrapping'
BreakBeforeConceptDeclarations: Never
BreakBeforeTernaryOperators: false
BreakConstructorInitializers: AfterColon
#BreakInheritanceList: AfterComma # @note: to disable this, only leaving it unspecified works
BreakStringLiterals: false
ColumnLimit: 0
CompactNamespaces: false # @test: what if i gonna use nested namespaces like Foo::Bar?
#ConstructorInitializerIndentWidth: 0 # @test: tweak
ContinuationIndentWidth: 0
Cpp11BracedListStyle: false
DerivePointerAlignment: false # @note: if true, 'PointerAlignment' is only used as a fallback if none can be derived
EmptyLineAfterAccessModifier: Never # @note: when set to 'Leave' or 'Always', dependent on 'MaxEmptyLinesToKeep'
EmptyLineBeforeAccessModifier: LogicalBlock
FixNamespaceComments: false # @note: if true, dependent on 'ShortNamespaceLines'
IncludeBlocks: Regroup # @note: when set to 'Regroup', dependent on 'IncludeCategories'
#IncludeCategories: # @todo: tweak
#IncludeIsMainRegex: # @todo: tweak
IndentAccessModifiers: false # @note: if false, dependent on 'AccessModifierOffset'; if true, ignores 'AccessModifierOffset'
IndentCaseBlocks: false
IndentCaseLabels: false
IndentExternBlock: AfterExternBlock # @note: when set to 'AfterExternBlock', dependent on 'BraceWrapping.AfterExternBlock'
IndentGotoLabels: true
IndentPPDirectives: None
IndentRequiresClause: false # @note: if true, dependent on 'RequiresClausePosition'
IndentWidth: 4
IndentWrappedFunctionNames: true
InsertBraces: false
InsertTrailingCommas: None # @note: when set to 'Wrapped', conflicts with 'BinPackArguments'
KeepEmptyLinesAtTheStartOfBlocks: false
LambdaBodyIndentation: Signature
#LineEnding: LF # @todo: clang-format 16
MaxEmptyLinesToKeep: 1
NamespaceIndentation: All
PPIndentWidth: -1 # @note: when set to '-1', dependent on 'IndentWidth'
PackConstructorInitializers: NextLine # @todo: after clang-format 16 set this to 'NextLineOnly'
# @test: tweak
# ---
PenaltyBreakAssignment: 0 
PenaltyBreakBeforeFirstCallParameter: 0
PenaltyBreakComment: 0
PenaltyBreakFirstLessLess: 0
PenaltyBreakOpenParenthesis: 0
PenaltyBreakString: 0
PenaltyBreakTemplateDeclaration: 0
PenaltyExcessCharacter: 0
PenaltyIndentedWhitespace: 0
PenaltyReturnTypeOnItsOwnLine: 0
# ---
PointerAlignment: Left
QualifierAlignment: Custom # @note: when set to 'Custom', dependent on 'QualifierOrder'; warning! setting this option to something other than 'Leave' could lead to incorrect code formatting
QualifierOrder: ['inline', 'static', 'constexpr', 'const', 'volatile', 'type', 'restrict']
ReferenceAlignment: Pointer # @note: when set to 'Pointer', dependent on 'PointerAlignment'
ReflowComments: false
#RemoveSemicolon: false # @todo: clang-format 16 # @note: warning! setting this option to true could lead to incorrect code formatting
RequiresClausePosition: WithPreceding # @test: this doesn't seem to work correctly when 'AlwaysBreakTemplateDeclarations' is set
#RequiresExpressionIndentation: OuterScope # @todo: clang-format 16
SeparateDefinitionBlocks: Always # @todo: use 'Leave'?
ShortNamespaceLines: 0
SortIncludes: Never # @test: CaseInsensitive
SortUsingDeclarations: true # @todo: after clang-format 16 change to 'Lexicographic'
SpaceAfterCStyleCast: false
SpaceAfterLogicalNot: false
SpaceAfterTemplateKeyword: true
SpaceAroundPointerQualifiers: Default # @note: when set to 'Default', dependent on 'PointerAlignment'
SpaceBeforeAssignmentOperators: true
SpaceBeforeCaseColon: false
SpaceBeforeCpp11BracedList: false
SpaceBeforeCtorInitializerColon: true
SpaceBeforeInheritanceColon: true
SpaceBeforeParens: Custom # @note: when set to 'Custom', dependent on 'SpaceBeforeParensOptions'
SpaceBeforeParensOptions:
  AfterControlStatements: true
  AfterForeachMacros: false
  AfterFunctionDeclarationName: false
  AfterIfMacros: false
  AfterOverloadedOperator: false
  AfterRequiresInClause: true
  AfterRequiresInExpression: false
  BeforeNonEmptyParentheses: false
SpaceBeforeRangeBasedForLoopColon: true
SpaceBeforeSquareBrackets: false
SpaceInEmptyBlock: true # @todo: this doesn't work for braced initilization for some reason
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 1 # @test: tweak
SpacesInAngles: Never
SpacesInCStyleCastParentheses: false
SpacesInConditionalStatement: false
SpacesInContainerLiterals: true
SpacesInLineCommentPrefix: # @note: dependent on 'ReflowComments'
  Minimum: 1
  Maximum: -1
SpacesInParentheses: false
SpacesInSquareBrackets: false
#TabWidth: # @todo: tweak or leave it as it is
UseCRLF: false # @todo: remove after clang-format 16
UseTab: Always # @todo: tweak
#WhitespaceSensitiveMacros: # @todo: tweak
