Rust 1.XX (beta) - ## Rust 1.XX【免费下载链接】rust-clippyA bunch of lints to catch common mistakes and improve your Rust code. Book: https://doc.rust-lang.org/clippy/项目地址: https://gitcode.com/GitHub_Trending/ru/rust-clippy- 更新新稳定版本的发布日期行 markdown Current beta, release 20YY-MM-DD - Current stable, released 20YY-MM-DD更新上一稳定版本的发布日期行Current stable, released 20YY-MM-DD - Released 20YY-MM-DD变更日志更新为每次 Rust 发布撰写 CHANGELOG何时更新针对新 Rust 发布的 changelog 更新理想情况下应在即将到来的稳定版发布前一周完成发布日期见 Rust Forge。多数时候只需为 Rust 的小版本更新 changelogClippy 改动被包含进 patch 版本的情况非常罕见。不过错别字及其他小修小补随时欢迎提交。更新步骤第 1 步找到相关的 Clippy commits每个 Rust 版本都携带自己的 Clippy 版本作为 subtree 位于 Rust 仓库的tools目录。根据更新目标选择对应的 commit 来源为即将到来的稳定版写发布说明checkout 当前 Rustbeta分支上的 Clippy commit为即将到来的 beta 版本写发布说明checkout 当前 Rustmain上的 Clippy commit为过去的稳定版补写发布说明checkout 对应稳定版的 release tag。通常要写的是即将到来的稳定版的 changelog但需先确认 Rust 仓库中beta分支已经切出。在rust-lang/rustcheckout大多数时候在upstream/beta分支中查找 commit hashgit log --oneline -- src/tools/clippy/ | grep -o Merge commit [a-f0-9]* into .* | head -1 | sed -e s/Merge commit \([a-f0-9]*\) into .*/\1/g第 2 步抓取这两个 commit 之间的 PR拿到正确的 commit 区间后运行util/fetch_prs_between.sh start_commit end_commit changes.txt其中end_commit是上一步得到的 commit hashstart_commit是当前 CHANGELOG.md 中记录的 commit hash。然后用编辑器打开changes.txt。第 3 步撰写最终 changelog脚本会导出所有相关 PR 并过滤掉大部分无关 PR但建议再手动清理一遍挑选有价值的 PR不确定的 PR 可以留在文件中供 review 时讨论。之后逐条把 PR 的changelog:内容移入 CHANGELOG.md措辞可自行润色但要保持连贯。各节顺序大致如下### New Lints * Added [LINT] to GROUP ### Moves and Deprecations * Moved [LINT] to GROUP (From GROUP, now LEVEL-by-default) * Renamed LINT to [LINT] ### Enhancements ### False Positive Fixes ### ICE Fixes ### Documentation Improvements ### Others同时务必更新文件顶部的Unreleased/Beta/In Rust Nightly区段中的 commit 区间并新增Rust version区段注明发布日期与 PR 区间。第 4 步纳入 beta-accepted 的 PR查找带 [beta-accepted] 标签的 PR确保它们也被写进 changelog。若可行在 changelog PR 合并后移除这些标签。注意其中部分 PR 可能被 backport 到上一个beta这类 PR 必须写进上一个版本的 changelog。第 5 步更新#[clippy::version]属性核对新增 lint 的#[clippy::version]属性是否为正确的版本号。针对 New Lints 一节中的每个 lint 运行grep -rB1 pub $LINT_NAME .显示的版本应与本次 changelog 对应的发布版本一致不一致则更新为该 changelog 版本。Backport紧急修复回流 beta某些情况下需要把改动 backport 到 Clippy 的 beta 版本。Backport 在 Clippy 中很罕见必须经 Clippy 团队批准。典型场景包括修复了关键的 ICE编译器内部错误或某个 lint 损坏到必须在进入 stable 前被禁用。若你认为某个 PR 需要 backport可为其打上beta-nominated标签。这必须在发布前一周的周四之前完成。筛选待 backport 的 PR先通过beta-nominated标签过滤器找出所有被标记的 PR然后逐个审视重点检查三件事这个修复值得 backport 吗这比较主观。ICE 修复通常值得把 lint 移到更低的组从 warn 默认改为 allow通常也值得单独的 FP误报修复通常不值得但如果本来就要 backportFP 修复也可以顺带包含。改动量大的 PR 需要更谨慎地评估。该 PR 修复的问题是否已经在beta中如果问题还没进入 Rust 仓库的beta分支且修复已同步到 Rust 仓库则无需 backport它会与引入问题的 commit 一起进入 stable。若修复 PR 尚未同步则需要在下一个 backport 周期把它backport到 Rustmaster或beta。确保修复已在master上再移植到beta。修复必须先同步到 Rustmaster分支否则下一个beta会再次缺少该修复。若确需紧急 backport 而修复还未进master应先做一次小规模的周期外同步该同步的改动会直接进入beta未经 nightly 充分测试因此必须保持精简。Backport 操作步骤所有命令在 Rust 仓库克隆中执行先按 release.md 的 Defining Remotes 一节定义clippy-upstreamremotegit fetch clippy-upstream master git switch beta git fetch upstream git reset --hard upstream/betaPR 通过 GitHub merge queue 合并后会以PR title (#PR number)的形式关闭。找到该 commit 的sha1在Rust 仓库的克隆中执行git cherry-pick -m 1 sha1对所有需要 backport 的 PR 重复此操作。随后向 Rust 仓库的beta分支注意不是master打开 PR描述模板如下[beta] Clippy backports r? Mark-Simulacrum Backports: - Link to the Clippy PR - ... Short summary of what is backported and whyMark 来自 release 团队最终需要他合并此 PR 才能切出新的beta版本因此要 tag 他。最后列出所有 backport 并简要说明内容与理由。PR 被 backport 到 Rustbeta后为其打上beta-accepted标签该标签会在撰写 changelog 时被收集。周边基础设施本书维护与性能基准维护 Clippy Book你现在正在读的这本书Clippy book由 Markdown 编写、mdBook 生成。本地安装 mdBook 后可构建、测试并在本地 serve 以预览改动cargo install --locked mdbook在仓库顶层运行mdbook serve book --open启动本地服务器默认http://localhost:3000对 book/src 下 Markdown 文件的改动会自动热更新。细节见 book.md。用 Lintcheck 做性能基准Clippy 的性能基准直接复用 lintcheck 工具只需加上--perf标志Lintcheck 就变成一个简单而强大的基准工具。它依赖系统安装perf工具底层由 perf 负责 profiling每次基准会生成一个perf.data文件存放在target/lintcheck/sources/package-version目录对应目录中的那个 crate。Lintcheck 使用-g标志因此可以获取栈回溯配合 flamegraph 类工具做更丰富的分析。目前只统计指令数这一指标因为它是可复现性最好的度量rustc-perf 也将其作为核心指标。基准某个 PR 时先切到该 PR 分支跑一次cargo lintcheck --perf再回到与 master 的最近公共 commit 跑第二次最后用perf diff对比两次结果git fetch upstream pull/PR_NUMBER/head:BRANCH_NAME git switch BRANCHNAME # 基准 cargo lintcheck --perf # 找到最近公共 commit 并 checkout LAST_COMMIT$(git log BRANCHNAME..master --oneline | tail -1 | cut -c 1-11) git switch -c temporary $LAST_COMMIT # 现在位于 master 上 # 基准 cargo lintcheck --perf perf diff ./target/lintcheck/sources/CRATE/perf.data ./target/lintcheck/sources/CRATE/perf.data.0【免费下载链接】rust-clippyA bunch of lints to catch common mistakes and improve your Rust code. Book: https://doc.rust-lang.org/clippy/项目地址: https://gitcode.com/GitHub_Trending/ru/rust-clippy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考