Loading

clang-format格式化模板

# 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
posted @ 2025-02-16 22:29  cwtxx  阅读(20)  评论(0编辑  收藏  举报