Guest 程序里的 lookup、quote、get_report 等名称由 Host manifest 注入,普通 Python 编辑器原本会报 undefined name。仓库根的 pyrightconfig.json 配合 examples/typings/__builtins__.pyi 告诉 Pyright/Pylance 这些名称的类型。
怎么打开
用 VS Code / Pylance 打开整个仓库根目录,而不是只打开某个独立文件。工具函数可以补全参数、显示返回值,并跳转到 .pyi 声明。CLI 检查:
uvx pyright --project pyrightconfig.json
首次执行 uvx 会下载类型检查工具;这不是 Guest 构建步骤,也不是 demo 运行依赖。其他 IDE 是否支持这种自定义 builtins 机制取决于其 Python 语言服务,不能保证 PyCharm 等会自动读取 Pyright 配置。
为什么不在示例头部加 import
Spine prefix 只扫描开头连续的合格读取。把 from typing import TYPE_CHECKING 放在第一行,即使后续 import 只供类型检查,也会让 prefix 提前扫描停止。声明放在编辑器 stub 中,既不改变 AST,也不会让 Guest 加载一个假工具模块。
__builtins__.pyi 是 Pyright 对环境注入符号的声明入口;Spine 实际把工具注入执行 scope,并未修改 CPython 的 builtins 模块。
声明、实现与权限
examples/*.py:真正送入 Guest 的 Python 程序。examples/typings/__builtins__.pyi:编辑器用的接口说明,没有可执行实现。cmd/*中的 manifest:决定本次运行实际提供哪些工具。- Go 工具函数或 native Python provider:实际实现。
这份 stub 是多个教学 demo 的工具并集,所以 IDE 补全出某个名字,不代表任意 demo 都授权了它。未注册名称在运行时仍不可调用。声明不替代 Host 参数验证,lookup 的值由示例目录决定,既可能是数字也可能是字符串,因此保留 Any,不伪造全部返回 int。
类型检查当前聚焦 Guest 示例。自定义注入符号是项目级编辑器配置,不应当作 native provider 自动获得的全局变量。native Python 工具要使用真实 import 和函数定义。
官方说明:https://github.com/microsoft/pyright/blob/main/docs/builtins.md