引言
有不少工具用于统一项目编码风格,比如Go语言自带fmt
模块统一编码风格,又比如C++有astyle
这样的工具,但这里要介绍的是clang-format
工具。
安装:
$ sudo yum install clang-format git-clang-format
如果是源码安装,在llvm-project/clang/
目录下:
$ mkdir build && cd build/
$ cmake ../
$ make clang-format
同时还提供了其它工具对应的版本:
llvm-project/clang/tools/clang-format/clang-format-bbedit.applescript
llvm-project/clang/tools/clang-format/clang-format-diff.py
llvm-project/clang/tools/clang-format/clang-format-sublime.py
llvm-project/clang/tools/clang-format/clang-format-test.el
llvm-project/clang/tools/clang-format/clang-format.el
llvm-project/clang/tools/clang-format/clang-format.py
llvm-project/clang/tools/clang-format/git-clang-format
生成风格配置文件
以llvm和google为例:
$ clang-format -style=llvm -dump-config > .clang-format
$ clang-format -style=google -dump-config > .clang-format
有了.clang-format
风格配置文件,命令clang-format
就会自动读取此配置文件,编辑器vscode
只要安装了vs-clang-format
插件也会自动读取此配置。
修改文件风格
$ clang-format filename.cpp # 只对比不修改文件
$ clang-format -i filename.cpp # 直接修改文件
git自动clang-format
需要依赖git-clang-format
:
它会自动对暂存区的文件进行风格转换,也可以配置git-hooks让执行git commit
的时候自动进行转换。
添加文件.git/hooks/pre-commit
:
#!/bin/sh
git clang-format
这样就不怕忘记执行clang-format了。
部分代码不想被格式化
int formatted_code;
// clang-format off
void unformatted_code ;
// clang-format on
void formatted_code_again;
通过注释的方式告诉clang-format
不要因为代码风格而改动这部分代码。
.clang-format配置项
几个配置:
BasedOnStyle: LLVM # 基于LLVM风格
AlignAfterOpenBracket: Align # 括号后跨行对齐
ColumnLimit: 0 # 行字符数量无限制
IndentCaseLabels: true # case缩进
IndentWidth: 4 # 4格缩进
NamespaceIndentation: All # 名字空间缩进
TabWidth: 4 # TAB长度
UseTab: Never # 不使用TAB
Language: Cpp
Standard: c++17
不管使用什么风格,只要保持一致即可。