SuperAPI AI 工具集

linting-and-formatting

测试与质量

查看项目

更新于 10-16 07:24

技能介绍

用途:这是 Megatron Bridge 代码风格的唯一权威说明,在编写新代码或评审 PR 前阅读。规范依据 Google Python 风格指南与 Google Shell 风格指南,目标 Python 3.10+。

格式化与检查:每次提交前运行 uv run ruff check --fix . 和 uv run ruff format .;pre-commit 钩子会自动执行这些命令,若钩子自动修复了文件,需用 git add -u 后重新运行 pre-commit run,直到干净。ruff.toml 规定的规则包括:行长 119 字符、双引号;F541 无占位符 f-string 报错;F841 未使用局部变量由 --fix 自动删除;F401 未使用导入由 --fix 自动删除(init.py 中忽略);E741 歧义变量名(如 l、O、I)报错;F821 未定义名报错;E266 注释块格式(过多 #)报错;I 导入排序兼容 isort 并自动修复;D101/D103 公共类与函数文档字符串为警告(测试文件中忽略)。

命名与导入顺序:文件、函数、方法、局部变量用 snake_case,类用 PascalCase,常量 UPPER_SNAKE,全局变量加 G_ 前缀,以数字开头的变量加 k 前缀(如 k_99th_percentile);避免遮蔽外层作用域变量;外部可见类成员需在构造函数初始化。导入按 future、标准库、第三方、第一方 megatron.bridge.*、本地文件夹五组排列,组间空行。

类型与 mypy:所有公共 API 函数与方法必须标注类型;用 T | None 而非 Optional[T],用 X | Y 而非 Union,用内置泛型而非 typing 等价物。提交前对改动文件运行 uv run mypy --strict path/to/file.py。关键规则:不允许 Any 泄漏(未知类型用 object 或 TypeVar)、不允许未标注函数、不允许隐式 Optional(写 x: int | None = None)、仅在推断失败时用 typing.cast() 并加注释、结构化字典优先用 TypedDict、可调用签名用 Callable 或 Protocol、# type: ignore[code] 必须带错误码与理由。多个同类型参数可能被误换序时,用 * 强制关键字参数。

文档与日志:公共类与函数使用 Google 风格文档字符串(含 Args、Returns、Raises)。模块级 logger 用 logging.getLogger(name),分布式场景面向用户的消息用 print_rank_0 / warn_rank_0,禁止裸 print()。错误处理使用具体异常并保持 try 体积最小。避免反射式写法。配置对象用 dataclasses 或 NamedTuple,不添加随意默认值。新增 Python 文件与 shell 脚本(测试文件除外)需加 NVIDIA 版权头并使用当前年份。最后附代码评审清单,逐项核对版权头、类型标注、文档字符串、异常、日志、配置参数、关键字参数、引号、导入顺序、注释代码与 mypy 清洁度。

限制:资料未提供与具体版本、收费、平台或效果相关的信息,暂未提供。