Files
sap-cli-skill/.claude/rules/abap-coding-rules.md
T
吴让宇 c5905a5b1e refactor: 本仓升为唯一源(原 sap-cli 源码仓归档)
方向反转:此前 SKILL.md 是「模板渲染产物」、sap-cli 是源;现 sap-cli 归档,
sap-cli-skill 承接开发与分发,SKILL.md 回归手工维护的正本。

迁移(来自 sap-cli,共 104 文件):
- tests/           692 例测试(15 个文件的内联 sys.path 改指 assets/)
- openspec/        SDD 规格与归档变更(42 文件)
- docs/            开发文档与 ADT 原理(含 dev/CLAUDE.md、AGENTS.md)
- .claude/         rules 副本 + settings.json(供 Claude Code)
- .github/ .hermes/ .pre-commit-config.yaml .editorconfig CLAUDE.md
- scripts/ 保持仅 setup.py(pack_skill.py 已随旧仓归档,不迁)

修复(迁移暴露的真实缺陷):
- assets/pyproject.toml 的 build-backend 写作 `setuptools.backends._legacy:_Backend`,
  该模块在 setuptools 中不存在 → `pip install -e` 从来装不上。改为 build_meta。
  实测:临时 venv 安装成功,sap-cli --help 正常列出 31 个命令
- pyproject readme 指向不存在的 assets/README.md(editable 安装会失败)→ 改内联文本
- pyproject urls 改指 sap-cli-skill

机制调整:
- .github/workflows/ci.yml 适配 assets/ 布局;顶部注明该工作流仅 GitHub 执行,
  本仓在 Gitee 不会自动跑
- pre-commit 增本地测试门禁(Gitee 上真正生效的那道)
- .gitignore 合并旧仓完整规则(保留 log/ 下 md 知识库入库,只忽略运行日志)
- 大文件上限 100KB→1MB(架构图 512KB)

守卫测试 tests/unit/test_repo_guards.py(10 → 18 例):
- SKILL.md 须记录 parser 全部 CLI 命令 / 铁律 1-5 须为真实小节标题 / 示例不得违反铁律 5
- references/ 规则齐备;.claude/rules 与 references 必须一致(实测抓到一次真实漂移)
- VERSION == sapcli.__version__ == README 版本
- 仓内不得再出现 pack_skill.py / skill-src(防废弃流程回潮)

698 tests OK;editable 安装与 CLI 入口经临时 venv 实测通过。
docs/RELEASING.md 重写为单源开发流程。
2026-09-11 00:40:15 +08:00

6.0 KiB
Raw Blame History

ABAP 编码规则(质检标准)

维护者:Rangyu | 版本:v1.0 | 2026-08-05

本规则文档由 Rangyu(老板)维护,质检员在代码审计时以此文档为唯一标准。 质检结果分为:合规 / 违规(必须修复) / ⚠️建议(推荐修复)


1. 安全规则(Security

ID 规则 判定 示例
S01 生产代码中禁止硬断点BREAK-POINT 违反 BREAK-POINT. → 删除
S02 关键数据访问前必须 AUTHORITY-CHECK 违反 聊天记录读取、配置维护、表维护
S03 SQL 注入防护:所有变量必须用 @ 转义 合规 WHERE field = @lv_var
S04 敏感数据(聊天内容、用户信息)需脱敏或审计 ⚠️建议 zidt_chatlog message_body 字段
S05
S06
S07

(Rangyu 补充更多安全规则...)


2. 性能规则(Performance

ID 规则 判定 示例
P01 禁止 SELECT *,仅查询所需字段 ⚠️建议 SELECT field1, field2 FROM ...
P02 禁止无 WHERE 条件的全表扫描(小配置表除外) ⚠️建议 SELECT ... FROM ztable WHERE ...
P03 大表查询必须有索引支撑 ⚠️建议 SE11 检查索引
P04 循环内禁止 SQL 查询 违反 LOOP 内 SELECT
P05 循环字符串拼接用 CONCATENATE 单次操作 ⚠️建议 避免 LOOP 内 &&
P06
P07

(Rangyu 补充更多性能规则...)


3. 可维护性规则(Maintainability

ID 规则 判定 示例
M01 重复代码超过 80% 相似 → 提取公共方法/FORM 违反 3处 AI 调用重复约 90%
M02 每个 FORM/方法不超过 200 行 ⚠️建议
M03 禁止裸硬编码字符串(模型名、GUI状态、事务码) ⚠️建议 用常量 CONSTANTS c_model TYPE ... VALUE 'qwq-32b'
M04 关键逻辑必须有注释 ⚠️建议
M05 无用变量/死代码必须清理 ⚠️建议 gs_tool-END 赋值未消费
M06
M07

(Rangyu 补充更多可维护性规则...)


4. 错误处理规则(Error Handling

ID 规则 判定 示例
E01 sy-subrc <> 0不能静默处理 违反 IF sy-subrc <> 0. " 错误处理 ENDIF. → 必须 MESSAGE/EXIT
E02 API 调用必须有异常保护(CATCH) ⚠️建议 HTTP 调用、RFC 调用
E03 数据库操作必须有错误处理 ⚠️建议 COMMIT/ROLLBACK
E04 CALL FUNCTION 前必须核实被调对象真实存在:ADT 通道无法校验被调函数与引用结构是否存在(syntax-check 只覆盖当前对象自身),凡调用 CALL FUNCTION 'Z...' 或引用 Z... 结构/表类型,必须先用 sap-cli(info/download/read-table DD02L 任一)确认对象存在且名称逐字符一致,再落代码 违反 凭记忆写 CALL FUNCTION 'ZMM_BIP_CREATE'(实际对象是 ZMM_BIP_VENDOR_CREATE)→ 编译期不报错、运行期 CALL_FUNCTION_NOT_FOUND 转储。正确:先 sap-cli info --name 组名/函数名 --type function 查实,再写调用
E05 CALL FUNCTION 的参数结构必须与被调函数真实签名一致IMPORTING/EXPORTING/CHANGING/TABLES 各参数名、类型、顺序以核实到的函数签名为准(info 输出或 download 函数源码的 Interface 节),不得按猜测拼参数;引用的 DDIC 结构(如 TYPE zmm_bip_001_in)须同批核实结构存在且组件名/类型一致 违反 CALL FUNCTION 'X' EXPORTING iv_a = lv 但实际签名参数是 IS_IMPORT → 运行期 PARAMETER_NOT_FOUND/类型不匹配转储。正确:以 download 拿到函数头 `"*" Local Interface: 注释节为准逐参数比对,结构组件以 DD02L/DD03L 实查为准

(Rangyu 补充更多错误处理规则...)

E04/E05 背景(2026-09-10 老板指令):远程语法检查不校验被调函数的存在性与签名匹配——本地语法全绿 ≠ 运行期不转储。开发报表/程序中所有 CALL FUNCTION(尤其调用本组外/客户化 Z 对象)一律先核实后调用,核实记录(对象存在性 + 签名比对)纳入交付物。


5. NW 7.40 兼容规则(7.40 Compatibility

ID 规则 判定 示例
C01 禁止 DATA(...) inline 声明 违反 DATA(lv_x) = ...DATA lv_x TYPE ...
C02 Open SQL @ 转义全局一致 违反 不能混用 @lvlv
C03 禁止字符串模板 |...| 违反 CONCATENATE 代替
C04 禁止 WITH EMPTY KEY 违反 WITH DEFAULT KEY
C05 LOOP AT SCREEN 逻辑避免重复 ⚠️建议 提取公共 FORM
C06
C07

Rangyu 补充更多 7.40 兼容规则...)


6. 代码风格规则(Style

ID 规则 判定 示例
T01 命名遵循 SAP 规范(Z开头自定义) 合规 ZIDTR_AI_ASSISTANT
T02 变量命名语义化 ⚠️建议 lv_date 优于 lv_d
T03 注释语言统一(中/英) ⚠️建议
T04
T05

(Rangyu 补充更多风格规则...)


附录:今天质检发现的典型违规

程序 问题 规则ID 行号
ZIDTR_AI_ASSISTANT 生产代码 BREAK-POINT S01 L44
ZIDTR_AI_ASSISTANT 权限检查缺失 S02 全文
ZIDTR_AI_ASSISTANT 3处代码重复~90% M01 L464-667
ZIDTR_AI_ASSISTANT 硬编码模型名 M03 L207
ZIDTR_AI_ASSISTANT F4错误静默处理 E01 L170-172
ZIDTR_AI_ASSISTANT DATA(...) inline C01 L152等6处
ZIDTR_AI_ASSISTANT @转义混用 C02 L154/259

使用方式:质检员读取本文件 → 逐条对照代码 → 输出 ✅/❌/⚠️ 审计报告。

维护方式:Rangyu 随时增删规则,更新后通知小迅同步到质检员的审查标准。