Files
playbook/tools/tsl-codegen/STANDARD.md
T
csh c69278283f feat(tsl-codegen): add decoupled documentation toolkit
Generate TSL API Markdown from YAML or JSON into a configurable project scope.\nAdd file and directory lint modes, tags-aware indexing, and keyword search across tags and descriptions.\nBundle the toolkit through the playbook build and sync workflows.
2026-07-20 09:08:38 +08:00

207 lines
6.1 KiB
Markdown

# TSL 函数文档标准
本文件是 TSL codegen 函数文档的唯一标准,包含 Markdown 存储格式和 YAML/JSON
录入格式
适用范围:`references/codegen/**/*.md` 中的函数条目
## 基本原则
- Markdown 是唯一存储源
- YAML/JSON 用于生成 Markdown
- 函数签名由维护者提供;工具原样输出,不校正签名内容
- 示例输出必须全部写成 `//` 注释,不得把裸结果写成 TSL 语句
- 一个 `tsl` 代码块只放一个独立示例
## Markdown 存储格式
每个函数条目按以下顺序书写:
1. `## \`函数签名\``
2. `<!-- tags: 关键词1 关键词2 -->`,可选
3. 函数描述,必填;首个非空内容必须是描述
4. 参数表,有参数时必填
5. 参数取值说明,可选
6. `返回:类型`
7. `### 示例``tsl` 代码块,可选
### 标签
标签紧跟函数签名,用空格分隔检索关键词:
```markdown
<!-- tags: 数组 排序 去重 -->
```
没有关键词时删除整行,不保留空标签
### 参数表
参数表固定为三列:
```markdown
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| `src` | array | 待处理数组 |
```
规则:
- 参数名必须与函数签名一致
- 必填参数说明直接写用途
- 可选参数说明以 `可选。` 开头,并说明默认值
- 多类型使用 `\|`,例如 `nil\|array`
- 变参使用 `...` 作为参数名
### 参数取值
枚举参数在参数表之后、返回类型之前列出:
```markdown
**mode 取值**
- `0` — 原样返回
- `1` — 去重
```
### 返回类型
每个函数必须包含非空返回类型:
```markdown
返回:array
```
### 示例代码
- 代码围栏使用 `tsl`
- 字符串使用直引号 `'``"`
- 注释使用 `//`,不使用 `(* *)`
- 每条语句保留分号
- 单行输出写成 `// 输出:<值>`
- 多行输出第一行写 `// 输出:`,后续每一行输出都以 `//` 开头
多行输出示例:
```tsl
return demoLines();
// 输出:
// 第一行
// 第二行
```
### 完整条目示例
以下函数仅用于说明文档格式,不代表真实 TSL API
````markdown
## `demoFn(src, mode, factor, ...)`
<!-- tags: 示例 数组 -->
按指定模式处理数组并返回结果
| 参数 | 类型 | 说明 |
| -------- | ---------- | --------------------------------- |
| `src` | array | 待处理数组 |
| `mode` | integer | 处理模式,取值见下。 |
| `factor` | float | 可选。默认 1.0,结果乘以该系数。 |
| `...` | nil\|array | 可选。需要追加处理的其他数组。 |
**mode 取值**
- `0` — 原样返回
- `1` — 去重
返回:array
### 示例
```tsl
src := array(1, 1, 2);
return demoFn(src, 1, 2.0);
// 输出:array(2,4)
```
````
无参函数省略参数表:
````markdown
## `demoNow()`
返回示例值
返回:integer
### 示例
```tsl
return demoNow();
// 输出:1
```
````
## 录入数据结构
一个录入文件对应一个 Markdown 叶子页
顶层字段:
| 字段 | 必填 | 说明 |
| ----------- | ---- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `module` | 是 | Markdown 一级标题内容;不是目录名或文件名。例如 `module: 示例 / 数组` 生成 `# 示例 / 数组` |
| `path` | 是 | 目标 Markdown 在 scope 目录下的相对路径,包含子目录和文件名,使用 `/` 分隔且不含 `.md` 后缀。例如 `path: base/example` 在默认 `project` scope 下生成 `references/codegen/project/base/example.md` |
| `functions` | 是 | 非空函数列表 |
函数字段:
| 字段 | 必填 | 说明 |
| ----------- | ------ | ------------------------------------------------------ |
| `signature` | 是 | 维护者提供的完整函数签名 |
| `desc` | 是 | 函数描述,可包含多行 |
| `tags` | 否 | 检索关键词列表;推荐填写,有助于更准确地识别和检索函数 |
| `params` | 有参时 | 参数列表;无参函数省略 |
| `returns` | 是 | 返回类型 |
| `example` | 否 | 不含代码围栏的 TSL 示例 |
参数字段:
| 字段 | 必填 | 说明 |
| ---------- | ---- | ------------------------------- |
| `name` | 是 | 参数名,与签名一致 |
| `type` | 是 | 参数类型 |
| `desc` | 是 | 参数说明 |
| `optional` | 否 | `true` 时自动添加 `可选。` 前缀 |
| `values` | 否 | 枚举值列表,生成参数取值说明 |
`values` 每项包含:
| 字段 | 必填 | 说明 |
| ------- | ---- | -------- |
| `value` | 是 | 枚举值 |
| `desc` | 是 | 枚举含义 |
## YAML 录入格式
YAML 适合包含多行示例的页面。解析 YAML 需要安装 `pyyaml`
注意:
- `example` 使用 `|` 块标量
- 参数名 `...` 必须加引号
- `nil|array` 可直接作为普通字符串值
完整例子:[examples/example.yaml](examples/example.yaml)
## JSON 录入格式
JSON 使用 Python 标准库解析,无额外依赖
注意:
- JSON 不支持注释
- 多行示例使用 `\n`
- 字符串内部的双引号使用 `\"`
- 结构标点必须使用半角字符
完整例子:[examples/example.json](examples/example.json)