Files

41 lines
2.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
description: 用自然语言为 code-checker 新增一条规则(语义/声明式/Python 兜底)并注册生效
agent: build
---
# rulegen
为 code-checker 新增一条代码规则。先加载 rulegen skill 并按其流程执行(若可用)。
用户要新增的规则描述:
$ARGUMENTS
## 前置
- 确认当前工作目录是 code-checker 项目(含 `tools/rulegen.py``docs/rulegen/prompt-template.md`)。若不是,先切换到该项目根目录或使用其绝对路径执行。
- Windows 下若无 `python` 命令,使用 `py`
## 执行步骤
1. 读取提示词模板 `docs/rulegen/prompt-template.md`,按其 schema 与全部约定执行。
2. 判断规则类型(三选一):
- **semantic(语义)**:需理解代码意图(如 catch 块日志、XSS 转义)→ 只生成 `rule.yaml`,必含 `check_prompt` + `message_zh`
- **declarative(声明式机械)**:行级正则可表达 → `rule.yaml``pattern`(**必须用 YAML 单引号**,如 `pattern: 'Thread\\.sleep\\s*\\('`
- **python(机械 Python 兜底)**:需跨行/AST 逻辑,且是 Java(JSP 不支持)→ `rule.yaml` + `checker.py`(继承 `BaseChecker``CATEGORIES` 用新类别)
3.`rules/_staging/<rule-slug>/` 下生成 `rule.yaml`(必要时含 `checker.py``sample.<java|jsp>``negative.<java|jsp>`)。
4. 依次执行(在项目根目录;退出码 0=OK / 1=失败,失败先修正再重试,**不要**强制跳过):
```
python tools/rulegen.py validate rules/_staging/<rule-slug>
python tools/rulegen.py smoke rules/_staging/<rule-slug> # 语义规则跳过
python tools/rulegen.py register rules/_staging/<rule-slug> --dry-run
python tools/rulegen.py register rules/_staging/<rule-slug>
```
5. 注册完成后向用户报告:规则 ID 与类型、落盘文件(`rules/custom/<lang>-rules.yaml`python 类另含 `check-engine/custom_checkers/`)、校验/冒烟摘要。
## 纪律
- **不修改** `rules/java-rules.yaml` / `rules/jsp-rules.yaml` / `rules/messages.yaml` 等交付文件;只写 `rules/custom/` 与 `check-engine/custom_checkers/`。
- ID 编号写 `-001` 即可,`register` 会自动重编号。
- 生成后不做 git 提交。