跳到主要内容
TileLang 系统教程

tilelang-tutorial.huandu.me

第 31 章 贡献指南

/code/31-contributing/

01-pr-scope-linter/README.md1200 字节
# 贡献路径判定器(pr_scope_linter.py)

## 目的

一个 PR「该跑哪些测试」不由作者的心情决定,而由**它改了哪一类文件**决定。
这个脚本把改动路径映射到锁定版本仓库里实际存在的门禁,输出一张清单,
避免两种最常见的错误:

* 改了编译器却只跑了单元测试,没进 `testing/python/transform/`;
* 改了昇腾路径却按 CUDA 的套路跑测试(或反过来)。

## 运行前提

* Python 3.10+(只用到标准库)。
* 在 TileLang 仓库里执行,或者把改动路径作为参数传进来。
* 不需要 GPU / NPU,不需要安装 TileLang。

## 运行命令

```bash
# 用参数
python3 pr_scope_linter.py tilelang/language/copy_op.py src/transform/lower_tile_op.cc

# 用 git 输出(推荐)
git diff --name-only origin/main...HEAD | python3 pr_scope_linter.py -

# 自测(不带外部输入)
python3 pr_scope_linter.py --self-test
```

## 输出说明

脚本对每个改动路径给出:路径、判定类别、需要跑的门禁,以及该门禁在锁定版本
仓库里的定义位置。最后打印一份「合并后的门禁集合」。

## 期望输出(自测用例的判据)

`--self-test` 必须打印 `self-test passed` 并以退出码 0 结束。它内部断言了三条
已知映射,任一条不成立就报错退出:

1. `examples/softmax/example_softmax.py` → 算子/示例路径,需要示例测试门禁;
2. `src/transform/lower_tile_op.cc` → 编译器路径,需要 transform 测试门禁;
3. `tilelang/ascend/pipeline.py` → 昇腾路径,需要 Ascend 测试门禁与双后端说明。

## 验证级别

**在 CPU 上验证过逻辑**:`python3 -m py_compile pr_scope_linter.py` 通过;
`python3 pr_scope_linter.py --self-test` 通过。没有在真实硬件上运行过,也不需要。

## 已知限制

* 判定是**路径前缀启发式**,不解析 C++/Python 语义。一个 PR 同时改多棵树时,
  脚本会把两类门禁都列出来,这是有意为之(宁可多跑)。
* 「必须双后端验证」这类昇腾规则写在昇腾仓库的 PR 模板里,脚本只能提醒
  「去核对模板」,无法替人判定。

← 浏览本章全部代码