可以直接查看 github項(xiàng)目,利用git子模塊的方式引入到工程中. https://github.com/square/spacecommander
以下是對.clang-format 文件的注釋.
# Custom options in the special build of clang-format (these are not standard options)
IndentNestedBlocks: false
AllowNewlineBeforeBlockParameter: false
Language: Cpp
# BasedOnStyle: Google
#類的訪問修飾關(guān)鍵字(private,public,protected···)縮進(jìn)
AccessModifierOffset: -1
#構(gòu)造函數(shù)初始化的縮進(jìn)值
ConstructorInitializerIndentWidth: 4
#引入頭文件排序
SortIncludes: false
#在未封閉(括號的開始和結(jié)束不在同一行)的括號中的代碼是否對齊
AlignAfterOpenBracket: true
#在(),[],{}中代碼不少于一行且換行情況下畔裕。如果true則衣撬,第二行起代碼會盡量向左對齊,否則向最右邊對齊扮饶。
AlignEscapedNewlinesLeft: true
#如果為true具练,水平對齊二元和三元表達(dá)式的操作數(shù)。
AlignOperands: false
#如果為true甜无,對齊各行尾部注釋
AlignTrailingComments: true
#如果為true扛点,函數(shù)申明多個(gè)參數(shù)時(shí),允許換行
AllowAllParametersOfDeclarationOnNextLine: false
#如果true岂丘,較短的代碼片段允許格式化為一行
AllowShortBlocksOnASingleLine: false
#是否允許短switch的case 語句在一行寫完
AllowShortCaseLabelsOnASingleLine: false
#是否允許短的方法實(shí)現(xiàn)在一行寫完
AllowShortFunctionsOnASingleLine: false
#是否允許短if else語句在一行寫完
AllowShortIfStatementsOnASingleLine: true
#是否允許短的循環(huán)在一行寫完
AllowShortLoopsOnASingleLine: true
#定義函數(shù)返回類型之后換行
AlwaysBreakAfterDefinitionReturnType: false
#定義模板之后換行
AlwaysBreakTemplateDeclarations: false
#多行字符串之前換行
AlwaysBreakBeforeMultilineStrings: false
#二元操作符之前換行
BreakBeforeBinaryOperators: None
#三元操作符之前換行
BreakBeforeTernaryOperators: false
#在構(gòu)造函數(shù)初始化時(shí)按逗號斷行陵究,并以冒號對齊
BreakConstructorInitializersBeforeComma: false
#如果false,函數(shù)調(diào)用時(shí)的參數(shù)要么是全部占同一行奥帘,要么一個(gè)參數(shù)占一行铜邮。
BinPackArguments: true
#如果false,函數(shù)的定義或聲明的參數(shù)要么是全部占同一行寨蹋,要么一個(gè)參數(shù)占一行
BinPackParameters: true
#一行代碼長度的限制松蒜,0為無限制
ColumnLimit: 0
#如果true,構(gòu)造函數(shù)的初始化無法適應(yīng)于一行以內(nèi)已旧,那么每個(gè)參數(shù)占一行
ConstructorInitializerAllOnOneLineOrOnePerLine: true
#如果true秸苗,將用使用PointerAlignment的值為指針類型進(jìn)行格式化
DerivePointerAlignment: false
#如果true,clang-format檢測方法的定義和調(diào)用是否被格式化為一個(gè)參數(shù)占據(jù)一行
ExperimentalAutoDetectBinPacking: false
#case語句的位置總是在switch語句后縮進(jìn)一級
IndentCaseLabels: true
#若方法定義或者聲明在類型之后換行,自動(dòng)縮進(jìn)(true)
IndentWrappedFunctionNames: false
IndentFunctionDeclarationAfterType: false
#持續(xù)空行的最大數(shù)量
MaxEmptyLinesToKeep: 2
#如果true运褪,在一塊代碼前的空行將會被保留
KeepEmptyLinesAtTheStartOfBlocks: false
#NameSpace 縮進(jìn): None(所有namespace均不縮進(jìn));Inner(只在內(nèi)部namespcae縮進(jìn));All(所有namespace均縮進(jìn))
NamespaceIndentation: Inner
#OC的block縮進(jìn)
ObjCBlockIndentWidth: 4
#OC的property與()之間后是否空格惊楼,如果true玖瘸,那么@property(readonly) 代替 @property (readonly).
ObjCSpaceAfterProperty: true
#<Protocol> 前是否空格
ObjCSpaceBeforeProtocolList: true
PenaltyBreakBeforeFirstCallParameter: 10000
PenaltyBreakComment: 300
PenaltyBreakString: 1000
PenaltyBreakFirstLessLess: 120
PenaltyExcessCharacter: 1000000
PenaltyReturnTypeOnItsOwnLine: 200
#指針在類型那邊還是在變量名那邊還是在中間
PointerAlignment: Right
#單行注釋前的空格數(shù)
SpacesBeforeTrailingComments: 1
#如果true,將大括號的列表格式化為最適合C++11的格式檀咙。
Cpp11BracedListStyle: true
#LanguageStandard 參考英文文檔
Standard: Auto
#縮進(jìn)的列數(shù)
IndentWidth: 4
#制表位列數(shù)
TabWidth: 8
#是否使用tab進(jìn)行縮進(jìn)
UseTab: Never
#括號的斷行模式 (此處為自定義,更多選項(xiàng)可參考官方英文文檔)
BreakBeforeBraces: Custom
BraceWrapping:
AfterClass: true
AfterControlStatement: false
AfterEnum: false
AfterFunction: false
AfterNamespace: true
AfterObjCDeclaration: true
AfterStruct: false
AfterUnion: false
BeforeCatch: false
BeforeElse: false
IndentBraces: false
#如果true店读,在非空的括號中插入空格
SpacesInParentheses: false
#如果true,[]中間插入空格
SpacesInSquareBrackets: false
#如果true攀芯,在<>中間插入空格
SpacesInAngles: false
#如果true 空括號中加空格
SpaceInEmptyParentheses: false
#c-style 強(qiáng)制轉(zhuǎn)換中類型前后是否空格 true -> ( int32 )x, false -> (int32)x
SpacesInCStyleCastParentheses: false
#c-style 強(qiáng)制轉(zhuǎn)換類型括號后是否空格 true -> (int32) x, false -> (int32)x
SpaceAfterCStyleCast: false
# true -> [ 1, 2, 3 ] , {a : 1, b : 2, c : 3}; false -> [1, 2, 3], {a: 1, b: 2, c: 3}
SpacesInContainerLiterals: false
# 賦值操作符 = 兩側(cè)是否空格 a = 3 vs a=3
SpaceBeforeAssignmentOperators: true
#在續(xù)行(\ 下一行)時(shí)的縮進(jìn)長度
ContinuationIndentWidth: 4
CommentPragmas: '^ IWYU pragma:'
ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ]
#是否在括號前加上空格,此處只是在控制語句之前添加(if/while/for...)
SpaceBeforeParens: ControlStatements
#禁用當(dāng)前format文件
DisableFormat: false
...
其中 SortIncludes 這個(gè)值被設(shè)置為true之后,會導(dǎo)致格式化代碼之后提交代碼任然會提示錯(cuò)誤的問題, 可以先設(shè)置true,代碼全局格式化之后,再改回false.
以上clang-format文件是相對比較符合團(tuán)隊(duì)風(fēng)格的代碼風(fēng)格.也需要在開發(fā)中, 不斷調(diào)整該配置.
參考文檔: http://clang.llvm.org/docs/ClangFormatStyleOptions.html