-
-
Notifications
You must be signed in to change notification settings - Fork 415
/
.clang-format
395 lines (389 loc) · 13 KB
/
.clang-format
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
# This file is a part of Simple-XX/SimpleKernel
# (https://github.com/Simple-XX/SimpleKernel).
#
# CMakeLists.txt for Simple-XX/SimpleKernel.
---
# @version clang-format version 15
# @see https://clang.llvm.org/docs/ClangFormatStyleOptions.html
# 访问说明符 public/private 的偏移,与类对齐
AccessModifierOffset: -4
# ( 后的参数对齐,与 ( 对齐
AlignAfterOpenBracket: Align
# 结构体初始化对齐,右对齐
AlignArrayOfStructures: Right
# 连续赋值对齐
AlignConsecutiveAssignments:
# 允许
Enabled: true
# 忽略空行
AcrossEmptyLines: true
# 忽略注释
AcrossComments: true
# 忽略混合运算符
AlignCompound: true
# 填充运算符
PadOperators: true
# 位域对齐
AlignConsecutiveBitFields:
# 允许
Enabled: true
# 忽略空行
AcrossEmptyLines: true
# 忽略注释
AcrossComments: true
# 忽略混合运算符
AlignCompound: true
# 填充运算符
PadOperators: true
# 连续声明对齐,忽略空行/注释
AlignConsecutiveDeclarations:
# 允许
Enabled: true
# 忽略空行
AcrossEmptyLines: true
# 忽略注释
AcrossComments: true
# 忽略混合运算符
AlignCompound: true
# 填充运算符
PadOperators: true
# 连续宏定义对齐,忽略空行/注释
AlignConsecutiveMacros:
# 允许
Enabled: true
# 忽略空行
AcrossEmptyLines: true
# 忽略注释
AcrossComments: true
# 忽略混合运算符
AlignCompound: true
# 填充运算符
PadOperators: true
# 换行符号左对齐
AlignEscapedNewlines: Left
# 操作符对齐,与 BreakBeforeBinaryOperators 共同生效
AlignOperands: AlignAfterOperator
# 行后注释对齐
AlignTrailingComments: true
# 尽量将函数调用/初始化的所有参数放在同一行,禁用
AllowAllArgumentsOnNextLine: false
# 尽量将函数声明的参数放在同一行
AllowAllParametersOfDeclarationOnNextLine: true
# 将 while (true) {} 中的 {} 合并为一行,禁用
AllowShortBlocksOnASingleLine: Never
# 将 switch case: 中的 case: 合并为一行,禁用
AllowShortCaseLabelsOnASingleLine: false
# 将枚举类型合并为一行,禁用
AllowShortEnumsOnASingleLine: false
# 将短函数合并为一行,禁用
AllowShortFunctionsOnASingleLine: None
# 将短语句合并为一行,禁用
AllowShortIfStatementsOnASingleLine: Never
# 将 lambda 表达式合并为一行,禁用
AllowShortLambdasOnASingleLine: None
# 将短循环合并为一行,禁用
AllowShortLoopsOnASingleLine: false
# 将在返回类型后换行,禁用
AlwaysBreakAfterReturnType: None
# 将在多行字符串前换行,禁用
AlwaysBreakBeforeMultilineStrings: false
# 在模版声明后换行
AlwaysBreakTemplateDeclarations: Yes
# 编译器属性排除,不会参与格式化
AttributeMacros: [ '__capability',
'__output',
'__ununsed',
'[[maybe_unused]]' ]
# 尽量将函数调用的参数放在同一行
BinPackArguments: true
# 尽量将函数声明的参数放在同一行
BinPackParameters: true
# 在位域声明的 : 前后都加空格
BitFieldColonSpacing: Both
# 大括号换行设置
BraceWrapping:
# 在 case 后换行,禁用
AfterCaseLabel: false
# 在 class 后换行,禁用
AfterClass: false
# 在控制语句后换行,禁用
AfterControlStatement: Never
# 在 enum 后换行,禁用
AfterEnum: false
# 在函数定义后换行,禁用
AfterFunction: false
# 在 namespace 后换行,禁用
AfterNamespace: false
# 在结构体后换行,禁用
AfterStruct: false
# 在联合体后换行,禁用
AfterUnion: false
# 在 extern 后换行,禁用
AfterExternBlock: false
# 在 catch 后换行,禁用
BeforeCatch: false
# 在 else 前换行
BeforeElse: true
# 在 lambda 后换行,禁用
BeforeLambdaBody: false
# 在 while 前换行,禁用
BeforeWhile: false
# 换行缩进括号,禁用
IndentBraces: false
# 空函数的大括号换行
SplitEmptyFunction: true
# 空 class/struct/union 的大括号换行
SplitEmptyRecord: true
# 空 namespace 的大括号换行
SplitEmptyNamespace: true
# 在二元操作符前换行
BreakBeforeBinaryOperators: All
# 在大括号前换行,使用自定义规则,在 BraceWrapping 中规定
BreakBeforeBraces: Custom
# 在 concept(c++20) 前换行
BreakBeforeConceptDeclarations: Always
# 在三元操作符前换行
BreakBeforeTernaryOperators: true
# 构造函数初始化列表在冒号 : 前,逗号 , 后换行
BreakConstructorInitializers: BeforeColon
# class 继承列表在冒号 : 前,逗号 , 后换行
BreakInheritanceList: BeforeColon
# 允许将字符串切割
BreakStringLiterals: true
# 最大列数
ColumnLimit: 80
# 特殊注释的正则表达式,不会进行格式化
CommentPragmas: '^ NO_STYLE:'
# 将多个 namespace 合并为一行,禁用
CompactNamespaces: false
# 构造函数的初始化列表/继承列表的缩进宽度
ConstructorInitializerIndentWidth: 4
# 续行的缩进宽度
ContinuationIndentWidth: 2
# 去除 C++11 的列表初始化的大括号 { 后和 } 前的空格,禁用
Cpp11BracedListStyle: false
# 分析文件使用最多的换行符并应用到整个文件,
# 只有当无法得到结论时才会使用 UseCRLF,禁用
DeriveLineEnding: true
# 分析文件使用最多的指针/引用的对齐方式并应用到整个文件,
# 只有当无法得到结论时才会使用 PointerAlignment,禁用
DerivePointerAlignment: false
# 关闭格式化,禁用
DisableFormat: false
# 访问描述符后的空行,只保留 MaxEmptyLinesToKeep 指定的行数
EmptyLineAfterAccessModifier: Leave
# 访问描述符前的空行,始终保留,除非是 class/struct 的开始
EmptyLineBeforeAccessModifier: Always
# 在命名空间结束后添加注释,与 ShortNamespaceLines 共同生效
FixNamespaceComments: true
# for-each 宏,作为循环语句进行格式化
ForEachMacros: [ 'RANGES_FOR', 'FOREACH' ]
# if 宏,作为条件语句进行格式化
IfMacros: [ 'IF' ]
# 将 #include 分块,规则由 IncludeCategories 指定,暂未使用
#IncludeBlocks: Regroup
# 将 #include 分块,保留原有分块
IncludeBlocks: Preserve
# 对 #include 进行排序,匹配了某正则表达式的 #include 拥有对应的优先级,
# 优先级越小排序越靠前,匹配不到的则默认优先级为 INT_MAX,暂未使用
IncludeCategories:
# 正则
- Regex: '^"(llvm|llvm-c|clang|clang-c)/'
# 优先级
Priority: 2
# 排序优先级,默认与 Priority 相同
SortPriority: 2
# 大小写敏感
CaseSensitive: true
- Regex: '^((<|")(gtest|gmock|isl|json)/)'
Priority: 3
CaseSensitive: true
- Regex: '<[[:alnum:].]+>'
Priority: 4
CaseSensitive: true
- Regex: '.*'
Priority: 1
SortPriority: 0
CaseSensitive: true
# 判断头文件是否为相关的头文件,用于排序
# 如 a.cpp 与 a.h,设置为 a.cpp/a_test.cpp
IncludeIsMainRegex: '(_test)?$'
# 判断头文件是否包含实现,用于排序
IncludeIsMainSourceRegex: '(*\.hpp)$'
# 访问控制符缩进,禁用
IndentAccessModifiers: false
# case 块缩进,禁用
IndentCaseBlocks: false
# case 标签缩进
IndentCaseLabels: true
# extern 块缩进,与 BraceWrapping.AfterExternBlock 共同生效
IndentExternBlock: AfterExternBlock
# 缩进 goto 标签,禁用
IndentGotoLabels: false
# 缩进预处理,在 # 后缩进
IndentPPDirectives: AfterHash
# 缩进 requires
IndentRequiresClause: true
# 缩进宽度
IndentWidth: 4
# 函数返回类型换行时,缩进函数声明/函数定义的函数名,禁用
IndentWrappedFunctionNames: false
# 自动插入大括号
InsertBraces: true
# 保留在块开始处的空行,禁用
KeepEmptyLinesAtTheStartOfBlocks: false
# lambda 表达式函数体缩进
LambdaBodyIndentation: OuterScope
# 语言,设置语言为 c++
Language: Cpp
# 开始一个块的宏的正则表达式
MacroBlockBegin: "^MACRO_BEGIN|NS_TABLE_HEAD$"
# 结束一个块的宏的正则表达式
MacroBlockEnd: "^MACRO_END|NS_TABLE_.*_END$"
# 最大连续空行
MaxEmptyLinesToKeep: 1
# namespace 缩进,禁用
NamespaceIndentation: None
# namespace 宏
NamespaceMacros: [ 'NAMESPACE' ]
# 预处理缩进,-1 表示使用默认值 IndentWidth
PPIndentWidth: -1
# 如果构造函数的初始化列表超过一行则换行
PackConstructorInitializers: NextLine
# 有些情况下你会觉得怎么排版都达不到完美,
# 只能各方面妥协一下(例如你限定了行宽,但注释想放宽松点允许超一些)。
# penalty 简单来说就是給每一次“违规”设定一个罚分,
# clang-format 帮你选择最终吃到的总罚分比较少的策略。
# 在赋值前后换行时的罚分
# @see https://www.zhihu.com/question/438473572/answer/1668773325
# 在赋值前后打断的罚分
PenaltyBreakAssignment: 2
# 在函数调用 fun( 后打断的罚分
PenaltyBreakBeforeFirstCallParameter: 19
# 在注释中换行的罚分
PenaltyBreakComment: 300
# 在第一个 << 点打断的罚分
PenaltyBreakFirstLessLess: 120
# 在 ( 后打断的罚分
PenaltyBreakOpenParenthesis: 100
# 在字符串常量中换行的罚分
PenaltyBreakString: 1000
# 在模版声明后打断的罚分
PenaltyBreakTemplateDeclaration: 10
# 注释的每个字符超出 ColumnLimit 的罚分
PenaltyExcessCharacter: 1000000
# 每个空格缩进的罚分,
# counted relative to leading non-whitespace column
PenaltyIndentedWhitespace: 0
# 函数返回类型单独成行的罚分
PenaltyReturnTypeOnItsOwnLine: 0
# 指针和引用对齐,左对齐
PointerAlignment: Left
# 修饰符对齐,由 QualifierOrder 指定
QualifierAlignment: Custom
# 修饰符顺序
QualifierOrder: [ 'inline', 'static', 'const', 'volatile','type' ]
# 将字符串格式化,与 ProtocolBuffers 配合使用,未使用
RawStringFormats:
- Language: Cpp
BasedOnStyle: InheritParentConfig
Delimiters: [ pb ]
# 引用对齐,与 PointerAlignment 相同
ReferenceAlignment: Pointer
# 重新排版注释
ReflowComments: true
# requires 位置,单独成行
RequiresClausePosition: OwnLine
# 在定义块之间添加空行,总是添加
SeparateDefinitionBlocks: Always
# 设置短 namespace 长度,0 表示将所有 namespace 视为 short namespace
ShortNamespaceLines: 0
# 排序 #include,按照字母序
SortIncludes: CaseInsensitive
# 排序 using 声明
SortUsingDeclarations: true
# 在 C 风格类型转换后添加空格,禁用
SpaceAfterCStyleCast: false
# 在逻辑非 ! 后添加空格,禁用
SpaceAfterLogicalNot: false
# 在 template 后添加空格
SpaceAfterTemplateKeyword: true
# 在指针修饰符周围添加空格,使用 PointerAlignment
SpaceAroundPointerQualifiers: Default
# 在赋值运算符之前添加空格
SpaceBeforeAssignmentOperators: true
# 在 case 的 : 前添加空格,禁用
SpaceBeforeCaseColon: false
# 在 c++11 大括号初始化前添加空格
SpaceBeforeCpp11BracedList: true
# 在构造函数初始化列表 : 前添加空格
SpaceBeforeCtorInitializerColon: true
# 在继承 : 前添加空格
SpaceBeforeInheritanceColon: true
# 在 ( 前添加空格,由 SpaceBeforeParensOptions 指定
SpaceBeforeParens: Custom
# 在 ( 前添加空格的规则
SpaceBeforeParensOptions:
# 在控制语句后添加
AfterControlStatements: true
# 在 for-each 宏后添加,禁用
AfterForeachMacros: false
# 在函数声明后添加,禁用
AfterFunctionDeclarationName: false
# 在函数定义后添加,禁用
AfterFunctionDefinitionName: false
# 在 if 宏后添加,禁用
AfterIfMacros: false
# 在重载运算符后添加,禁用
AfterOverloadedOperator: false
# 在 requires 后添加
AfterRequiresInClause: true
# 在表达式中的 requires 后添加,禁用
AfterRequiresInExpression: false
# 在非空的 () 前添加,禁用
BeforeNonEmptyParentheses: false
# 在范围 for 循环 : 前添加空格
SpaceBeforeRangeBasedForLoopColon: true
# 在 [ 前添加空格,禁用
SpaceBeforeSquareBrackets: false
# 在空 {} 中添加空格
SpaceInEmptyBlock: true
# 在空的圆括号中添加空格,禁用
SpaceInEmptyParentheses: false
# 在行后注释前添加空格(只适用于 //)
SpacesBeforeTrailingComments: 4
# 在尖括号的 < 后和 > 前添加空格,禁用
SpacesInAngles: Never
# 在 C 风格类型转换的括号中添加空格,禁用
SpacesInCStyleCastParentheses: false
# 在条件判断中 ( 后 ) 前添加空格,禁用
SpacesInConditionalStatement: false
# 在容器字面量中添加空格
SpacesInContainerLiterals: true
# 行注释前缀中的空格
SpacesInLineCommentPrefix:
# 最大值
Maximum: 1
# 最小值
Minimum: 1
# 在 ( 后和 ) 前添加空格,禁用
SpacesInParentheses: false
# 在 [ 后和 ] 前添加空格,lamda 表达式和未指明大小的数组的声明不受影响,禁用
SpacesInSquareBrackets: false
# cpp 标准,使用最新支持的
Standard: Latest
# 需要识别为宏的代码块前缀
StatementAttributeLikeMacros: [ ]
# 需要解释为完整代码段的宏
StatementMacros: [ ]
# tab 宽度,8 个空格
TabWidth: 8
# 需要识别为宏,而不是函数调用的宏
TypenameMacros: [ ]
# 使用 \r\n 换行符,与 DeriveLineEnding 共同生效,禁用
UseCRLF: false
# 使用 tab,禁用
UseTab: Never
# 对空格敏感的宏
WhitespaceSensitiveMacros: [ ]
...