0%

周谈(53)- clang-format代码格式化配置

前言

组内代码格式不统一,每当我review的时候,总发现各种规范问题,比如代码行缩进不一致, 操作数和运算符之间空格时有时无,对于代码洁癖的人这是很难忍受。
那么就只能用工具了,鉴于Windows下编码大部分时候使用vscode,所以就找到了clang-format插件,而且在Linux下clang-format还可以集成到git hook里。

我抽空研究了一下,然后形成配置文档,让组里的同事照着配置一下。

下面描述了在windows下vscode+clang-format和linux下git+clang-format的配置,记录以供后续查询,也可以跟大家交流一下。

vscode下配置clang-format

以下在Windows环境下配置。

1. 进行插件安装,查找clang-format,选择安装人数比较多的那个

vscode_clang_format

2. 下载LLVM-17.0.6-win64并安装

LLVM自带clang-format.exe, 我选择安装到d:\Program Files\LLVM目录。

LLVM文件大小为332MB, 下载比较慢,可以从我分享的百度网盘下载(目前还是有效的):
链接: https://pan.baidu.com/s/1Q8ntN13JlPHdaJJt9Cdm_g?pwd=smvd 提取码: smvd

3. 创建.clang-format规则文件

规则内容则是从linux-6.1拷贝过来,在linux内核源码根目录下有一个.clang-format文件,仅将行数修改为120行。

clang_format_rule

保存路径为D:\Program Files\LLVM\clang-format.txt

4. 配置扩展插件

Vscode 文件->首选项->设置->扩展->Clang-Format configuration :

主要是选择Executalbe为 clang-format,Fallback Style LLVM, 还有就是Style的路径配置为D:\Program Files\LLVM\clang-format.txt。

clang_format_cfg1

clang_format_cfg2

好了,这样每次保存C语言文件时,就会自动格式化代码了。

git commit 自动调用clang-format格式化提交的代码文件

以下在Ubuntu环境下配置。

1. 安装clang-format工具

执行命令安装。

1
apt install clang-format 

2. 配置.clang-format规则文件

从linux 6.1 根目录下.clang-format拷贝而来,删除了2行不支持的规则,行数修改为120行,放到工程根目录下,命名为.clang-format。

下面是.clang-format的一个链接:

1
2
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/.clang-format

3. 配置git提交格式化脚本

将下面内容保存到你的工程的.git/hooks/pre-commit 文件中,记得chmod +x pre-commit。

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
#!/bin/bash

STYLE=$(git config --get hooks.clangformat.style)
if [ -n "${STYLE}" ] ; then
STYLEARG="-style=${STYLE}"
else
STYLEARG=""
fi

format_file() {
file="${1}"
if [ -f $file ]; then
clang-format -i ${STYLEARG} ${1}
echo "clang-format ${STYLEARG} -i ${1}"
git add ${1}
fi
}

case "${1}" in
--about )
echo "Runs clang-format on source files"
;;
* )
for file in `git diff-index --cached --name-only HEAD | grep -iE '\.(c|cpp|cc|h|hpp)$' ` ; do
format_file "${file}"
done
;;
esac

git commit时的效果如下:

git_clang_format


行动,才不会被动!

欢迎关注个人公众号 微信 -> 搜索 -> fishmwei,沟通交流。

欢迎关注

博客地址: https://fishmwei.github.io

掘金主页: https://juejin.cn/user/2084329776486919