开发规范
Home Assistant 对所有提交的代码都严格要求遵循 PEP 8 风格指南 和 PEP 257(文档字符串约定)。
我们使用 Ruff 进行代码格式化。作为 lint 流程的一部分,每个 PR 都会自动接受检查,我们不会合并不符合要求的提交。
最相关点的摘要:
- 注释应该是完整的句子并以句号结尾。
- import 应按规范排序。
- 常量以及列表和字典的内容应按字母顺序排列。
建议调整 IDE 或编辑器设置以匹配这些要求。
我们的建议
对于某些情况,PEP 并没有给出明确建议。本节介绍我们在代码风格方面的补充建议。这些做法来自现有代码中的常见模式,也是贡献者和开发者最常采用的写法。它们本质上代表了多数人的选择,你未必完全认同,但我们仍鼓励你遵循这些建议,以保持代码风格一致。
文件头
文件头中的文档字符串应该描述文件的内容。
记录消息
无需在日志消息中重复添加平台或组件名称,系统会自动补上。和 syslog 消息一样,日志末尾不应加句号。下面展示的是一种广泛使用的写法,不过你也可以根据需要组织措辞。
不要输出 API 密钥、令牌、用户名或密码,即使它们是错误的也不行。
_LOGGER.info 应只用于用户需要看到的信息,其他面向调试的内容请使用 _LOGGER.debug。
使用新样式的字符串格式
优先使用 f-string,而不是 % 或 str.format。
一个例外是使用百分比格式的日志记录。这是为了避免在日志消息被抑制时对其进行格式化。
类型标注
我们鼓励尽可能编写完整类型标注的代码。这有助于在代码库中发现并预防问题,也能帮助其他贡献者在未来更轻松地维护你的代码。
默认情况下,Home Assistant 会在自动化 CI 流程中静态检查类型提示。
如果某个 Python 模块已经完成完整类型标注,可以把它加入 Home Assistant Core 项目根目录下的 .strict-typing 文件,以启用严格检查。
使用 assert 缩小类型
有时,类型检查器无法推断代码中某个变量在某一处的确切类型,即使你很清楚它实际上更具体。在这种情况下,可以在 TYPE_CHECKING 代码块中使用 assert 语句,帮助类型检查器缩小类型范围。这些断言应仅出现在 TYPE_CHECKING 块内,因此它们只服务于类型检查,不会影响运行时行为。
函数文档字符串约定
类型注解通常已经覆盖了函数参数信息。
当你需要补充更多文档时,请遵循Google 风格来编写参数、返回值或异常的文档字符串。在这种情况下,参数和返回值的信息通常已经在类型注解中说明,因此应从文档字符串中省略。

