简体中文 English 繁體中文 日本語 Русский
本文为静态镜像,内容以交互版为准 在交互式文档中心打开 →

类型存根生成(IDE 补全)

ErisPulse 通过 entry-points 动态发现模块/适配器,入口点无法在静态层面获知用户类的具体类型。 epsdk types 命令通过扫描已安装的模块/适配器,生成一个类型存根文件,让用户可以用这些类型作为变量标注,从而获得 IDE 补全。

核心设计原则

存根文件只导出类型,不提供任何运行时实例:

基本用法

在项目根目录运行:

epsdk types

会在当前目录生成 _ep_types.py,包含所有已安装模块/适配器的类型。

在代码中使用

from _ep_types import MyModule, Yunhu
from ErisPulse import sdk

# 用导入的类型作为变量标注,即可让 IDE 补全该类的方法
my_mod: MyModule = sdk.module.get("MyModule")
my_mod.hello()                  # ← IDE 补全 hello

my_adapter: Yunhu = sdk.adapter.get("yunhu")
await my_adapter.Send.To("group", "123").Board(...)   # ← 补全平台特有方法

工作原理

  1. 扫描 erispulse.adapter / erispulse.module entry-points
  2. 通过子进程在目标 Python 环境中内省,收集每个适配器/模块的实际类信息(包含模块路径与限定名)
  3. 生成 .py 文件,其中:
    • 所有 from xxx import Yyy as Zzz 都在 TYPE_CHECKING 下
    • Zzz 是 entry-point 名的 PascalCase 形式
  4. IDE 读取 TYPE_CHECKING 部分提供补全;运行时不执行任何代码

生成的存根示例:

# _ep_types.py(自动生成)
from typing import TYPE_CHECKING

if TYPE_CHECKING:
    # 适配器
    from MyAdapter.Core import MyAdapter as MyAdapter
    from YunhuAdapter.Core import YunhuAdapter as Yunhu

    # 模块
    from MyModule.Core import Main as MyModule

    __all__ = ['MyAdapter', 'Yunhu', 'MyModule']

命令选项

选项 说明
-o, --output PATH 指定输出文件路径(默认 ./_ep_types.py)
--force 覆盖已存在的存根文件
--adapters-only 仅扫描适配器
--modules-only 仅扫描模块

何时重新生成

与 SendDSL 标准方法的关系

SendDSL 基类已内置标准发送方法(Text/Image/Voice/Video/File),任何方式获取的 SendDSL 实例都能补全这些方法。 types 命令主要用于补全平台特有方法(如云湖的 Board、沙盒的 Dice)和模块特有方法。

相关文档