-
Notifications
You must be signed in to change notification settings - Fork 0
/
.clang-format
309 lines (220 loc) · 9.53 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
# https://clang.llvm.org/docs/ClangFormatStyleOptions.html
# https://www.bbsmax.com/A/VGzlMjexJb/
# 語言: None, Cpp, Java, JavaScript, ObjC, Proto, TableGen, TextProto
Language: Cpp
BasedOnStyle: LLVM
# 訪問說明符(public、private等)的偏移
AccessModifierOffset: -4
# 左括號(左圓括號、左尖括號、左方括號)後的對齊: Align, DontAlign, AlwaysBreak(總是在左括號後換行)
AlignAfterOpenBracket: Align
# 連續賦值時,對齊所有等號
AlignConsecutiveAssignments: true
# 連續聲明時,對齊所有聲明的變量名
AlignConsecutiveDeclarations: true
# 對齊連續位域字段的風格
# AlignConsecutiveBitFields: AcrossEmptyLinesAndComments
# 對齊連續宏定義的風格
# AlignConsecutiveMacros: Consecutive #clang-format 12
# 用於在使用反斜槓換行中對齊反斜槓的選項
AlignEscapedNewlines: Left
# 水平對齊二元和三元表達式的操作數
AlignOperands: Align
# 對齊連續的尾隨的註釋
AlignTrailingComments: true
# 如果函數調用或帶括號的初始化列表不適合全部在一行時
# 允許將所有參數放到下一行,即使BinPackArguments爲false
AllowAllArgumentsOnNextLine: true
# 允許構造函數的初始化參數放在下一行
AllowAllConstructorInitializersOnNextLine: true
# 允許函數聲明的所有參數在放在下一行
AllowAllParametersOfDeclarationOnNextLine: true
# 允許短的塊放在同一行(Always 總是將短塊合併成一行,Empty 只合並空塊)
AllowShortBlocksOnASingleLine: Empty
# 允許短的case標籤放在同一行
AllowShortCaseLabelsOnASingleLine: true
# 允許短的函數放在同一行: None, InlineOnly(定義在類中), Empty(空函數), Inline(定義在類中,空函數), All
AllowShortFunctionsOnASingleLine: None
# 允許短的if語句保持在同一行
AllowShortIfStatementsOnASingleLine: false
# 允許短的循環保持在同一行
AllowShortLoopsOnASingleLine: true
# 總是在定義返回類型後換行(deprecated)
AlwaysBreakAfterDefinitionReturnType: None
# 總是在返回類型後換行: None, All, TopLevel(頂級函數,不包括在類中的函數),
# AllDefinitions(所有的定義,不包括聲明), TopLevelDefinitions(所有的頂級函數的定義)
# 函數聲明返回類型後是否換行(None 自動,All全部,TopLevel...)
AlwaysBreakAfterReturnType: None
# 總是在多行string字面量前換行
AlwaysBreakBeforeMultilineStrings: false
# 總是在template聲明後換行
AlwaysBreakTemplateDeclarations: false
# false表示函數實參要麼都在同一行,要麼都各自一行
BinPackArguments: true
# false表示所有形參要麼都在同一行,要麼都各自一行
BinPackParameters: true
# 大括號換行,只有當 BreakBeforeBraces 設置爲Custom時纔有效
BraceWrapping:
# case 語句後面
AfterCaseLabel: true
# class定義後面
AfterClass: true
# 控制語句後面
AfterControlStatement: Never
# enum定義後面
AfterEnum: true
# 函數定義後面
AfterFunction: true
# 命名空間定義後面
AfterNamespace: false
# ObjC定義後面
AfterObjCDeclaration: false
# struct定義後面
AfterStruct: true
# union定義後面
AfterUnion: true
# extern 導出塊後面
AfterExternBlock: false
# catch之前
BeforeCatch: true
# else之前
BeforeElse: true
# 縮進大括號(整個大括號框起來的部分都縮進)
IndentBraces: false
# 空函數的大括號是否可以在一行
SplitEmptyFunction: false
# 空記錄體(struct/class/union)的大括號是否可以在一行
SplitEmptyRecord: false
# 空名字空間的大括號是否可以在一行
SplitEmptyNamespace: false
# 在二元運算符前換行: None(在操作符後換行), NonAssignment(在非賦值的操作符前換行), All(在操作符前換行)
BreakBeforeBinaryOperators: None
# 在大括號前換行: Attach(始終將大括號附加到周圍的上下文), Linux(除函數、命名空間和類定義,與Attach類似),
# Mozilla(除枚舉、函數、記錄定義,與Attach類似), Stroustrup(除函數定義、catch、else,與Attach類似),
# Allman(總是在大括號前換行), GNU(總是在大括號前換行,並對於控制語句的大括號增加額外的縮進), WebKit(在函數前換行), Custom
# 注:這裏認爲語句塊也屬於函數
# 大括號的換行規則
BreakBeforeBraces: Custom
# 三元運算操作符換行位置(?和: 在新行還是尾部)
BreakBeforeTernaryOperators: true
# 在構造函數的初始化列表的逗號前換行
BreakConstructorInitializersBeforeComma: false
# 要使用的構造函數初始化式樣式
BreakConstructorInitializers: BeforeComma
# 每行字符的限制,0表示沒有限制
ColumnLimit: 120
# 描述具有特殊意義的註釋的正則表達式,它不應該被分割爲多行或以其它方式改變
# CommentPragmas: ''
# 如果爲true,則連續的名稱空間聲明將在同一行上。如果爲false,則在新行上聲明每個名稱空間。
CompactNamespaces: false
# 構造函數的初始化列表要麼都在同一行,要麼都各自一行
ConstructorInitializerAllOnOneLineOrOnePerLine: false
# 構造函數的初始化列表的縮進寬度
ConstructorInitializerIndentWidth: 4
# 延續的行的縮進寬度
ContinuationIndentWidth: 4
# 去除C++11的列表初始化的大括號{後和}前的空格
Cpp11BracedListStyle: true
# 繼承最常用的指針和引用的對齊方式
DerivePointerAlignment: false
# 關閉格式化
DisableFormat: false
# 自動檢測函數的調用和定義是否被格式爲每行一個參數(Experimental)
ExperimentalAutoDetectBinPacking: false
# 如果爲true,則clang格式會爲短名稱空間添加缺少的名稱空間結尾註釋,並修復無效的現有名稱結束註釋
FixNamespaceComments: true
# 需要被解讀爲foreach循環而不是函數調用的宏
ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ]
# 對#include進行排序,匹配了某正則表達式的#include擁有對應的優先級,匹配不到的則默認優先級爲INT_MAX(優先級越小排序越靠前),
# 可以定義負數優先級從而保證某些#include永遠在最前面
IncludeCategories:
- Regex: '^"(llvm|llvm-c|clang|clang-c)/'
Priority: 2
- Regex: '^(<|"(gtest|isl|json)/)'
Priority: 3
- Regex: '.*'
Priority: 1
# 縮進case標籤
IndentCaseLabels: false
# 要使用的預處理器指令縮進樣式
IndentPPDirectives: AfterHash
# 縮進寬度
IndentWidth: 4
# 函數返回類型換行時,縮進函數聲明或函數定義的函數名
IndentWrappedFunctionNames: false
# 保留在塊開始處的空行
KeepEmptyLinesAtTheStartOfBlocks: true
# 開始一個塊的宏的正則表達式
MacroBlockBegin: ''
# 結束一個塊的宏的正則表達式
MacroBlockEnd: ''
# 連續空行的最大數量
MaxEmptyLinesToKeep: 10
# 命名空間的縮進: None, Inner(縮進嵌套的命名空間中的內容), All
# NamespaceIndentation: Inner
# 使用ObjC塊時縮進寬度
ObjCBlockIndentWidth: 4
# 在ObjC的@property後添加一個空格
ObjCSpaceAfterProperty: false
# 在ObjC的protocol列表前添加一個空格
ObjCSpaceBeforeProtocolList: true
# 在call(後對函數調用換行的penalty
PenaltyBreakBeforeFirstCallParameter: 2
# 在一個註釋中引入換行的penalty
PenaltyBreakComment: 300
# 第一次在<<前換行的penalty
PenaltyBreakFirstLessLess: 120
# 在一個字符串字面量中引入換行的penalty
PenaltyBreakString: 1000
# 對於每個在行字符數限制之外的字符的penalty
PenaltyExcessCharacter: 1000000
# 對每一個空格縮進字符的penalty(相對於前導的非空格列計算)
# PenaltyIndentedWhitespace: 0
# 將函數的返回類型放到它自己的行的penalty
PenaltyReturnTypeOnItsOwnLine: 80
# 指針和引用的對齊: Left, Right, Middle
PointerAlignment: Left
# 允許重新排版註釋
ReflowComments: true
# 允許排序#include
SortIncludes: true
# 允許排序 using 聲明順序
SortUsingDeclarations: false
# 在C風格類型轉換後添加空格
SpaceAfterCStyleCast: false
# 在邏輯非操作符(!)之後插入一個空格
SpaceAfterLogicalNot: false
# 在 template 關鍵字後插入一個空格
SpaceAfterTemplateKeyword: false
# 定義在什麼情況下在指針限定符之前或之後放置空格
# SpaceAroundPointerQualifiers: Before
# 在賦值運算符之前添加空格
SpaceBeforeAssignmentOperators: true
# 左圓括號之前添加一個空格: Never, ControlStatements, Always
SpaceBeforeParens: ControlStatements
# 空格將在基於範圍的for循環冒號之前被刪除
SpaceBeforeRangeBasedForLoopColon: true
# [ 前是否添加空格(數組名和[之間,Lambdas不會受到影響)
# 連續多個 [ 只考慮第一個(嵌套數組,多維數組)
SpaceBeforeSquareBrackets: false
# 在空的圓括號中添加空格
SpaceInEmptyParentheses: false
# 在尾隨的評論前添加的空格數(只適用於//)
SpacesBeforeTrailingComments: 3
# 在尖括號的<後和>前添加空格
SpacesInAngles: false
# 在容器(ObjC和JavaScript的數組和字典等)字面量中添加空格
SpacesInContainerLiterals: false
# 在C風格類型轉換的括號中添加空格
SpacesInCStyleCastParentheses: false
# 如果爲true,將在If/for/switch/while條件括號前後插入空格。
SpacesInConditionalStatement: false
# 在圓括號的(後和)前添加空格
SpacesInParentheses: false
# 在方括號的[後和]前添加空格,lamda表達式和未指明大小的數組的聲明不受影響
SpacesInSquareBrackets: false
# 標準: Cpp03, Cpp11, Auto
Standard: Cpp11
# tab寬度
TabWidth: 4
# 使用tab字符: Never, ForIndentation, ForContinuationAndIndentation, Always
UseTab: Always