41 lines
2.2 KiB
Markdown
41 lines
2.2 KiB
Markdown
---
|
||
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 提交。
|