Language: Cpp
BasedOnStyle: LLVM
IndentWidth: 4
TabWidth: 4
NamespaceIndentation: None
ColumnLimit: 120
ReflowComments: true
UseTab: Never

AlignConsecutiveAssignments: false
AlignConsecutiveDeclarations: false
AlignEscapedNewlines: true
AlignOperands: true
AlignTrailingComments: true

AllowAllArgumentsOnNextLine: false
AllowAllConstructorInitializersOnNextLine: true
AllowAllParametersOfDeclarationOnNextLine: true
AllowShortBlocksOnASingleLine: Always
AllowShortIfStatementsOnASingleLine: AllIfsAndElse
AllowShortCaseLabelsOnASingleLine: true
AllowShortFunctionsOnASingleLine: true
AllowShortLambdasOnASingleLine: true
AllowShortLoopsOnASingleLine: true
AlwaysBreakTemplateDeclarations: Yes
AlwaysBreakAfterReturnType: None
PenaltyReturnTypeOnItsOwnLine: 200

BreakBeforeBraces: Custom
BreakAdjacentStringLiterals: false
BraceWrapping:
  AfterCaseLabel: false
  AfterClass: false
  AfterControlStatement: false
  AfterEnum: false
  AfterExternBlock: false
  AfterFunction: false
  AfterStruct: false
  AfterNamespace: false
  AfterUnion: false
  BeforeCatch: true
  BeforeElse: true
  SplitEmptyFunction: false
  SplitEmptyRecord: false
  SplitEmptyNamespace: false
  IndentBraces: false

SortIncludes: false
SortUsingDeclarations: true

SpaceAfterCStyleCast: false
SpaceAfterLogicalNot: false
SpaceAfterTemplateKeyword: true
SpaceBeforeAssignmentOperators: true
SpaceBeforeCpp11BracedList: true
SpaceBeforeCtorInitializerColon: true
SpaceBeforeInheritanceColon: true
SpaceBeforeParens: ControlStatements
SpaceBeforeRangeBasedForLoopColon: true
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 1
SpacesInAngles: false
SpacesInCStyleCastParentheses: false
SpacesInContainerLiterals: false
SpacesInParentheses: false
SpacesInSquareBrackets: false

BinPackArguments: true
BinPackParameters: true
# Requires clang-format 22+; older versions will error on unknown keys below.
BinPackLongBracedList: true
BreakBeforeCloseBracketBracedList: false
PenaltyBreakBeforeFirstCallParameter: 1

# Macros treated as attributes (Python C API + NumKong visibility)
AttributeMacros:
  - PyObject_HEAD
  - PyObject_VAR_HEAD
  - NK_PUBLIC
  - NK_INTERNAL
  - NK_DYNAMIC
StatementMacros:
  - nk_define_bilinear_
  - nk_define_bilinear_complex_
  - nk_define_mahalanobis_
  - nk_define_dot_
  - nk_define_dot_complex_
  - nk_define_vdot_complex_
  - nk_define_kld_
  - nk_define_jsd_
  - nk_define_sparse_intersect_
  - nk_define_sparse_dot_
  - nk_define_each_scale_
  - nk_define_each_sum_
  - nk_define_each_blend_
  - nk_define_each_fma_
  - nk_define_sqeuclidean_
  - nk_define_euclidean_
  - nk_define_angular_
  - nk_define_rmsd_
  - nk_define_kabsch_
  - nk_define_umeyama_  
  - nk_define_cond_swap_
  - nk_define_conditional_negating_swap_
  - nk_define_approximate_givens_quaternion_
  - nk_define_jacobi_conjugation_
  - nk_define_quaternion_to_mat3x3_
  - nk_define_jacobi_eigenanalysis_
  - nk_define_qr_givens_quaternion_
  - nk_define_sort_singular_values_
  - nk_define_qr_decomposition_
  - nk_define_svd3x3_
  - nk_define_det3x3_
  - nk_define_geospatial_
  - nk_define_reduce_add_
  - nk_define_reduce_minmax_
  - nk_define_cross_pack_size_
  - nk_define_cross_pack_
  - nk_define_cross_packed_
  - nk_define_cross_symmetric_
  - nk_define_cross_compensated_pack_size_
  - nk_define_cross_compensated_pack_
  - nk_define_cross_compensated_packed_
  - nk_define_cross_compensated_symmetric_
  - nk_define_cross_normalized_packed_
  - nk_define_cross_normalized_symmetric_
  - nk_define_trigonometry_
  - nk_define_mesh_
  - nk_define_dense_
  - nk_define_curved_
  - nk_dispatch_dense_
  - nk_dispatch_sparse_
  - nk_dispatch_sparse_dot_
  - nk_dispatch_curved_
  - nk_dispatch_geospatial_
  - nk_dispatch_each_fma_
  - nk_dispatch_each_blend_
  - nk_dispatch_each_scale_
  - nk_dispatch_each_sum_
  - nk_dispatch_trigonometry_
  - nk_dispatch_mesh_
  - nk_dispatch_reduce_moments_
  - nk_dispatch_reduce_minmax_
  - nk_dispatch_cross_packed_size_
  - nk_dispatch_cross_pack_
  - nk_dispatch_cross_packed_
  - nk_dispatch_cross_symmetric_
  - nk_dispatch_maxsim_packed_

# Align consecutive macro definitions (useful for NK_TARGET_* flags)
AlignConsecutiveMacros:
  Enabled: true
  AcrossEmptyLines: false
  AcrossComments: false

# Preprocessor directive indentation: None (flat), AfterHash (#  if), BeforeHash (  #if)
IndentPPDirectives: None

# Keep pointer alignment consistent: nk_f32_t const *a
PointerAlignment: Right
DerivePointerAlignment: false

# Preserve user line breaks in intrinsic-heavy code
BreakBeforeBinaryOperators: None
PenaltyBreakAssignment: 50

# Ensure files end with a newline
InsertNewlineAtEOF: true
