# https://clang.llvm.org/docs/ClangFormatStyleOptions.html
# 模板格式,包括Google LLVM Chromium Mozilla Microsoft GNU等,如果设置为None表示不使用模板
BasedOnStyle: Google
# 格式化适用的语言
Language: Cpp
# 检查C++的构造是否兼容该版本
Standard: c++17
# 访问修饰符的缩进量,比如public或private等的位置,-4对应缩进的4个空格,就是不缩进
AccessModifierOffset: -4
# 开括号的对齐方式,即括号(包括小括号、花括号、尖括号)不在同一行时的对齐方式:
# - Align 表示换行情况下,换行的参数和开括号是对齐的
# - DontAlign 不对齐,而是使用配置的空格数
# - AlwaysBreak 永远换行,即第一个参数总不会紧跟着括号,总是换行,换行后按照配置的空格数对齐
# - BlockIndent 比AlwaysBreak多了一个操作,如果参数不固定在同一行,则闭括号会再换行到下一行
AlignAfterOpenBracket: Align
# 连续赋值语句的对齐方式,即多个赋值语句连续出现时的对齐策略,None表示不配置,若启用可以包含子配置项
AlignConsecutiveAssignments: None
# Enabled: false # 是否启用,启用时将上面不要填None
# AcrossEmtpyLines: false # 是否跨过空行
# AcrossComments: false # 是否跨过注释
# AlignCompound: false # 是否跨过复合语句
# PadOperators: true # (右)对齐赋值操作的操作符
# 同样控制连续对齐方式的还有下列几个,有着同样的子配置项
# AlignConsecutiveBitFields # 控制连续位定义语句出现时的对齐配置
# AlignConsecutiveDeclarations # 是否对齐连续声明,子配置项中还可以单独配置函数声明或指针声明对齐
# AlignConsecutiveMacros # 对齐宏定义
# 是否参数放不下时换行下一行
AllowAllArgumentsOnNextLine: true
# 构造函数的初始化列表的格式化
# - Never 始终将每个构造函数初始化器放在单独的一行
# - BinPack 紧凑排列
# - CurrentLine 如果能在一行放下则全部放在当前行,否则每个初始化器各占一行
# - NextLine 和CurrentLine类似,但如果当前行放不下,尝试全放在下一行
# - NextLineOnly 如果下一行能放下就全放在下一行,否则每个初始化器单独一行
PackConstructorInitializers : CurrentLine
# 是否允许所有函数声明的入参全部放在下一行
AllowAllParametersOfDeclarationOnNextLine: false
# 控制短的代码块放在同一行
# - Never 不会将短代码块合并到同一行
# - Empty 只会合并空的代码块
# - Always 总是将短代码块合并到一行
AllowShortBlocksOnASingleLine: Empty
# 是否将短case标签合并到同一行
AllowShortCaseLabelsOnASingleLine: false
# 控制短函数是否合并到同一行
# - None 不会将函数合并到一行
# - InlineOnly 会将内联的函数合并到同一行,但是不会合并空函数
# - Empty 只将空函数合并
# - Inline 会将内联函数合并到同一行,包括空函数
# - All 所有的短函数都会合并到同一行
AllowShortFunctionsOnASingleLine: Inline
# 控制短的判断分支合并到同一行
# - Never 不会合并
# - WithoutElse 如果没有else才会合并
# - OnlyFirstIf 仅将短的if语句放在同一行,不包括else if或else语句
# - AllIfAndElse 总是合并
AllowShortIfStatementsOnASingleLine: Never # To avoid conflict, set this "Never" and each "if statement" should include brace when coding
# 短lambda表达式的格式化方式,同短函数类似,有None Empty Inline All选项
AllowShortLambdasOnASingleLine: Inline
# 允许短的循环放在同一行
AllowShortLoopsOnASingleLine: false
# 返回类型后的代码格式化风格
# - Automatic 基于PenaltyReturnTypeOnItsOwnLine设置决定是否换行
# - ExceptShortType 短的类型不换行,其他同上
# - All 总是在返回类型后换行
# - TopLevel 只有顶层函数的返回类型后会换行
# - AllDefinitions 所有函数定义的返回类型后换行
# - TopLevelDefinitions 只有顶层函数的定义的返回类型后换行
BreakAfterReturnType: Automatic
# 模板声明后的格式化风格
# - Leave 不改变声明前的换行
# - No 不强迫在声明前换行
# - MultiLine 当后续的声明有多行时强制换行
# - Yes 始终换行
BreakTemplateDeclarations: Yes
# 函数参数使用紧凑布局
BinPackArguments: true
# 花括号格式化风格,
# - Attach 花括号紧跟着上下文
# - Linux 和Attach类似,但是函数,命名空间和类的定义时花括号会换行
# - Mozilla 花括号会在枚举、函数和声明时换行
# - Stroustrup 会在函数定义,catch和else换行
# - Allman 总是换行
# - Custom 自定义,每种情况的格式化风格由BraceWrapping配置
BreakBeforeBraces: Custom
BraceWrapping:
AfterCaseLabel: false
AfterClass: false
AfterStruct: false
AfterControlStatement: Never
AfterEnum: false
AfterFunction: false
AfterNamespace: false
AfterUnion: false
AfterExternBlock: false
BeforeCatch: false
BeforeElse: false
BeforeLambdaBody: false
IndentBraces: false
SplitEmptyFunction: false
SplitEmptyRecord: false
SplitEmptyNamespace: false
# 对齐操作数
# DontAlign 禁用对齐
# Align 启用所有二元运算符的操作数对齐
# AlignAfterOperator 当设置了BreakBeforeBinaryOperators且一条语句中的运算符换行时,会将运算符对齐
AlignOperands: Align
# 二元运算符的换行方式
# - None 在运算符后换行
# - NonAssignment 在非赋值运算符前换行
# - All 所有运算符前换行
BreakBeforeBinaryOperators: None
# 允许在三元运算符前换行
BreakBeforeTernaryOperators: true
# 构造初始化列表的换行风格
# - BeforeColon 在冒号前和逗号后换行
# - BeforeComma 在冒号和逗号前换行
# - AfterColon 在冒号和逗号后换行
BreakConstructorInitializers: BeforeColon
# 继承列表换行风格
# - BeforeColon 在冒号前和逗号后换行
# - BeforeComma 在冒号和逗号前换行,并且将冒号和逗号对齐
# - AfterColon 在冒号和逗号后换行
# - AfterComma 只在逗号后换行
BreakInheritanceList: BeforeColon
# 列宽限制
ColumnLimit: 100
# 是否将连续的命名空间紧凑排列在同一行
CompactNamespaces: false
# 换行后的位移量
ContinuationIndentWidth: 4
# 是否适应最佳的C++11初始化列表风格(前后无空格)
Cpp11BracedListStyle: true
# 智能分析指针和引用符号的风格习惯
DerivePointerAlignment: false # Make sure the * or & align on the left
# 指针*和引用&的对齐位置,有Left, Right, Middle三个选项
PointerAlignment: Left
# 在访问修饰符前的空行风格
# - Never 删除访问修饰符前的所有空行
# - Leave 保持当前存在的空行
# - LogicalBlock 当访问修饰符开启了一个新的逻辑块时在前面添加一个空行
# - Always 总是在前面添加一个空行,除非在类的开头
EmptyLineBeforeAccessModifier: LogicalBlock
# 修复命名空间丢失的闭括号
FixNamespaceComments: true
# 控制#include块的排序
# - Presever 为每个分离的#include块排序
# - Merge 将#include块合并到一起排序
# - Regroup 将#include块合并到一起排序,然后再基于IncludeCategories重新分组
IncludeBlocks: Preserve
# case标签是否缩进
IndentCaseLabels: true
# 预处理指令的缩进风格
# - None 不进行缩进
# - AfterHash 在#后缩进
# - BeforeHash 在#前缩进
IndentPPDirectives: None
# 缩进宽度
IndentWidth: 4
# 根据MaxEmptyLinesToKeep的设置格式化空行
KeepEmptyLines :
AtEndOfFile: true
AtStartOfBlock: true
AtStartOfFile: false
# 最大空行数
MaxEmptyLinesToKeep: 1
# 命名空间缩进方式
# - None 不缩进
# - Inner 只有内部的命名空间会缩进
# - All 始终缩进
NamespaceIndentation: None
# 重新格式化注释
# - Never 不修改注释
# - IndentOnly 只适用缩进规则,不改变注释内部的格式
# - Always 适用缩进规则,并尝试将注释适应列长度限制
ReflowComments: Never
# 分离声明块,包括class、struct、enum和函数
# - Leave 保持当前格式
# - Always 始终在连续的声明间插入空行
# - Never 删除所有声明间的空行
SeparateDefinitionBlocks: Always # Only support since clang-format 14
# 是否在C风格类型转换后添加空格
SpaceAfterCStyleCast: false
# 是否在逻辑非后添加空格
SpaceAfterLogicalNot: false
# 是否在template关键字后添加空格
SpaceAfterTemplateKeyword: true
# 是否在赋值运算符前添加空格
SpaceBeforeAssignmentOperators: true
# 是否在初始化列表前添加空格
SpaceBeforeCpp11BracedList: false
# 是否在构造初始化的冒号前添加空格
SpaceBeforeCtorInitializerColon: true
# 是否在继承冒号前添加空格
SpaceBeforeInheritanceColon: true
# 定义哪些情况下在左括号前添加空格
# - ControlStatements 只在for/if/while等控制分支关键字后
# - ControlStatementsExceptControlMacros 在上述的基础上排除FOREACH宏
# - NonEmptyParentheses 只有在非空的判断条件下
# - Always 总是添加空格
# - Custom 自定义,通过SpaceBeforeParensOptions控制各种情况
SpaceBeforeParens: Custom
SpaceBeforeParensOptions:
AfterControlStatements: false
AfterForeachMacros: false
AfterFunctionDeclarationName: false
AfterFunctionDefinitionName: false
AfterIfMacros: false
AfterOverloadedOperator: false
AfterPlacementOperator: false
AfterRequiresInClause: false
AfterRequiresInExpression: false
BeforeNonEmptyParentheses: false
# 范围循环的冒号前是否有空格
SpaceBeforeRangeBasedForLoopColon: true
# 方括号前是否有空格
SpaceBeforeSquareBrackets: false
# 空括号内是否有空格
SpaceInEmptyParentheses: false
# 行尾注释前的空格数
SpacesBeforeTrailingComments: 1
# 模板参数列表的空格风格
# - Never 尖括号内前后没有空格
# - Always 尖括号内总是有空格
SpacesInAngles: Never
# 控制“(”后和“)”前是否插入空格
# - Never 不插入
# - Custom 自定义,通过SpacesInParensOptions控制
SpacesInParens: Never
# 适用Tab键缩进的宽度
TabWidth: 4
# 在生成的文件中使用制表符字符的方式
# - Never 不使用制表符字符
# - ForIndentation 只在缩进时使用制表符
# - ForContinuationAndIndentation 在续行和缩进时使用制表符
# - AlignWithSpaces 在缩进和续行时使用制表符,在需要对齐的地方使用空格
# - Always 尽可能多的使用制表符
UseTab: Never