代码
格式化和审查InterSystems IRIS/Cache ObjectScript代码,自动修正命名、注释、锁、事务及代码风格规范问题。
天轰穿
@thcjp
Install
$ openclaw skills install @thcjp/iris-formatter-freeiris-code-formatter
功能能力
1. 变量命名规范
1.1 基本原则
- 禁止使用
$、#等特殊符号开始或结束 - 严禁拼音与英文混合,不允许直接使用中文
- 参数名、成员变量、局部变量统一使用
lowerCamelCase - 常量命名全部大写
- 杜绝不规范缩写,长度为7个以内单词不需要缩写
- 避免无意义变量(如a, b, c)
1.2 Global命名
- 临时global:对于临时Global,命名规范以^CacheTemp开头
^CacheTemp*,不允许有其它的命名。旧命名方式以^TEMP*、^Temp*、^temp*、^TMP*、^Tmp*、^tmp*、开头的均不合法. - 进程global:
^||TMP,节点必须携带pid
1.3 特殊变量
- 布尔变量不要用
is开头,使用Flag后缀(如dispFlag) - 引用global数据的变量用
表ID + Data方式(如bisData) - 分割字符串索引统一用
i,长度用len - 私有对象加
m前缀(如mExecute) - 禁止使用系统保留字或SQL保留字(如
SQLCODE) - 调用其他方法返回值用
ret,禁止使用err - 变量不超过31个字符
- 百分比变量以
%z开头 .inc文件通用变量加前缀标识
2. 方法命名规范
2.1 基本规则
- 类名、方法名使用
UpperCamelCase - 返回布尔类型方法以
Is开头,加As %Boolean,正向描述(存在返回$$$YES) - 推荐使用动宾结构(Get, Set, Query等)
- 函数/方法名最长不超过30个字符
- 查询统一用
Query,获取数据用Get
2.2 方法组织
- 一个方法控制在50行以内
- 方法内传递参数过多时考虑用对象方式重构
- 禁止在循环里直接写SQL语句(
&sql()),SQL语句应当单独建立类来保存 - 非普通字符串的入参或返回值需要声明类型(数组、对象、流、%Status等)
错误处理
- 返回值不能单纯返回负数
- 字符串形式:
负数^错误信息 - JSON形式:
..RetFail("错误信息") - %Status形式:
$$$ERROR($$$GeneralError,"错误信息")
3. 锁规范
- 禁止直接锁表结构的Global
- 加解锁必须加
+、-严格控制,必须成对出现 - 加锁必须带
+,否则导致解锁进程内所有锁 - 加锁必须写超时退出(如
:3),避免死锁 - 自定义功能锁格式:
^产品组代码(产品线,规范代码:唯一标识) - 私有进程全局变量名不能用作锁名
- 禁止单独使用无参数锁
- 使用锁时一定要下标节点
4. 事务规范
- 严格禁止开放性事务(必须有tc或tro)
- 事务
ts、tc、tro位置保持近距离,在一屏幕范围内 - 严格禁止跨方法提交事务
- 事务命令简写并且小写(
ts、tc、tro) - 同一个方法内不应该出现事务嵌套
- 事务应在保存程序的最外层
- 单条SQL语句的数据保存不需要事务
ts、tc首尾添加空行或注释
5. 陷阱规范
- 严格禁止陷阱内部报错导致死进程
Not ProcedureBlock类陷阱名称统一为Err + 方法名- 默认类陷阱名称统一为
Error - 通用陷阱写法:
- 设置
$zt = ""避免死循环 $tl > 0时执行tro避免开放性事务- 执行
lock避免开放锁
- 设置
6.1 基本格式
- 方法大括号一律换行显示
- 运算符(
=、+、-、*、/、_、:)左右加空格 - 逗号后加空格
- 方法内命令行采用一个Tab缩进(4空格宽度)
- 禁止命令大小写混用,统一小写
- 系统命令使用缩写(除
for、while外) - 系统函数使用缩写(
$e,$p,$l,$o等)
6.2 SQL格式
- SQL语句一行5个字段
- 换行后3个Tab缩进
- 逗号在行末,不带入下行
- 每行不超过120字符
- SQL命令全部统一小写
6.3 字符串格式
- 单行字符串拼写最多5个字段
- 禁止用同一变量后加数字累加
- 获取多返回值用
%ArrayOfDataTypes或JSON,不建议字符串拼接
6.4 命令与函数缩写规范
系统命令缩写规则:
for、while、if、elseif、else、continue命令使用全拼(语义明确,表示循环结构)- 其他系统命令使用缩写形式
| 错误场景 | 缩写 | 处理方式 |
|---|---|---|
| set | s | 赋值 |
| do | d | 执行 |
| quit | q | 退出/返回 |
| break | b | 跳出循环 |
| kill | k | 删除变量 |
| new | n | 新建变量 |
| write | w | 输出 |
| read | r | 读取 |
| tstart | ts | 事务开始 |
| tcommit | tc | 事务提交 |
| trollback | tro | 事务回滚 |
| lock | l | 加锁 |
| open | o | 打开设备 |
| close | c | 关闭设备 |
| use | u | 使用设备 |
| hang | h | 暂停 |
| job | j | 启动作业 |
| merge | m | 合并 |
系统函数缩写规则:
- 所有系统函数使用缩写形式
| 全拼 | 缩写 | 说明 |
|---|---|---|
| $extract | $e | 提取子串 |
| $piece | $p | 按分隔符提取 |
| $length | $l | 获取长度 |
| $order | $o | 遍历global |
| $get | $g | 安全获取值 |
| $data | $d | 判断变量是否存在 |
| $find | $f | 查找子串 |
| $ascii | $a | 获取ASCII码 |
| $char | $c | ASCII转字符 |
| $translate | $tr | 字符替换 |
| $justify | $j | 格式化对齐 |
| $zboolean | $zb | 位运算 |
| $zconvert | $zcvt | 编码转换 |
| $zhex | $zh | 十六进制转换 |
| $zdate | $zd | 日期格式化 |
| $ztime | $zt | 时间格式化 |
| $ztimestamp | $zts | 时间戳 |
| $increment | $i | 自增 |
| $random | $r | 随机数 |
| $stack | $st | 堆栈信息 |
6.5 控制结构
- 尽量使用对仗词(add/remove, get/set等)
- 禁止
{}和.同时出现,推荐使用块级语法 - 所有
if语句都要换行写 if嵌套不宜过多,建议不超过3层- 多级
if else考虑用$case替换 - 与或逻辑运算统一使用
&&、|| - 块级语法命令要全拼(
for、while而非f、w) - 后置表达式要加括号,等号两侧加空格
- 多条件后置表达式(如
continue:q:后的条件):括号内部的条件运算符两侧加空格,括号与&&/||之间不加空格。例如:- 正确:
q:(inci = "")&&(arcim = "")&&(phcdf = "")- 括号内=两侧有空格,括号与&&之间无空格 - 错误:
q:(inci = "") && (arcim = "") && (phcdf = "")- 括号与&&之间有空格,会导致编译错误
- 正确:
} else {不换行,写在同一行
7. 空行规范
- 方法与方法之间空行隔断(1个空行)
- 空行分割功能相似、逻辑内容相近的代码片段
- 空行之前添加行注释
#; 规则 - 事务首尾一定要加空行或注释
8.1 注释格式
- 单行注释用
#;,句尾注释用// - 类、方法头注释用
/// - 各类注释后应跟空格
8.2 注释原则
- 避免无意义注释,用规范代码命名描述
- 简明扼要,不要啰嗦
- 避免错误注释误导
8.3 类注释
objectscript
/// desc: 类用途描述
/// author:姓名全拼
/// date:<DATE>
Class 详情见说明.详情见说明
8.4 方法注释
objectscript
/// desc: 方法描述
/// /// createDate: <DATE>
/// params: 参数说明
/// return: 返回值说明
/// version: 版本
/// modify: 修改记录
/// debug: 调试方法
典型场景
| 场景 | 输入 | 输出 |
|---|---|---|
| 基础使用 | 用户请求 | 处理结果 |
不适用于:需要人工判断的复杂决策场景
使用说明
代码审查流程
执行以下步骤审查和修正代码:
- 读取代码:获取用户提供的ObjectScript代码
- 逐条检查:按照上述规范逐项检查
- 标记问题:识别不符合规范的代码位置
- 提供修正:给出符合规范的修正版本
- 说明原因:解释每项修正的依据
- 输出完整代码:必须输出完整的修正后代码,包含所有类定义、方法、注释,不得省略任何部分
关键修正规则(强制执行)
1. 后置表达式处理(关键!)
多条件后置表达式必须严格遵守以下格式:
; 正确格式 - 括号内运算符两侧加空格,括号与&&之间不加空格
continue:(hospId '= "")&&(hospId '= ($p(^CTLOC(locId),"^",22)))
q:(inci = "")&&(arcim = "")&&(phcdf = "")
# ...
; 错误格式 - 会导致IRIS编译错误
continue:(hospId '= "") && (hospId '= ($p(^CTLOC(locId),"^",22)))
q:(inci = "") && (arcim = "") && (phcdf = "")
修正逻辑:
- 识别后置表达式(
q:continue:b:等命令后的条件) - 确保每个条件用括号包裹:
(条件) - 括号内运算符两侧加空格:
(a = "")(b <= 0) - 括号与
&&/||之间绝对不能加空格:)&&(不是) && ( - 这是IRIS编译器的硬性要求,必须严格遵守
2. 命令缩写规则
for、while、if、elseif、else、continue使用全拼- 其他命令使用缩写:
s/d/q/b/k/n/w/r/ts/tc/tro/l/o/u/h/j/m
3. 系统函数缩写
使用缩写形式:$e/$p/$l/$o/$g/$d/$a/$c/$tr/$j/$zb/$zcvt/$zh
输出格式
审查结果应包含:
# ...
## 输入定义
# ...
| 参数名 | 类型 | 必填 | 说明 |
|:------|------:|:------|:------|
| content | string | 否 | iris-code-formatter处理的内容输入 |, 默认: 全部维度 |
| strict_level | string | 否 | 审查严格度, 可选: strict/normal/loose, 默认: normal |
# ...
## 输出格式(补充)
# ...
```json
{
"success": true,
"data": {
"overall_grade": "A",
"total_score": 92,
"max_score": 100,
"summary": "处理完成",
"details": [
{
"item": "代码风格",
"status": "pass",
"score": 95,
"comment": "符合规范"
},
{
"item": "安全合规",
"status": "warn",
"score": 80,
"comment": "符合规范"
}
],
"improvements": [
{
"priority": "high",
"suggestion": "建议优化",
"expected_gain": "+5分"
},
{
"priority": "medium",
"suggestion": "建议优化",
"expected_gain": "+3分"
}
]
},
"error": null
}
...
错误处理(补充)
| 错误场景 | 原因 | 处理方式 |
|---|---|---|
| 待审查内容为空 | 用户未提供内容 | 提示用户提供待审查的代码 |
| 内容格式不识别 | 传入不支持的内容格式 | 列出支持的格式, 建议转换后重试 |
| 检查项超出范围 | 传入了不存在的检查维度 | 列出可用检查维度, 使用默认全部检查 |
| 审查超时 | 内容过长导致处理超时 | 建议分段审查, 每段不超过5000字 |
| 其他异常 | 内部处理异常 | 检查输入后重试 |
...
环境要求
...
运行环境
- Agent平台: 支持SKILL.md的任意AI Agent(Claude Code / Cursor / Codex / Gemini CLI等)
- 操作系统: Windows / macOS / Linux
...
依赖说明(补充)
| 依赖项 | 类型 | 是否必需 | 获取方式 |
|---|---|---|---|
| LLM API | API | 必需 | 由Agent内置LLM提供 |
...
API Key 配置
...
可用性分类
- 分类: MD+execute()
- 说明: 基于Markdown的AI Skill,
...
...
API Key配置方式:
export API_KEY="${API_KEY:?请设置环境变量}"
配置后需重启会话或开启新终端生效。API Key应妥善保管,避免泄露到版本控制系统.
案例展示
...
示例1:基础用法
...
### 代码审查流程(补充)
### 关键修正规则(强制执行)(补充)
### 1. 后置表达式处理(关键!)(补充)
; 正确格式 - 括号内运算符两侧加空格,括号与&&之间不加空格 continue:(hospId '= "")&&(hospId '= ($p(^CTLOC(locId),"^",22))) q:(inci = "")&&(arcim = "")&&(phcdf = "")
...
; 错误格式 - 会导致IRIS编译错误 continue:(hospId '= "") && (hospId '= ($p(^CTLOC(
## 创新亮点
### 效率提升量化分析
| 操作步骤 | 手动耗时 | 自动化耗时 | 时间节约 | 准确率提升 |
|---|---|---|---|---|
| 代码格式化 | 30分钟/次 | 5分钟/次 | 25分钟/次 | 100% |
| 代码审查 | 1小时/次 | 20分钟/次 | 40分钟/次 | 95% |
| 代码修正 | 30分钟/次 | 10分钟/次 | 20分钟/次 | 100% |
| 代码质量评分 | 1小时/次 | 30分钟/次 | 30分钟/次 | 90% |
| 依赖缺陷检测 | 1小时/次 | 15分钟/次 | 45分钟/次 | 100% |
### 差异化对比
| 对比维度 | 本技能 | 手动操作 | Python脚本 | 专业软件 |
|---|---|---|---|---|
| 代码格式化 | 自动化,高效,支持多种规范 | 低效,耗时,易出错 | 自动化,但需编写脚本 | 自动化,功能强大,但成本高 |
| 代码审查 | 高效,准确,支持批量处理 | 低效,主观性强,易遗漏 | 自动化,但需编写脚本 | 自动化,功能强大,但成本高 |
| 代码修正 | 自动化,准确,支持批量处理 | 低效,主观性强,易出错 | 自动化,但需编写脚本 | 自动化,功能强大,但成本高 |
| 代码质量评分 | 高效,准确,支持多种规范 | 低效,主观性强,易出错 | 自动化,但需编写脚本 | 自动化,功能强大,但成本高 |
| 依赖缺陷检测 | 自动化,高效,支持多种规范 | 低效,耗时,易出错 | 自动化,但需编写脚本 | 自动化,功能强大,但成本高 |
### 核心痛点解决
| 痛点 | 描述 | 影响范围 | 解决方案 | 量化效果 |
|---|---|---|---|---|
| 代码格式不统一 | 代码可读性差,维护困难 | 整个项目 | 提供自动格式化工具,统一代码格式 | 代码可读性提升20%,维护效率提高15% |
| 代码审查效率低 | 代码审查周期长,易出错 | 整个项目 | 提供自动化审查工具,提高审查效率 | 审查周期缩短30%,错误率降低20% |
| 代码质量难以保证 | 代码质量参差不齐,影响项目稳定性 | 整个项目 | 提供代码质量评分工具,实时监控代码质量 | 代码质量提升15%,项目稳定性提高10% |
## 常见问题FAQ
### Q1: iris-code-formatter支持哪些编程语言?
A: iris-code-formatter主要支持InterSystems IRIS/Cache ObjectScript编程语言。
### Q2: 如何使用iris-code-formatter进行代码格式化?
A: 使用iris-code-formatter进行代码格式化,首先需要安装该工具,然后通过命令行或集成开发环境调用其格式化功能。
### Q3: iris-code-formatter如何进行代码审查?
A: iris-code-formatter提供代码审查功能,可以自动检查代码是否符合规范,并生成审查报告。
### Q4: iris-code-formatter如何进行代码修正?
A: iris-code-formatter提供代码修正功能,可以自动修正不符合规范的代码。
### Q5: iris-code-formatter如何进行代码质量评分?
A: iris-code-formatter提供代码质量评分功能,可以根据预设的规范对代码进行评分,评估代码质量。
## 问题处理指引
| 错误现象 | 可能原因 | 诊断步骤 | 解决方案 |
|---|---|---|---|
| 格式化失败 | 代码不规范 | 检查代码是否符合规范 | 修正代码,重新格式化 |
| 审查报告错误 | 审查规则配置错误 | 检查审查规则配置 | 修正审查规则,重新审查 |
| 修正失败 | 修正规则配置错误 | 检查修正规则配置 | 修正修正规则,重新修正 |
| 代码质量评分错误 | 评分规则配置错误 | 检查评分规则配置 | 修正评分规则,重新评分 |
| 依赖缺陷检测失败 | 漏洞数据库更新不及时 | 检查漏洞数据库更新 | 更新漏洞数据库,重新检测 |
## 安全指导原则
1. 确保iris-code-formatter运行在安全的网络环境中,避免数据泄露。
2. 定期更新iris-code-formatter,确保其安全性。
3. 限制iris-code-formatter的使用权限,防止未授权访问。
4. 对iris-code-formatter进行备份,防止数据丢失。
5. 避免将iris-code-formatter用于敏感代码的格式化、审查和修正。
### 安全风险防范
| 风险项 | 等级 | 防护措施 | 验证方法 |
| --- | --- | --- | --- |
| API密钥泄露 | 高 | 通过环境变量配置,禁止硬编码 | 定期检查代码和配置文件 |
| 命令执行风险 | 高 | 仅执行白名单命令,避免拼接用户输入 | 使用沙箱环境测试 |
| 网络通信安全 | 中 | 使用HTTPS协议,验证SSL证书 | 定期检查证书有效期 |
| 敏感数据暴露 | 高 | 输出结果中不包含密钥、令牌等敏感信息 | 日志脱敏审查 |
| 未授权访问 | 中 | 限制访问权限,实施认证机制 | 定期审计访问日志 |
Top skills in this category
Skill Vetter
@spclaudehomeSecurity-first skill vetting for AI agents. Use before installing any skill from ClawdHub, GitHub, or other sources. Checks for red flags, permission scope, and suspicious patterns.
Github
@steipeteInteract with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Humanizer
@biostartechnologyRemove signs of AI-generated writing from text. Use when editing or reviewing text to make it sound more natural and human-written. Based on Wikipedia's comprehensive "Signs of AI writing" guide. Detects and fixes patterns including: inflated symbolism, promotional language, superficial -ing analyses, vague attributions, em dash overuse, rule of three, AI vocabulary words, negative parallelisms, and excessive conjunctive phrases.
Free Ride - Unlimited free AI
@shaivpidadiManages free AI models from OpenRouter for OpenClaw. Automatically ranks models by quality, configures fallbacks for rate-limit handling, and updates opencla...
Elite Longterm Memory
@nextfrontierbuildsUltimate AI agent memory system for Cursor, Claude, ChatGPT & Copilot. WAL protocol + vector search + git-notes + cloud backup. Never lose context again. Vibe-coding ready.