# SPDX-License-Identifier: GPL-2.0
#
# clang-format configuration file. Intended for clang-format >= 11.
# Copied from Linux's .clang-format
#
# For more information, see:
#
#   https://clang.llvm.org/docs/ClangFormat.html
#   https://clang.llvm.org/docs/ClangFormatStyleOptions.html
#
---
AccessModifierOffset: -4
AlignAfterOpenBracket: Align
AlignConsecutiveAssignments: false
AlignConsecutiveDeclarations: false
AlignEscapedNewlines: Left
AlignConsecutiveMacros: true
AlignOperands: true
AlignTrailingComments: false
AllowAllParametersOfDeclarationOnNextLine: false
AllowShortBlocksOnASingleLine: false
AllowShortCaseLabelsOnASingleLine: false
AllowShortFunctionsOnASingleLine: None
AllowShortIfStatementsOnASingleLine: false
AllowShortLoopsOnASingleLine: false
AlwaysBreakAfterDefinitionReturnType: None
AlwaysBreakAfterReturnType: None
AlwaysBreakBeforeMultilineStrings: false
AlwaysBreakTemplateDeclarations: false
BinPackArguments: true
BinPackParameters: true
BraceWrapping:
  AfterClass: false
  AfterControlStatement: false
  AfterEnum: false
  AfterFunction: true
  AfterNamespace: true
  AfterObjCDeclaration: false
  AfterStruct: false
  AfterUnion: false
  AfterExternBlock: false
  BeforeCatch: false
  BeforeElse: false
  IndentBraces: false
  SplitEmptyFunction: true
  SplitEmptyRecord: true
  SplitEmptyNamespace: true
BreakBeforeBinaryOperators: None
BreakBeforeBraces: Custom
BreakBeforeInheritanceComma: false
BreakBeforeTernaryOperators: false
BreakConstructorInitializersBeforeComma: false
BreakConstructorInitializers: BeforeComma
BreakAfterJavaFieldAnnotations: false
BreakStringLiterals: false
ColumnLimit: 80
CommentPragmas: '^ IWYU pragma:'
CompactNamespaces: false
ConstructorInitializerAllOnOneLineOrOnePerLine: false
ConstructorInitializerIndentWidth: 8
ContinuationIndentWidth: 8
Cpp11BracedListStyle: false
DerivePointerAlignment: false
DisableFormat: false
ExperimentalAutoDetectBinPacking: false
FixNamespaceComments: false

# Taken from:
# while read -r sym; do
# 	printf "  - '%s'\n" "$sym";
# done < \
# 	<(cscope -dL6 "foreach|for_each" \
# 	| awk '{ print $4 $5 }' | grep -E 'foreach|for_each' \
# 	| sed -e 's/#define//' \
# 		-e 's/*//' \
# 		-e 's/://' \
# 		-e 's/\(.*for_each.*\)(.*/\1/' \
# 		-e 's/\(.*foreach.*\)(.*/\1/' \
# 	| sort -u)
ForEachMacros:
  - 'cxl_memdev_foreach'
  - 'cxl_bus_foreach'
  - 'cxl_port_foreach'
  - 'cxl_decoder_foreach'
  - 'cxl_decoder_foreach_reverse'
  - 'cxl_target_foreach'
  - 'cxl_dport_foreach'
  - 'cxl_endpoint_foreach'
  - 'cxl_port_foreach_all'
  - 'cxl_region_foreach'
  - 'cxl_region_foreach_safe'
  - 'daxctl_dev_foreach'
  - 'daxctl_mapping_foreach'
  - 'daxctl_region_foreach'
  - 'kmod_list_foreach'
  - 'kmod_list_foreach_reverse'
  - 'list_for_each'
  - 'list_for_each_off'
  - 'list_for_each_rev'
  - 'list_for_each_safe'
  - 'list_for_each_safe_off'
  - 'ndctl_btt_foreach'
  - 'ndctl_btt_foreach_safe'
  - 'ndctl_bus_foreach'
  - 'ndctl_dax_foreach'
  - 'ndctl_dax_foreach_safe'
  - 'ndctl_dimm_foreach'
  - 'ndctl_dimm_foreach_in_interleave_set'
  - 'ndctl_dimm_foreach_in_region'
  - 'ndctl_interleave_set_foreach'
  - 'ndctl_mapping_foreach'
  - 'ndctl_namespace_badblock_foreach'
  - 'ndctl_namespace_bb_foreach'
  - 'ndctl_namespace_foreach'
  - 'ndctl_namespace_foreach_safe'
  - 'ndctl_pfn_foreach'
  - 'ndctl_pfn_foreach_safe'
  - 'ndctl_region_badblock_foreach'
  - 'ndctl_region_foreach'
  - 'udev_list_entry_foreach'

IncludeBlocks: Preserve
IncludeCategories:
  - Regex: '.*'
    Priority: 1
IncludeIsMainRegex: '(Test)?$'
IndentCaseLabels: false
IndentPPDirectives: None
IndentWidth: 8
IndentWrappedFunctionNames: false
JavaScriptQuotes: Leave
JavaScriptWrapImports: true
KeepEmptyLinesAtTheStartOfBlocks: false
MacroBlockBegin: ''
MacroBlockEnd: ''
MaxEmptyLinesToKeep: 1
NamespaceIndentation: None
ObjCBinPackProtocolList: Auto
ObjCBlockIndentWidth: 8
ObjCSpaceAfterProperty: true
ObjCSpaceBeforeProtocolList: true

# Taken from git's rules
PenaltyBreakAssignment: 10
PenaltyBreakBeforeFirstCallParameter: 30
PenaltyBreakComment: 10
PenaltyBreakFirstLessLess: 0
PenaltyBreakString: 10
PenaltyExcessCharacter: 100
PenaltyReturnTypeOnItsOwnLine: 60

PointerAlignment: Right
ReflowComments: false
SortIncludes: false
SortUsingDeclarations: false
SpaceAfterCStyleCast: false
SpaceAfterTemplateKeyword: true
SpaceBeforeAssignmentOperators: true
SpaceBeforeCtorInitializerColon: true
SpaceBeforeInheritanceColon: true
SpaceBeforeParens: ControlStatementsExceptForEachMacros
SpaceBeforeRangeBasedForLoopColon: true
SpaceInEmptyParentheses: false
SpacesBeforeTrailingComments: 1
SpacesInAngles: false
SpacesInContainerLiterals: false
SpacesInCStyleCastParentheses: false
SpacesInParentheses: false
SpacesInSquareBrackets: false
Standard: Cpp03
TabWidth: 8
UseTab: Always
...
