代码格式化⼯具Clang-format
介绍
平时团队进⾏合作的时候需要注意代码的格式,虽然很难统⼀每个⼈的编码风格,但是通过⼯具能够很好的管理代码格式。这⾥介绍下clang-format,它是基于clang的⼀个命令⾏⼯具,能够⾃动化格式C/C++/Obj-C代码,⽀持多种代码风格:Google, Chromium,LLVM, Mozilla, WebKit,也⽀持⾃定义风格(通过编写.clang-format⽂件)很⽅便的同意代码格式。使⽤⽅法Linux下下安装Clang-format : sudo apt-get install clang-format
以LLVM代码风格格式化main.cpp, 结果直接写到main.cpp clang g-format -i main.cpp -style=LLVM
当然也⽀持对指定⾏格式化,格式化main.cpp的第1,2⾏clang-format -lines=1:2 main.cpp vim 中也可以集成该插件
它提供⼀个clang-format-diff.py脚本,⽤来格式化patch,code review提交代码配置⽂件说明
配置⽂件.clang-format详细说明# 基于那个配置⽂件BasedOnStyle: LLVM # 访问说明符的偏移(public private)AccessModifierOffset: -4# 括号之后,⽔平对齐参数: Align DontAlign AlwaysBreak AlignAfterOpenBracket: Align # 连续的赋值时,对齐所有的等号AlignConsecutiveAssignments: true #
连续声明时,对齐所有声明的变量名AlignConsecutiveDeclarations: true # 左对齐换⾏(使⽤反斜杠换⾏)的反斜杠 AlignEscapedNewlinesLeft: true # ⽔平对齐⼆元和三元表达式的操作数 AlignOperands: true # 对齐连续的尾随的注释  AlignTrailingComments: true # 允许函数声明的所有参数在放在下⼀⾏  AllowAllParametersOfDeclarationOnNextLine: true # 允许短的块放在同⼀⾏  AllowShortBlocksOnASingleLine : false # 允许短的case 标签放在同⼀⾏AllowShortCaseLabelsOnASingleLine: false # 允许短的函数放在同⼀⾏: None, InlineOnly(定义在类中), Empty(空函数), Inline(定义在类中,空函数), All AllowShortFunctionsOnASingleLine: Empty # 是否允许短if 单⾏ If true, if (a) return; 可以放到同⼀⾏AllowShortIfStatementsOnASingleLine: false # 允许短的循环保持在同⼀⾏  AllowShortLoopsOnASingleLine: false  # 总是在定义返回类型后换⾏(deprecated)  AlwaysBreakAfterDefinitionReturnType: None # 每⾏字符的限制,0表⽰没有限制  ColumnLimit: 100# 描述具有特殊意义的注释的正则表达式,它不应该被分割为多⾏或以其它⽅式改变
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格式化命令format参数
30
31
32
33
参考
1.
2. # 描述具有特殊意义的注释的正则表达式,它不应该被分割为多⾏或以其它⽅式改变CommentPragmas: '^ IWYU pragma:'
# 语⾔: None Cpp Java Objc Protp
Language: Cpp
#指针的*的挨着哪边
PointerAlignment: Right
#缩进宽度
IndentWidth: 4
# 连续的空⾏保留⼏⾏
MaxEmptyLinesToKeep: 1
# 在 @property 后⾯添加空格, \@property (readonly) ⽽不是 \@property(readonly). ObjCSpaceAfterProperty: true
# OC block后⾯的缩进
ObjCBlockIndentWidth: 4
# 是否允许短⽅法单⾏
AllowShortFunctionsOnASingleLine: false
# 换⾏的时候对齐操作符
#AlignOperands: true
# 中括号两边空格 []
SpacesInSquareBrackets: true
# ⼩括号两边添加空格
SpacesInParentheses : false
#等号两边的空格
SpaceBeforeAssignmentOperators: true
# 容器类的空格例如 OC的字典
SpacesInContainerLiterals: true
#缩进
IndentWrappedFunctionNames: true
#在block从空⾏开始
KeepEmptyLinesAtTheStartOfBlocks: true
#在构造函数初始化时按逗号断⾏,并以冒号对齐BreakConstructorInitializersBeforeComma: true
#括号后添加空格
SpaceAfterCStyleCast: false
# 允许排序#include, 造成编译错误
# SortIncludes: true
# 缩进case 标签
IndentCaseLabels: true
#tab键盘的宽度
TabWidth: 4
UseTab: Never
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

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。