2014-10-18
如果你还不知道什么是 Clang-Format 插件,可以到这里去看看, ClangFormat-Xcode 官方的 Demo 使用的是 WebKit 模式,这样 format 出来的代码其实就已经特别规范了,但是 和苹果的官方代码有一点点小小的区别在于指针的区别,例如 对于一个 NSString, 苹果的格式应该是 NSString *str, 而WebKit给出的格式却会是 NSString* str; 如果你不强制要求指针的格式,那么使用他的 WebKit 模式就足够了,但有的时候,我们需要考虑到整个团队的统一代码风格,我们团队采用的是Google 开源项目风格指南,所以这就强制要求了我去把 Clang-Format 的 WebKit 风格修改。
我们从安装开始(如果你已经安装了 ClangFormat,可以跳过这一段),首先去 GitHub 下载插件,下载完毕后会是一个 Project,只要正常的运行一次,Xcode出现 Build Successed 以后,说明安装成功,这时候,需要重启 Xocde,注意 要彻底退出 Xocde。接下来你可以在 Xcode 的菜单栏找到 Edit 一列多出了一个 Clang Format(应该在最下面),然后 你可以选择对应的WebKit 风格的代码了,(这个在我看来已经很 perfect)。
接下来,我们说一下如何格式化出和苹果一样的代码风格,Clang Format 支持之定义格式,这时候,你需要做的就是复制下面一段代码,然后保存为一个名字叫做 ".clang-format" 的文件,主要不要忘记“.”,当然,你也可以从我这里直接下载,不过 因为权限的原因,我无法上传“.”开头的文件,所以下载完后,你需要重命名成 ".clang-format"
--- Language: Cpp # BasedOnStyle: LLVM AccessModifierOffset: -2 ConstructorInitializerIndentWidth: 4 AlignEscapedNewlinesLeft: false AlignTrailingComments: true AllowAllParametersOfDeclarationOnNextLine: true AllowShortIfStatementsOnASingleLine: false AllowShortLoopsOnASingleLine: false AllowShortFunctionsOnASingleLine: false AlwaysBreakTemplateDeclarations: false AlwaysBreakBeforeMultilineStrings: false BreakBeforeBinaryOperators: false BreakBeforeTernaryOperators: true BreakConstructorInitializersBeforeComma: false BinPackParameters: true ColumnLimit: 0 IndentWidth: 4 ConstructorInitializerAllOnOneLineOrOnePerLine: false DerivePointerBinding: false ExperimentalAutoDetectBinPacking: false IndentCaseLabels: true MaxEmptyLinesToKeep: 1 NamespaceIndentation: None ObjCSpaceAfterProperty: true ObjCSpaceBeforeProtocolList: true PenaltyBreakBeforeFirstCallParameter: 19 PenaltyBreakComment: 300 PenaltyBreakString: 1000 PenaltyBreakFirstLessLess: 120 PenaltyExcessCharacter: 1000000 PenaltyReturnTypeOnItsOwnLine: 60 PointerBindsToType: false SpacesBeforeTrailingComments: 1 Cpp11BracedListStyle: true Standard: Cpp11 TabWidth: 8 UseTab: Never BreakBeforeBraces: Stroustrup IndentFunctionDeclarationAfterType: true SpacesInParentheses: false SpacesInAngles: false SpaceInEmptyParentheses: false SpacesInCStyleCastParentheses: false SpacesInContainerLiterals: true SpaceBeforeAssignmentOperators: true ContinuationIndentWidth: 4 CommentPragmas: '^ IWYU pragma:' SpaceBeforeParens: ControlStatements这是 Clang Format 支持自定义格式的一种方法,如果你感兴趣,可以阅读这里的官方文档,看看这些参数的意思。好了,接下来,在我们保存完文件以后,把这个文件复制到你的项目的根目录中,比如我新建一个项目叫做 “Test”,然后把刚刚保存的 “.clang-format” 拖到项目中,目录如下: