SuperAPI AI 工具集

coding-guidelines

编程与开发

查看项目

更新于 10-15 08:18

技能介绍

用途

该技能用于在询问 Rust 代码风格或最佳实践时提供规范参考,触发关键词包括命名、格式化、注释、clippy、rustfmt、lint、code style、best practice,以及 P.NAM、G.FMT 等规则标识。它汇总了 50 条核心规则,定位是补充 Rust 中不那么显而易见的约定。

主要能力

命名(Rust 特有)

  • 不使用 get_ 前缀:写 fn name() 而非 fn get_name()。
  • 迭代器约定:iter() / iter_mut() / into_iter()。
  • 转换命名:as_(廉价的 & 转换)、to_(有开销)、into_(转移所有权)。
  • 静态变量前缀:静态量用 G_CONFIG,常量不加前缀。

数据类型

  • 使用 newtype:如 struct Email(String) 表达领域语义。
  • 优先使用切片模式:if let [first, .., last] = slice。
  • 预分配:Vec::with_capacity()、String::with_capacity()。
  • 避免滥用 Vec:固定大小使用数组。

字符串

  • ASCII 场景优先 bytes:s.bytes() 优于 s.chars()。
  • 可能需要修改借用数据时使用 Cow<str>。
  • 使用 format! 而非用 + 拼接字符串。
  • 避免嵌套遍历:字符串上的 contains() 复杂度为 O(n*m)。

错误处理

  • 使用 ? 传播错误,而非 try!() 宏。
  • 值有保证时用 expect() 而非 unwrap()。
  • 用断言检查不变量:在函数入口使用 assert!。

内存

  • 使用有意义的生命周期名:'src、'ctx,而不是只用 'a。
  • RefCell 使用 try_borrow() 以避免 panic。
  • 用遮蔽(shadowing)做类型转换:let x = x.parse()?。

并发

  • 明确锁定顺序以防止死锁。
  • 基本类型使用原子类型,而不是用 Mutex 保护 bool/usize。
  • 谨慎选择内存序:Relaxed / Acquire / Release / SeqCst。

异步

  • CPU 密集型任务使用同步方式,异步适用于 I/O。
  • 不要在 await 期间持有锁,改用作用域守卫。

宏

  • 除非必要否则避免使用宏,优先使用函数/泛型。
  • 宏的输入应看起来像 Rust 语法。

已弃用写法 → 更优替代(含引入版本)

  • lazy_static! → std::sync::OnceLock(1.70)
  • once_cell::Lazy → std::sync::LazyLock(1.80)
  • std::sync::mpsc → crossbeam::channel
  • std::sync::Mutex → parking_lot::Mutex
  • failure/error-chain → thiserror/anyhow
  • try!() → ? 运算符(2018)

速查

  • 命名:snake_case(函数/变量)、CamelCase(类型)、SCREAMING_CASE(常量)。
  • 格式:使用 rustfmt。
  • 文档:/// 用于公开项,//! 用于模块文档。
  • Lint:#![warn(clippy::all)]。

使用方式

当提问涉及 Rust 代码风格或最佳实践时引用该技能,按上述规则类别给出建议。资料提示 Claude 本身已较熟悉 Rust 惯例,因此这些规则侧重 Rust 特有的非显然约定。

适用场景

Rust 代码编写与评审、风格选择、lint 配置、依赖与 API 现代化替换(如迁移到 OnceLock/LazyLock、thiserror/anyhow)等。

限制

资料未说明该技能的安装方式、具体运行环境、工具版本要求、是否收费或价格信息;亦未提供各规则的例外情况说明,暂未提供。