编码风格指南

风格工具

Checkpatch

使用 Linux 内核中采用 GPL 许可的工具 checkpatch 检查编码风格的合规性。

备注

checkpatch 目前无法在 Windows 上运行。

Checkpatch 位于 scripts 目录中。要在提交代码时调用它,请将 $ZEPHYR_BASE/.git/hooks/pre-commit 文件设为可执行,并编辑其内容为:

#!/bin/sh
set -e exec
exec git diff --cached | ${ZEPHYR_BASE}/scripts/checkpatch.pl -

如果不想在每次提交时都运行 checkpatch,也可以只在向 Zephyr 仓库推送之前运行。为此,请将 $ZEPHYR_BASE/.git/hooks/pre-push 文件设为可执行,并编辑其内容为:

#!/bin/sh
remote="$1"
url="$2"

z40=0000000000000000000000000000000000000000

echo "Run push hook"

while read local_ref local_sha remote_ref remote_sha
do
    args="$remote $url $local_ref $local_sha $remote_ref $remote_sha"
    exec ${ZEPHYR_BASE}/scripts/series-push-hook.sh $args
done

exit 0

如果希望忽略 checkpatch 的判定,在报告了问题的情况下仍然推送分支,可以在 git push 命令中加上 --no-verify 选项。

运行 checkpatch 的另一种方式是使用 check_compliance.py 脚本,它还会执行额外的风格和合规性检查。

clang-format

clang-format 工具 配合仓库中提供的 .clang-format 配置文件,有助于快速将大量新增源代码重新格式化为符合我们的 编码风格指南 标准。clang-format 已很好地集成到大多数编辑器中,但你也可以像下面这样手动运行它:

clang-format -i my_source_file.c

clang-format 是 LLVM 的一部分,可以从项目的 发布页面 下载。请注意,如果你使用 Linux,clang-format 很可能已作为软件包包含在你的发行版仓库中。

当 编码风格指南 指南与代码格式化工具生成的格式存在差异时,以 编码风格指南 指南为准。如果格式化工具与指南之间存在歧义,维护者可以决定应采用哪种风格。

dts-linter

dts-linter 有助于快速将大量 devicetree 文件重新格式化为符合我们的 编码风格指南 标准。你也可以像下面这样手动运行它:

针对单个文件

npx --prefix ./scripts/ci dts-linter --format --file board.dts --file board_pinctrl.dtsi --patchFile diff.patch
git apply diff.patch

可以省略 --file,这样会格式化命令所在目录下的所有文件。也可以通过 --cwd 设置该工具查找文件的基础目录。该选项还用于使补丁文件中的路径变为相对路径。

你也可以就地修复,命令如下

npx --prefix ./scripts/ci dts-linter --formatFixAll

编辑器集成

请务必遵循 Devicetree 风格指南 的要求,以便正确配置编辑器。