如何为Cargo工作区中所有crate运行rustdoc lint检查?
解决Cargo工作区全量Rustdoc lint检查的官方方法
不用再折腾xargs了,官方有更简洁高效的原生方案,主要有这几种:
通过环境变量+
cargo doc --workspace一次性检查cargo doc本身支持--workspace参数,配合RUSTDOCFLAGS环境变量就能给所有工作区crate传递lint规则,命令如下:RUSTDOCFLAGS="-D rustdoc::broken-intra-doc-links" cargo doc --workspace --no-deps加
--no-deps是为了只检查你自己的工作区crate,跳过第三方依赖的文档生成,节省时间和资源。通过Cargo配置文件持久化规则
如果不想每次都手动输入环境变量,可以在工作区根目录的.cargo/config.toml里添加配置,之后直接执行cargo doc --workspace --no-deps就会自动应用lint规则:[build] rustdocflags = ["-D", "rustdoc::broken-intra-doc-links"]要是只想在CI环境生效,也可以单独写一个
config-ci.toml,然后通过CARGO_CONFIG环境变量指定加载:CARGO_CONFIG=./.cargo/config-ci.toml cargo doc --workspace --no-depsCI场景的落地示例
以GitHub Actions为例,直接把环境变量和命令整合到CI脚本里即可,Cargo会自动并行处理工作区的crate,效率比xargs高得多:jobs: doc-lint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable - name: Run workspace-wide rustdoc lints run: RUSTDOCFLAGS="-D rustdoc::broken-intra-doc-links" cargo doc --workspace --no-deps
这些都是官方原生支持的方案,不需要额外工具,能高效覆盖工作区所有crate的文档lint检查。
内容的提问来源于stack exchange,提问作者Derek Thurn
相关产品推荐
相关产品推荐

