iris-code-formatter
/install iris-code-formatter
\r \r
IRIS 代码格式化规范\r
\r
概述\r
\r 本技能基于作者总结的IRIS代码规范,提供ObjectScript代码的格式化、审查和修正能力。涵盖变量命名、方法命名、锁、事务、陷阱、格式、空行、注释等多个维度,确保代码风格统一、可读性强、维护性高。\r \r
该技能的作者: 姚鑫 \r 作者邮箱: [email protected]\r \r
触发条件\r
\r 当用户提出以下请求时激活此技能:\r
- "格式化这段IRIS代码"\r
- "检查这段代码是否符合规范"\r
- "审查ObjectScript代码"\r
- "修正代码风格问题"\r
- "按照IRIS规范格式化"\r
- 任何涉及IRIS/Cache/ObjectScript代码格式化的需求\r \r
核心能力\r
\r
1. 变量命名规范\r
\r
1.1 基本原则\r
- 禁止使用
$、#等特殊符号开始或结束\r - 严禁拼音与英文混合,不允许直接使用中文\r
- 参数名、成员变量、局部变量统一使用
lowerCamelCase\r - 常量命名全部大写\r
- 杜绝不规范缩写,长度为7个以内单词不需要缩写\r
- 避免无意义变量(如a, b, c)\r \r
1.2 Global命名\r
- 临时global:对于临时Global,命名规范以^CacheTemp开头
^CacheTemp*,不允许有其它的命名。旧命名方式以^TEMP*、^Temp*、^temp*、^TMP*、^Tmp*、^tmp*、开头的均不合法。\r - 进程global:
^||TMP,节点必须携带pid\r \r
1.3 特殊变量\r
- 布尔变量不要用
is开头,使用Flag后缀(如dispFlag)\r - 引用global数据的变量用
表ID + Data方式(如bisData)\r - 分割字符串索引统一用
i,长度用len\r - 私有对象加
m前缀(如mExecute)\r - 禁止使用系统保留字或SQL保留字(如
SQLCODE)\r - 调用其他方法返回值用
ret,禁止使用err\r - 变量不超过31个字符\r
- 百分比变量以
%z开头\r .inc文件通用变量加前缀标识\r \r
2. 方法命名规范\r
\r
2.1 基本规则\r
- 类名、方法名使用
UpperCamelCase\r - 返回布尔类型方法以
Is开头,加As %Boolean,正向描述(存在返回$$$YES)\r - 推荐使用动宾结构(Get, Set, Query等)\r
- 函数/方法名最长不超过30个字符\r
- 查询统一用
Query,获取数据用Get\r \r
2.2 方法组织\r
- 一个方法控制在50行以内\r
- 方法内传递参数过多时考虑用对象方式重构\r
- 禁止在循环里直接写SQL语句(
&sql()),SQL语句应当单独建立类来保存\r - 非普通字符串的入参或返回值需要声明类型(数组、对象、流、%Status等)\r \r
2.3 错误处理\r
- 返回值不能单纯返回负数\r
- 字符串形式:
负数^错误信息\r - JSON形式:
..RetFail("错误信息")\r - %Status形式:
$$$ERROR($$$GeneralError,"错误信息")\r \r
3. 锁规范\r
\r
- 禁止直接锁表结构的Global\r
- 加解锁必须加
+、-严格控制,必须成对出现\r - 加锁必须带
+,否则导致解锁进程内所有锁\r - 加锁必须写超时退出(如
:3),避免死锁\r - 自定义功能锁格式:
^产品组代码(产品线,规范代码:唯一标识)\r - 私有进程全局变量名不能用作锁名\r
- 禁止单独使用无参数锁\r
- 使用锁时一定要下标节点\r \r
4. 事务规范\r
\r
- 严格禁止开放性事务(必须有tc或tro)\r
- 事务
ts、tc、tro位置保持近距离,在一屏幕范围内\r - 严格禁止跨方法提交事务\r
- 事务命令简写并且小写(
ts、tc、tro)\r - 同一个方法内不应该出现事务嵌套\r
- 事务应在保存程序的最外层\r
- 单条SQL语句的数据保存不需要事务\r
ts、tc首尾添加空行或注释\r \r
5. 陷阱规范\r
\r
- 严格禁止陷阱内部报错导致死进程\r
Not ProcedureBlock类陷阱名称统一为Err + 方法名\r- 默认类陷阱名称统一为
Error\r - 通用陷阱写法:\r
- 设置
$zt = ""避免死循环\r $tl > 0时执行tro避免开放性事务\r- 执行
lock避免开放锁\r \r
- 设置
6. 格式规范\r
\r
6.1 基本格式\r
- 方法大括号一律换行显示\r
- 运算符(
=、+、-、*、/、_、:)左右加空格\r - 逗号后加空格\r
- 方法内命令行采用一个Tab缩进(4空格宽度)\r
- 禁止命令大小写混用,统一小写\r
- 系统命令使用缩写(除
for、while外)\r - 系统函数使用缩写(
$e,$p,$l,$o等)\r \r
6.2 SQL格式\r
- SQL语句一行5个字段\r
- 换行后3个Tab缩进\r
- 逗号在行末,不带入下行\r
- 每行不超过120字符\r
- SQL命令全部统一小写\r \r
6.3 字符串格式\r
- 单行字符串拼写最多5个字段\r
- 禁止用同一变量后加数字累加\r
- 获取多返回值用
%ArrayOfDataTypes或JSON,不建议字符串拼接\r \r
6.4 命令与函数缩写规范\r
\r 系统命令缩写规则:\r
for、while、if、elseif、else、continue命令使用全拼(语义明确,表示循环结构)\r- 其他系统命令使用缩写形式\r \r | 全拼 | 缩写 | 说明 |\r |------|------|------|\r | set | s | 赋值 |\r | do | d | 执行 |\r | quit | q | 退出/返回 |\r | break | b | 跳出循环 |\r | kill | k | 删除变量 |\r | new | n | 新建变量 |\r | write | w | 输出 |\r | read | r | 读取 |\r | tstart | ts | 事务开始 |\r | tcommit | tc | 事务提交 |\r | trollback | tro | 事务回滚 |\r | lock | l | 加锁 |\r | open | o | 打开设备 |\r | close | c | 关闭设备 |\r | use | u | 使用设备 |\r | hang | h | 暂停 |\r | job | j | 启动作业 |\r | merge | m | 合并 |\r \r 系统函数缩写规则:\r
- 所有系统函数使用缩写形式\r \r | 全拼 | 缩写 | 说明 |\r |------|------|------|\r | $extract | $e | 提取子串 |\r | $piece | $p | 按分隔符提取 |\r | $length | $l | 获取长度 |\r | $order | $o | 遍历global |\r | $get | $g | 安全获取值 |\r | $data | $d | 判断变量是否存在 |\r | $find | $f | 查找子串 |\r | $ascii | $a | 获取ASCII码 |\r | $char | $c | ASCII转字符 |\r | $translate | $tr | 字符替换 |\r | $justify | $j | 格式化对齐 |\r | $zboolean | $zb | 位运算 |\r | $zconvert | $zcvt | 编码转换 |\r | $zhex | $zh | 十六进制转换 |\r | $zdate | $zd | 日期格式化 |\r | $ztime | $zt | 时间格式化 |\r | $ztimestamp | $zts | 时间戳 |\r | $increment | $i | 自增 |\r | $random | $r | 随机数 |\r | $stack | $st | 堆栈信息 |\r \r
6.5 控制结构\r
- 尽量使用对仗词(add/remove, get/set等)\r
- 禁止
{}和.同时出现,推荐使用块级语法\r - 所有
if语句都要换行写\r if嵌套不宜过多,建议不超过3层\r- 多级
if else考虑用$case替换\r - 与或逻辑运算统一使用
&&、||\r - 块级语法命令要全拼(
for、while而非f、w)\r - 后置表达式要加括号,等号两侧加空格\r
- 多条件后置表达式(如
continue:q:后的条件):括号内部的条件运算符两侧加空格,括号与&&/||之间不加空格。例如:\r- 正确:
q:(inci = "")&&(arcim = "")&&(phcdf = "")- 括号内=两侧有空格,括号与&&之间无空格\r - 错误:
q:(inci = "") && (arcim = "") && (phcdf = "")- 括号与&&之间有空格,会导致编译错误\r
- 正确:
} else {不换行,写在同一行\r \r
7. 空行规范\r
\r
- 方法与方法之间空行隔断(1个空行)\r
- 空行分割功能相似、逻辑内容相近的代码片段\r
- 空行之前添加行注释
#; 规则\r - 事务首尾一定要加空行或注释\r \r
8. 注释规范\r
\r
8.1 注释格式\r
- 单行注释用
#;,句尾注释用//\r - 类、方法头注释用
///\r - 各类注释后应跟空格\r \r
8.2 注释原则\r
- 避免无意义注释,用规范代码命名描述\r
- 简明扼要,不要啰嗦\r
- 避免错误注释误导\r \r
8.3 类注释\r
/// desc: 类用途描述\r
/// author:姓名全拼\r
/// date:YYYY-MM-DD\r
Class XXX.XXX\r
```\r
\r
#### 8.4 方法注释\r
```objectscript\r
/// desc: 方法描述\r
/// author: 姓名\r
/// createDate: YYYY-MM-DD\r
/// params: 参数说明\r
/// return: 返回值说明\r
/// version: 版本\r
/// modify: 修改记录\r
/// debug: 调试方法\r
```\r
\r
## 使用方法\r
\r
### 代码审查流程\r
\r
执行以下步骤审查和修正代码:\r
\r
1. **读取代码**:获取用户提供的ObjectScript代码\r
2. **逐条检查**:按照上述规范逐项检查\r
3. **标记问题**:识别不符合规范的代码位置\r
4. **提供修正**:给出符合规范的修正版本\r
5. **说明原因**:解释每项修正的依据\r
6. **输出完整代码**:**必须**输出完整的修正后代码,包含所有类定义、方法、注释,不得省略任何部分\r
\r
### 关键修正规则(强制执行)\r
\r
#### 1. 后置表达式处理(关键!)\r
\r
多条件后置表达式必须严格遵守以下格式:\r
\r
```objectscript\r
; 正确格式 - 括号内运算符两侧加空格,括号与&&之间不加空格\r
continue:(hospId '= "")&&(hospId '= ($p(^CTLOC(locId),"^",22)))\r
q:(inci = "")&&(arcim = "")&&(phcdf = "")\r
\r
; 错误格式 - 会导致IRIS编译错误\r
continue:(hospId '= "") && (hospId '= ($p(^CTLOC(locId),"^",22)))\r
q:(inci = "") && (arcim = "") && (phcdf = "")\r
```\r
\r
**修正逻辑:**\r
- 识别后置表达式(`q:` `continue:` `b:` 等命令后的条件)\r
- 确保每个条件用括号包裹:`(条件)`\r
- 括号内运算符两侧加空格:`(a = "")` `(b \x3C= 0)`\r
- 括号与`&&`/`||`之间**绝对不能**加空格:`)&&(` 不是 `) && (`\r
- 这是IRIS编译器的硬性要求,必须严格遵守\r
\r
#### 2. 命令缩写规则\r
\r
- `for`、`while`、`if`、`elseif`、`else`、`continue` 使用全拼\r
- 其他命令使用缩写:`s`/`d`/`q`/`b`/`k`/`n`/`w`/`r`/`ts`/`tc`/`tro`/`l`/`o`/`u`/`h`/`j`/`m`\r
\r
#### 3. 系统函数缩写\r
\r
使用缩写形式:`$e`/`$p`/`$l`/`$o`/`$g`/`$d`/`$a`/`$c`/`$tr`/`$j`/`$zb`/`$zcvt`/`$zh`\r
\r
### 输出格式\r
\r
审查结果应包含:\r
\r
```\r
\r
## 代码审查报告\r
\r
### 问题汇总\r
- [严重] 问题1描述(行号)\r
- [警告] 问题2描述(行号)\r
\r
### 详细说明\r
\r
#### 1. 变量命名问题\r
**位置**:第X行\r
**问题**:描述\r
**规范依据**:引用具体规则\r
**建议修正**:\r
\r
// 修正后的代码\r
#### 2. 方法命名问题\r
\r
...\r
### 修正后完整代码\r
\r
**IMPORTANT**: 必须输出完整的修正后代码,不要省略任何部分。将用户提供的完整代码按照规范修正后全部输出。\r
// 完整修正后的代码(必须包含所有方法,不得省略)\r
\r
```\r
\r
## 规范速查表\r
\r
| 类别 | 规则 | 正确示例 | 错误示例 |\r
|------|------|----------|----------|\r
| 变量名 | lowerCamelCase | `startDate` | `startdate` |\r
| 常量 | 全大写 | `MAXCOUNT` | `MaxCount` |\r
| 布尔变量 | Flag后缀 | `dispFlag` | `isDisp` |\r
| 方法名 | UpperCamelCase, 动宾结构 | `GetName()` | `getname()` |\r
| 布尔方法 | Is开头 | `IsExist() As %Boolean` | `GetExistFlag()` |\r
| 事务 | 简写小写 | `ts` / `tc` | `TSTART` |\r
| 锁 | 带+/-和超时 | `l +^XXX:3` | `l ^XXX` |\r
| 注释符 | #; 或 // | `#; 说明 ` | `; 说明` |\r
| 空格 | 运算符两侧 | `a = b` | `a=b` |\r
| 命令 | 除for/while外使用缩写 | `s`, `d`, `q`, `for` | `set`, `do`, `quit`, `f` |\r
| 系统函数 | 使用缩写 | `$e`, `$p`, `$l`, `$o` | `$extract`, `$piece`, `$length`, `$order` |\r
| 逻辑运算 | && \|\| | `(a)&&(b)` | `a,b` |\r
| 后置表达式 | 括号内空格,括号外无空格 | `q:(a = "")&&(b = "")` | `q:(a = "") && (b = "")` |\r
\r
## 参考资源\r
\r
- `references/代码规范 - 变量.md` \r
- `references/代码规范 - 方法.md` \r
- `references/代码规范 - 格式.md` \r
- `references/代码规范 - 空行.md` \r
- `references/代码规范 - 事务.md` \r
- `references/代码规范 - 锁.md` \r
- `references/代码规范 - 陷阱.md` \r
- `references/代码规范 - 注释.md` \r
- Make sure OpenClaw is installed (local or Docker)
- Run the install command in chat:
/install iris-code-formatter - After installation, invoke the skill by name or use
/iris-code-formatter - Provide required inputs per the skill's parameter spec and get structured output
What is iris-code-formatter?
对InterSystems IRIS/Cache ObjectScript代码进行格式化检查、审查和自动修正。 当用户需要格式化IRIS代码、检查代码规范合规性、审查代码质量或修正不符合规范的代码时触发此技能。 支持变量命名、方法命名、锁、事务、陷阱、格式、空行、注释等多个维度的规范检查。 It is an AI Agent Skill for Claude Code / OpenClaw, with 290 downloads so far.
How do I install iris-code-formatter?
Run "/install iris-code-formatter" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.
Is iris-code-formatter free?
Yes, iris-code-formatter is completely free, licensed under MIT-0. You can download, install and use it at no cost.
Which platforms does iris-code-formatter support?
iris-code-formatter is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).
Who created iris-code-formatter?
It is built and maintained by yaoxin521123 (@yaoxin521123); the current version is v3.1.0.