Files
xingrin/.windsurf/rules/code-preview.md
2025-12-12 18:04:57 +08:00

3.5 KiB
Raw Blame History

trigger, description
trigger description
manual 进行代码审查的时候,必须调用这个规则

0. 逻辑正确性 & Bug 排查 (最高优先级,必须手动推演)

目标:不依赖测试,主动发现“代码能跑但结果错”的逻辑错误。

  1. 手动推演关键路径
    • 选 2~3 个典型输入(含边界),在脑中或纸上一步步推演代码执行流程
    • 输出是否符合预期?每一步变量变化是否正确?
  2. 常见逻辑 bug 检查
    • off-by-one:循环、数组索引、分页
    • 条件逻辑错误and/or 优先级、短路求值误用
    • 状态混乱:变量未初始化、被意外覆盖
    • 算法偏差:排序、搜索、二分查找的中点处理
    • 浮点精度:是否误用 == 比较浮点数?
  3. 控制流审查
    • 所有 if/else 分支是否都覆盖?有无“不可达代码”?
    • switch/match 是否有 default?是否漏 case
    • 异常路径会返回什么?是否遗漏 finally 清理?
  4. 业务逻辑一致性
    • 是否符合业务规则?(如“订单总额 = 商品价 × 数量 + 运费 - 折扣”)
    • 是否遗漏隐含约束?(如“用户只能评价已完成的订单”)

一、功能性 & 正确性 (阻塞性问题必须修复)

  1. 需求符合度是否100%覆盖需求?遗漏/多余功能点?
  2. 边界条件
    • 输入:null、空、极值、非法格式
    • 集合空、单元素、超大如10⁶
    • 循环终止条件、off-by-one
  3. 错误处理
    • 异常捕获全面?失败路径有降级?
    • 错误信息清晰?不泄露栈迹?
  4. 并发安全
    • 竞态/死锁风险?共享资源是否同步?
    • 使用了volatile/synchronized/Lock/atomic
  5. 单元测试
    • 覆盖率 ≥80%?包含正向/边界/异常用例?
    • 测试独立?无外部依赖?

二、代码质量与可读性

  1. 命名:见名知意?遵循规范?
  2. 函数设计
    • 单一职责?参数 ≤4建议长度 <50行视语言调整
    • 可提取为工具函数?
  3. 结构与复杂度
    • 无重复代码?圈复杂度 <10
    • 嵌套 ≤3层使用卫语句提前返回
  4. 注释:解释为什么而非是什么?复杂逻辑必注释
  5. 风格一致:通过Prettier/ESLint/Spotless自动格式化

三、架构与设计

  1. SOLID:是否符合单一职责、开闭、依赖倒置?
  2. 依赖:是否依赖接口而非实现?无循环依赖?
  3. 可测试性:是否支持依赖注入?避免new硬编码
  4. 扩展性:新增功能是否只需改一处?

四、性能优化

  • N+1查询循环内IO/日志/分配?
  • 算法复杂度合理如O(n²)是否可优化)
  • 内存:无泄漏?大对象及时释放?缓存有失效?

五、其他

  1. 可维护性:日志带上下文?修改后更干净?
  2. 兼容性API/数据库变更是否向后兼容?
  3. 依赖管理:新库必要?许可证合规?

审查最佳实践

  • 小批次审查≤200行/次
  • 语气建议“建议将函数拆分以提升可读性” 而非 “这个函数太长了”
  • 自动化先行:风格/空指针/安全扫描 → CI工具
  • 重点分级
    • 🛑 阻塞:功能错、安全漏洞
    • ⚠️ 必须改:设计缺陷、性能瓶颈
    • 💡 建议:风格、命名、可读性