ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Synergy-core 如何用 lint 脚本执行 C++ 与 CMake 代码格式检查并自动修复

2026/9/12 4:08:47 拓冰建站 浏览量
Synergy-core 如何用 lint 脚本执行 C++ 与 CMake 代码格式检查并自动修复 Synergy-core 如何用 lint 脚本执行 C 与 CMake 代码格式检查并自动修复【免费下载链接】synergy-coreShare a single keyboard and mouse between multiple computers.项目地址: https://gitcode.com/GitHub_Trending/sy/synergy-coresynergy-coreDeskflow 的下游分支用于在多台电脑之间共享一套键盘鼠标把格式检查做成了两个独立的 Python 脚本scripts/lint_clang.py 负责 C/C 源文件scripts/lint_cmake.py 负责 CMake 构建脚本。默认运行时它们只做“检查”——相当于clang-format --dry-run --Werror和cmake-format --check的跨平台等价物任何文件需要格式化就返回非零退出码加上-f参数则按项目配置原地重写文件。本文说明如何准备环境、跑这两种检查、判断通过与否以及触发自动修复时需要注意什么。适用前提是你本地已有 Pythonscripts/pyproject.toml要求 Python 3.9并且可以从仓库根目录执行脚本两个脚本都用相对路径src和.扫描文件。两个脚本的检查范围与配置来源先确认你要检查的对象落在脚本的扫描范围内否则“检查通过”可能只是因为文件不在扫描列表里脚本扫描目录匹配文件排除目录scripts/lint_clang.pysrc*.h、*.c、*.hpp、*.cpp无scripts/lint_cmake.py仓库根目录.*.cmake、CMakeLists.txtbuild、.venv、deps、subprojects也就是说放在src之外的 C 文件、以及subprojects和构建产物目录里的 CMake 文件不会被这两个脚本检查。格式规则本身来自仓库根目录的两个配置文件两个脚本调用格式化工具时会自动使用它们.clang-formatBasedOnStyle: LLVMColumnLimit: 120AlignAfterOpenBracket: BlockIndent等cmake-format.yamlline_ending: auto解决 Windows 换行问题、max_pargs_hwrap: 4、enable_markup: false不格式化注释。准备 Python 虚拟环境两个 lint 脚本都调用lib/env.py中的ensure_in_venv()要求运行在虚拟环境里依赖clang-format、cmake_format等由 scripts/pyproject.toml 声明。在仓库根目录执行python3 scripts/setup_venv.py该脚本的行为见 scripts/setup_venv.py 与scripts/lib/env.py先检查本机 Python 是否带pip和venv模块缺失时会抛出Python is missing pip/Python is missing venv一类的错误需要先解决系统 Python 依赖在仓库根目录创建.venv然后执行pip install --upgrade pip和pip install -e scripts把pyproject.toml里的依赖装进虚拟环境。副作用是会在仓库根目录新建.venv目录并修改其中的 Python 包这是正常的开发环境准备不改动源代码。.venv建好之后即使你用系统 Python 直接跑python3 scripts/lint_clang.py脚本也会自动用.venv里的 Python 重新执行自己若.venv不存在脚本会打印Please run: scripts/setup_venv.py并以退出码 1 结束看到这条提示就先补跑上面的环境准备命令。执行格式检查默认模式在仓库根目录分别执行两个检查命令python3 scripts/lint_clang.py python3 scripts/lint_cmake.py检查模式的判定逻辑两个脚本一致脚本先按上表规则收集待处理文件并逐个打印路径方便确认扫描范围是否符合预期以只读方式运行格式化工具C 侧为--dry-run --WerrorCMake 侧为--check任何文件需要格式化即视为失败全部通过时打印Clang lint passed或CMake lint passed退出码为 0若没有收集到任何文件打印No files for Clang to process或No CMake files found to process.并以退出码 0 结束——这条提示值得警惕它意味着路径不对比如没在仓库根目录执行而不是“没有格式问题”。失败时退出码非零具体哪些文件需要格式化由clang-format/cmake-format的 dry-run 输出给出把检查命令接在持续集成或 pre-commit 里时可直接依赖这个退出码。自动修复--format模式确认检查输出、了解哪些文件会被改动后加-f等价写法--format触发原地格式化python3 scripts/lint_clang.py -f python3 scripts/lint_cmake.py -f副作用提示这两个命令会直接改写所有匹配文件的内容C 侧以clang-format -i、CMake 侧以cmake-format --in-place运行不做备份也不受 git 保护改动会落在你的工作区里。建议的执行顺序是先跑一次不带参数的检查命令从输出的文件列表中确认受影响的范围用 git 查看改动 diff只保留符合预期的格式调整修复后再次运行检查命令确认输出Clang lint passed/CMake lint passed且退出码为 0说明仓库内格式问题已清零。clang-format 版本一致性.clang-format 文件开头的注释明确警告必须使用与 lint 脚本相同的 clang-format 版本不同版本的格式化结果会不同。确认版本的方式./scripts/install_deps.py --only-python ./.venv/bin/clang-format --versionscripts/install_deps.py --only-python只安装 Python 侧依赖它同样会确保.venv存在并安装scripts/pyproject.toml声明的模块。如果你需要在别处单独安装指定版本的 clang-format配置文件中给出的方式是pip install clang-formatversion其中version替换为与虚拟环境中一致的版本号。限制与不适用场景这两个脚本只覆盖格式formatting问题不包含其他代码质量检查仓库里 CMake 配置本身的其他校验不在此列。src目录之外新增的 C 文件、subprojects下的 wrap/补丁文件不会被 lint 到补充这些位置的格式检查需要自行扩展dirs/EXCLUDE_DIRS定义在两个脚本顶部。CMake 检查默认排除build目录这是为了避免格式化构建产物如果你把自定义 cmake 文件放在被排除的目录如deps下需要自行保证格式。完成检查并修复后判断标准只有一条两个脚本在检查模式下都以退出码 0 结束并分别打印Clang lint passed和CMake lint passed。【免费下载链接】synergy-coreShare a single keyboard and mouse between multiple computers.项目地址: https://gitcode.com/GitHub_Trending/sy/synergy-core创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考