morganlinton/BeautifulRust
Agent Skills that teach coding agents to write, review, and port idiomatic Rust, plus a tested clippy config. Works with Claude Code, Codex, Copilot, Cursor, and Gemini CLI.
Beautiful Rust 是一套工具,用于教导 AI 编码代理以惯用方式编写、审查和移植 Rust 代码。它由两部分组成:三个技能(代理工作时阅读的指令)和一个lints 配置(在 CI 中自动捕获违规的规则)。
三个技能
rust-best-practices — 当代理编写或修改 Rust 代码时激活。它引导代理编写惯用、健壮、可维护的代码。这是核心技能;其他两个技能基于它构建。
rust-review — 审查现有 Rust 代码(单个文件、整个 crate 或差异),并生成优先级报告。每个发现都包含
file:line位置、违反的规则(及其来源,如 API 指南代码或 clippy lint),以及修复它的最小代码更改。发现分为等级:必须修复、应该修复、考虑修复。报告还以代码已经做得很好的部分结尾。rust-port — 将 C、C++、Python、Go 或 JavaScript 移植到具有相同行为的惯用 Rust。它首先移植原始测试,以便您可以证明两个版本匹配。它设计一个 Rust API,而不是直译原始代码,并将每种语言的习惯映射到 Rust 等价物——例如,
NULL/None变为Option,错误代码变为错误枚举,输出参数变为返回值,标志整数变为类型化枚举。每个移植都包含一个PORTING.md,记录每个有意的差异。
lints 配置
lints/ 是一个即插即用的 clippy 配置。您将 clippy.toml 复制到 Cargo.toml 旁边,粘贴 lints.toml 中的 [lints] 块,然后运行 cargo clippy。它会标记诸如测试之外的 unwrap()、没有 // SAFETY: 注释的 unsafe 块、没有原因的 #[allow]、bool 函数参数、静默有损的 as 转换、缺少 # Errors 和 # Panics 文档,以及遗留的 dbg!/todo!。每个 lint 都被证明会触发——一个小型测试 crate 包含每个 lint 的一个故意违规,并且一个脚本会在任何 lint 停止工作时失败。
它在实践中的改变
README 展示了一个具体的之前/之后对比。要求构建一个小型 semver 解析库时,没有该技能的代理生成了一个具有公共字段、没有 # Errors 文档以及文档示例中使用 unwrap() 的结构体。使用该技能后,同一代理保持字段私有,明确记录失败模式,并编写用户可以安全复制粘贴的文档示例。
指导来源
这些技能提炼了五份已发布的来源,每份的浓缩摘要都捆绑在技能中,以便代理可以查阅原始推理:
- Google Rust 风格指南
- Rust API 指南(官方 rust-lang 清单)
- David Drysdale 的《Effective Rust》
- Rust 设计模式(rust-unofficial)
- Microsoft 务实 Rust 指南
当来源不一致时,技能会选择一方并说明原因。
兼容性和安装
适用于 Claude Code、OpenAI Codex、GitHub Copilot、Cursor、Gemini CLI,以及任何读取 Agent Skills 格式的代理。安装方式因代理而异——一键安装程序、插件安装,或简单地将技能文件夹复制到代理的技能目录。表格列出了每个代理的正确目录。
效果如何
这些技能通过真实模型运行进行了测试(运行需要花费金钱)。结果:
- 编写技能: 使用技能时 30 项检查中通过 29 项,而未使用时 30 项中通过 24 项——每个任务大约多消耗三分之一的 token。
- 审查技能: 12 项中通过 11 项,而未使用时 12 项中通过 7 项。
- 移植技能: 22 项中通过 22 项,而未使用时 22 项中通过 19 项。
维护和贡献
更新通过 plugin.json 进行版本控制;Claude Code 用户可以通过一条命令获取更新。推送前,验证脚本检查技能格式、链接和评估案例。欢迎贡献——每条规则必须引用已发布的来源,README 链接到贡献指南。
许可证
技能文本、摘要、横幅和生成器脚本采用 MIT 许可证。五份来源摘要是对原始内容的转述,链接回原始内容,每份都有自己的许可证(CC BY 3.0、MIT/Apache-2.0、CC BY-NC-ND 4.0、MPL-2.0、MIT)。
相关
- 项目
- 项目
- 项目
- 项目