# Language: Cpp
# OpenHarmony C/C++ 语言编程规范综合优化版
# 访问说明符(public、private等)的偏移
# C++规则3.15.1: public, protected, private 缩进和 class 关键字对齐
AccessModifierOffset: -4
# 开括号后的对齐
AlignAfterOpenBracket: Align
# 连续赋值时,等号对齐
AlignConsecutiveAssignments: false
# 连续声明时,变量名对齐
AlignConsecutiveDeclarations: false
# 左对齐转义换行符
AlignEscapedNewlinesLeft: true
# 水平对齐二元和三元表达式的操作数
AlignOperands: true
# 对齐连续的尾随注释
AlignTrailingComments: true
# 允许函数声明的所有参数放在下一行
AllowAllParametersOfDeclarationOnNextLine: false
# 允许短的块放在同一行
AllowShortBlocksOnASingleLine: false
# 允许短的case标签放在同一行
AllowShortCaseLabelsOnASingleLine: false
# 允许短的函数放在同一行
# C++规则3.3.1: 对于空函数体,可以将大括号放在同一行
AllowShortFunctionsOnASingleLine: Empty
# 允许短的if语句保持在同一行
# C++规则3.6.1 / C规则2.6: 条件语句必须使用大括号
AllowShortIfStatementsOnASingleLine: false
# 允许短的循环保持在同一行
# C++规则3.7.1 / C规则2.8: 循环语句必须使用大括号
AllowShortLoopsOnASingleLine: false
# 总是在定义返回类型后换行(deprecated)
AlwaysBreakAfterDefinitionReturnType: None
# 总是在返回类型后换行
AlwaysBreakAfterReturnType: None
# 总是在多行string字面量前换行
# 该项对宏调用里“拼接字符串 + 参数换行”的可读性影响较大,关闭以减少奇怪的断行。
AlwaysBreakBeforeMultilineStrings: false
# 避免自动拆分字符串字面量(尤其是日志宏的格式串)
BreakStringLiterals: false
# 总是在template声明后换行
AlwaysBreakTemplateDeclarations: true
# 模板关键字后不加空格
# C++规则3.14.1: 模板和类型转换之间不要添加空格
SpaceAfterTemplateKeyword: false
# false表示函数实参要么都在同一行,要么都各自一行
BinPackArguments: true
# false表示所有形参要么都在同一行,要么都各自一行
BinPackParameters: false
# 大括号换行,严格遵循 K&R 风格
# C++规则3.3.1 / C规则2.3: 使用 K&R 缩进风格
BraceWrapping:
AfterClass: false
AfterControlStatement: false
AfterEnum: false
AfterFunction: true
AfterNamespace: false
AfterObjCDeclaration: false
AfterStruct: false
AfterUnion: false
BeforeCatch: false
BeforeElse: false
IndentBraces: false
# 在二元运算符前换行
BreakBeforeBinaryOperators: None
# 在大括号前换行: 使用 Custom 以便通过 BraceWrapping 精细控制
BreakBeforeBraces: Custom
# 在三元运算符前换行
# C++建议3.9.1 / C建议2.1: 表达式换行时,运算符放在行末
BreakBeforeTernaryOperators: true
# 在构造函数的初始化列表的逗号前换行
BreakConstructorInitializersBeforeComma: false
# 每行字符的限制
# C++规则3.1.1 / C规则2.1: 行宽不超过120个字符
ColumnLimit: 120
# 描述具有特殊意义的注释的正则表达式
CommentPragmas: "^ IWYU pragma:"
# 构造函数的初始化列表要么都在同一行,要么都各自一行
ConstructorInitializerAllOnOneLineOrOnePerLine: true
# 构造函数的初始化列表的缩进宽度
# C++规则3.15.2: 初始化列表置于冒号后,缩进4个空格
ConstructorInitializerIndentWidth: 4
# 延续的行的缩进宽度
ContinuationIndentWidth: 4
# 去除C++11列表初始化的大括号后和前的空格
Cpp11BracedListStyle: true
# 继承最常用的指针和引用的对齐方式
DerivePointerAlignment: false
# 关闭格式化
DisableFormat: false
# 自动检测函数调用和定义是否每行一个参数
ExperimentalAutoDetectBinPacking: false
# 需要被解读为foreach循环而不是函数调用的宏
ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ]
# 对#include进行排序
IncludeCategories:
- Regex: '^"(llvm|llvm-c|clang|clang-c)/'
Priority: 2
- Regex: '^(<|"(gtest|isl|json)/)'
Priority: 3
- Regex: ".*"
Priority: 1
# 缩进case标签
# C++规则3.8.1 / C规则2.9: switch的case/default要缩进一层
IndentCaseLabels: true
# 缩进宽度
# C++规则3.2.1 / C规则2.2: 使用4个空格缩进
IndentWidth: 4
# 函数返回类型换行时,缩进函数名
IndentWrappedFunctionNames: false
# 保留在块开始处的空行
KeepEmptyLinesAtTheStartOfBlocks: true
# 开始一个块的宏的正则表达式
MacroBlockBegin: ""
# 结束一个块的宏的正则表达式
MacroBlockEnd: ""
# 连续空行的最大数量
MaxEmptyLinesToKeep: 1
# 命名空间的缩进
NamespaceIndentation: None
# 使用ObjC块时缩进宽度
ObjCBlockIndentWidth: 4
# 在ObjC的@property后添加一个空格
ObjCSpaceAfterProperty: false
# 在ObjC的protocol列表前添加一个空格
ObjCSpaceBeforeProtocolList: true
# 在call(后对函数调用换行的penalty
PenaltyBreakBeforeFirstCallParameter: 19
# 在一个注释中引入换行的penalty
PenaltyBreakComment: 300
# 第一次在<<前换行的penalty
PenaltyBreakFirstLessLess: 120
# 在一个字符串字面量中引入换行的penalty
PenaltyBreakString: 1000
# 对于每个超出字符数限制的字符的penalty
PenaltyExcessCharacter: 1000000
# 将函数返回类型放到它自己的行的penalty
PenaltyReturnTypeOnItsOwnLine: 1000000
# 指针的对齐
# C++建议3.12.1 / C建议2.2: *跟随类型或变量名均可
PointerAlignment: Right
# 引用的对齐
# C++建议3.12.2: &跟随类型或变量名均可
ReferenceAlignment: Right
# 允许重新排版注释
ReflowComments: true
# 允许排序#include
SortIncludes: true
# 在C风格类型转换后添加空格
# C++规则3.14.1 / C规则2.14: 类型转换后不加空格
SpaceAfterCStyleCast: false
# 在赋值运算符之前添加空格
SpaceBeforeAssignmentOperators: true
# 开圆括号之前添加一个空格
# C++规则3.14.1 / C规则2.14: if/for/while/switch等关键字后加空格
SpaceBeforeParens: ControlStatements
# 在空的圆括号中添加空格
SpaceInEmptyParentheses: false
# 在尾随的评论前添加的空格数
# C++规则4.4.2 / C规则3.4: 右置注释与代码至少1空格
SpacesBeforeTrailingComments: 1
# 在尖括号的<后和>前添加空格
# C++规则3.14.1: 模板<>不加空格
SpacesInAngles: false
# 在容器字面量中添加空格
SpacesInContainerLiterals: true
# 在C风格类型转换的括号中添加空格
# C++规则3.14.1 / C规则2.14: 类型转换括号内不加空格
SpacesInCStyleCastParentheses: false
# 在圆括号的(后和)前添加空格
# C++规则3.14.1 / C规则2.14: 小括号内部不加空格
SpacesInParentheses: false
# 在方括号的[后和]前添加空格
SpacesInSquareBrackets: false
# 标准
Standard: c++17
# tab宽度
TabWidth: 4
# 使用tab字符
# C++规则3.2.1 / C规则2.2: 不使用Tab缩进
UseTab: Never
# 枚举的常量声明
AllowShortEnumsOnASingleLine: false