共计 2620 个字符,预计需要花费 7 分钟才能阅读完成。
本文由 RT-Thread 论坛用户 @RTT_逍遥原创公布:https://club.rt-thread.org/as…
这篇文章能够将 RT-THREAD 的官网的 formatting 和 astyle 等整顿文档的工具整合到 git 外面从而实现 git commit 的时候主动帮你实现 formatting 等格式化的问题,再也不必放心代码没有通过 formatting 无奈 PR 胜利,而后须要本人手动操作了。这边只有部署一次,当前都是由 git hook 自动化实现。
GITHUB 仓库:
git_auto_script
欢送 START 和提 issue。有好的倡议能够 PR 或者提 issue。
一、简介
你是否会遇到过遗记应用 formatting 脚本来整顿下代码,导致 RTTHREAD PR 不通过打回去从新批改?你是否总是遗记整顿那些 astyle 的格局问题,总是提交的代码不够好看?总是因为空格 TAB 等格局问题,让熊大等合并者头疼?你是否总是有些 bug 是因为没有通过动态查看,导致前面 bug 一大堆?
来看下这个软件吧,保障对你有肯定帮忙,而且在做其余我的项目的时候这个软件包也能够应用。
本软件包通过整合 cppcheck(动态编译软件),astyle(格式化代码),formatting(RTTHREAD 格局整顿)
三款软件,将这三款软件整合到 git 的 hook 中,让你当前提交代码再也不要放心被 CI 的 formatting 检测出问题从新提交了。
本软件一次部署长期有效,只有你的 git 仓库没有更换,就始终无效。
当然如果有好的倡议或者批改,欢送 PR,咱们大家一起来保护。
当然也如果有更好的软件或者更好的需要,也欢送在 issue 外面提出来。
二、如何应用
第一次应用可能会麻烦一点,不过我感觉这个就是一劳永逸的事件,前面就简直无感了。
2.1 CPPCHECK
STEP1: CPPCHECK 官网 下载安装
STEP2: 环境变量 path 增加 cppcheck 门路
STEP3: 命令行外面执行 cppcheck 命令,能够用即可
2.2 ASTYLE
STEP1: ASTYEL 官网 下载解压
STEP2: 环境变量 path 增加 astyle 门路
STEP3: 命令行外面执行 astyle 命令,能够用即可
2.3 formatting
这个是来自 formatting.py 的自动化脚本,这边我把这个 python 脚本整顿成 exe 命令行的模式:
STEP1: 间接 clonegit_auto_script 目录
STEP2: 将 Windows_exe 文件夹增加到 path 环境变量中
STEP3: 命令行外面执行 formatting 能够用即可
生成 exe 采纳命令 (这一步我曾经弄好放到 Windows_exe 中,通常不须要操作,如果须要更新的话在 formatting.py 目录下执行上面操作)
pyinstaller –onefile –nowindowed formatting.py
2.4 pre-commit 装置
将 RTTHREAD_auto/pre-commit 拷贝到你的工程的.git/hook 文件夹上面,当前 commit 无需操作任何操作就能够间接 commit 无需思考 formatting 或者格局问题或者动态查看问题
image-20211025223018211.png
好了,所有 ready。
这个时候,只有你失常 commit,你就会发现,你的代码格局曾经通过 astyle 优化过了,如果代码动态查看有问题,会 commit 不过,并且提醒你须要批改,同时也是通过 formatting 的批改了。之后再也不必放心 PR 会有格局上的问题了。
上面看下动画演示:
help.gif
GITHUB 仓库:
git_auto_script
欢送 START 和提 issue。又好的倡议能够 PR 或者提 issue。
三、FAQ
3.1 cppcheck 和 astyle 等命令在哪里能够去掉?
在 pre-commit 文件夹中,找到 cppcheck 命令和 astyle 命令和 formatting 命令,后面加 #就能够去掉
如下所示:正文掉所有的命令,就不会执行自动化脚本了
if [-n “$changed_files”]; then
#cppcheck --enable=warning,performance,portability --inline-suppr --error-exitcode=1 --force $changed_files
err=$?
if [$err -ne 0]; then
echo "Hello! we found a obvious fault, please fix the error then commit again"
exit $err
fi
fi
We only filter the file name with c or cpp file.
changed_files=$(git diff-index –cached $against | \
grep -E '[MA] .*\.(c|cpp|h)$' | cut -d' ' -f 2)
if [-n “$changed_files”]; then
#astyle --style=allman --indent=spaces=4 --indent=spaces=4 --indent=spaces=4 --pad-header --pad-header --pad-header --align-pointer=name --lineend=linux --convert-tabs --verbose $changed_files
#formatting $changed_files
git add $changed_files
fi
3.2 commit 之后文件夹上面多进去一些奇怪的文件是否能够去掉
生成一些 *.orig 文件是因为 astyle 对文件进行了批改,为了避免改错文件,将源文件做了备份,如果不想要的话能够在 astyle 命令上面增加上面的选项来去掉:
–suffix=none
3.3 cppcheck 的选项的含意
cppcheck 选项能够参考官网 manual
astyle 选项参考官网的 astyle option
本我的项目次要目标是提供一种自动化的 commit 机制,如果感觉 cppcheck 机制和 astyle 机制不好用,能够正文掉或者用其余的命令替换掉,也欢送提供一些比拟好用的收费的不便的软件。
astyle 的选项,参考 RTTHREAD 官网文档
3.4 pre-commit 是否能够在主仓库中保留
目前我感觉是无奈在仓库中保留的,欢送大家提出好的 idea。我也心愿能有好的办法在主仓库保留