Skip to content

Latest commit

 

History

History
39 lines (37 loc) · 2 KB

CODE_REQUIREMENTS.md

File metadata and controls

39 lines (37 loc) · 2 KB

要求

代码中不能有以下问题

  • 非常严重:没有实现用户的所有需求
  • 非常严重:画蛇添足地加上了多余的实现
  • 问题较大:只有玩具级、示例级的实现,实现的功能不能 cover 需求
  • 问题较大:代码实现过于简陋
  • 问题较大:基于 if 的防御性编程和不必要的前向兼容
    • 一般不检查意料外的情况
    • 遵循 fail fast: 如果出现意料外的情况时代码不会直接崩溃,则需要在前面使用 assert
  • 存在问题:存在单行注释
    • 禁止用注释说明“是什么”
    • 例外:说明“为什么”的注释
    • 例外:pylint注释等给自动化程序看的注释
  • 存在问题:debug时创建的临时文件没有删除
  • 存在问题:代码风格存在以下风格问题:
    • try catch后函数继续运行
      • 例外: 无限重试
    • try catch后返回不当默认值
    • 非常常见: import 位置错误
    • 非常常见: 代码嵌套过深、代码块过大
    • 非常常见: 滥用 hasattr 和 getattr
    • 类型标记存在问题:
      • 必须标记list/dict等容器类型的item类型
        • 对于复杂的dict必须使用TypedDict或Pydantic等正确标注每个value的类型
      • 禁止使用Any
    • 多余副作用:存在满足以下两点的,明显可以重写的函数
      • 返回None
      • 通过副作用改变外部状态
  • 存在问题:没有遵守该项目的惯例:
    • Registry.get_member_typechecked
      • 第二个参数t只能是类型,不能是字符串
      • 传给t的类型可以在同一个函数那import,这是为了解决循环导入的问题
      • 禁止使用assert甚至if检查返回值是否是t指定的类型
        • 这个函数在运行时返回的值一定是t指定的类型,不可能是其他类型,更不可能是None
        • 清除任何检查错误值的代码,消灭任何可能使其返回错误值的因素
      • 禁止将返回值(一个对象)保存在另一个对象的参数中
    • 新增功能没有对应的unittest