Skip to content
| Marketplace
Sign in
Visual Studio Code>Formatters>IRIS PrettierNew to Visual Studio Code? Get it now.
IRIS Prettier

IRIS Prettier

iris-prettier

|
14 installs
| (1) | Free
Prettier-style formatter for InterSystems IRIS ObjectScript (.cls)
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

IRIS Prettier

IRIS Prettier

Languages: English | 简体中文

Prettier-style formatter for InterSystems IRIS ObjectScript (.cls, .mac, .int, etc.).

Formatting only — no linting. Works with the official InterSystems ObjectScript VS Code extension.

Install

Search IRIS Prettier in the marketplace:

ext install iris-prettier.iris-prettier-vscode

Requires an extension that provides objectscript / objectscript-class language IDs (e.g. InterSystems ObjectScript).

Quick start

  1. Open a .cls file
  2. Right-click → Format Document, or Shift+Alt+F
  3. Select code → right-click Format Selection / Convert Selection Syntax; or use Preview Format / Preview Syntax Convert to review in a diff before applying
  4. Set as default formatter in settings.json (see below)

Features

Formatting

Feature Description
Allman braces ClassMethod Foo() and { on separate lines
Operator spacing Spaces around =, +, -, *, /, _, :, etc.
Comparisons in () (Ingd <= 0), (x >= 1) — spaces on both sides of <= / >=
Lowercase commands Set → s, If → if
Block expansion i → if, f → for, e → else
Postfix conditions Spacing inside q:(...) / s:(...)
Method blank lines Blank line between adjacent methods
&sql(...) Multiline SQL, lowercase keywords, // after )
Tab indent Default tabs in method bodies (1 tab = 4 spaces in IRIS)
Selection format Indent from enclosing { / } context

Example:

Before:

ClassMethod Foo() {
Set ret=1
If x=1  s y=2
.i (Ingd<= 0)  s Ret=Ingd q
.q:(info="")&&(flag="Y")
}

After:

ClassMethod Foo() {
	s ret = 1
	if x = 1  s y = 2
	.i (Ingd <= 0)  s Ret = Ingd q
	.q:(info = "")&&(flag = "Y")
}

Block syntax example (non–dot syntax):

Before:

ClassMethod M() {
If (count>0)&&(status="Y") {
Set ret=1
} Else {
Set ret=0
}
}

After:

ClassMethod M() {
	if (count > 0) && (status = "Y") {
		s ret = 1
	} else {
		s ret = 0
	}
}

Dot syntax → block

Before:

i $d(^DHCRETA(0,"TypePointer","G",rowid)) d
.s retarowid=$o(^DHCRETA(0,"TypePointer","G",rowid,""))
.e  d
.&sql(insert into DHC_RetAspAmount ...)
i SQLCODE'=0  d
.s ret=$$SqlErrorRecord^DHCSTERROR(...)

After:

if $d(^DHCRETA(0,"TypePointer","G",rowid)) {
    s retarowid=$o(^DHCRETA(0,"TypePointer","G",rowid,""))
} else {
    &sql(insert into DHC_RetAspAmount ...)
}
if (SQLCODE'=0) {
    s ret=$$SqlErrorRecord^DHCSTERROR(...)
}

for dot syntax example:

Before:

f  s info = $o(^IRIS("info", info)) q:info=""  d
.s flag = $p(^IRIS("info", info), "^", 1)
.i flag = "1"  d
.// todo

After:

for {
	s info = $o(^IRIS("info", info)) q:info=""
	s flag = $p(^IRIS("info", info), "^", 1)
	if (flag = "1") {
		// todo
	}
}

Also supports: .e i → elseif, range for, inline i cond s cmd, q: → continue: in loops, and selection conversion without a method header.

Dot-to-block pre-formats source before conversion. Use Preview Syntax Convert to review in a side-by-side diff, then click Apply in the notification.

Commands

Action Command palette Context menu Shortcut
Format document IRIS Prettier: Format Document — Shift+Alt+F
Format current method IRIS Prettier: 格式化当前方法 ✓ —
Preview format IRIS Prettier: 预览格式化 ✓ —
Preview syntax convert IRIS Prettier: 预览语法转换 ✓ —
Format selection IRIS Prettier: 格式化选定内容 ✓ Ctrl+K Ctrl+F
Convert selection IRIS Prettier: 转换选定内容语法 ✓ —
Dot → block IRIS Prettier: Convert Dot Syntax to Block — Ctrl+Shift+Alt+B
Format + convert IRIS Prettier: Format + Convert Dot to Block — Ctrl+Shift+Alt+F

Selection notes: range expands to full lines; indent depth is inferred from { / } above the selection.

Output log: open View → Output → IRIS Prettier to see method name, line range, and changed line count ([skip] when unchanged).

Preview: Preview format opens a side-by-side diff; use Apply in the notification to write changes (syntax conversion preview works the same way).

Recommended settings

{
  "irisPrettier.enable": true,
  "irisPrettier.useTabs": true,
  "irisPrettier.tabWidth": 4,
  "irisPrettier.printWidth": 120,
  "irisPrettier.formatPostfixConditions": true,
  "editor.insertSpaces": false,
  "editor.tabSize": 4,
  "[objectscript-class]": {
    "editor.defaultFormatter": "iris-prettier.iris-prettier-vscode",
    "editor.formatOnSave": true,
    "editor.tabSize": 4,
    "editor.insertSpaces": false
  },
  "[objectscript]": {
    "editor.defaultFormatter": "iris-prettier.iris-prettier-vscode",
    "editor.formatOnSave": true,
    "editor.tabSize": 4,
    "editor.insertSpaces": false
  }
}

Configuration

Setting Type Default Description
irisPrettier.enable boolean true Enable formatting
irisPrettier.printWidth number 120 Reference line width
irisPrettier.useTabs boolean true Tabs in method bodies
irisPrettier.tabWidth number 4 Spaces per level when useTabs is false
irisPrettier.formatPostfixConditions boolean true Format postfix q: / s: conditions

Indentation uses irisPrettier.* settings, not VS Code global editor.tabSize.

Design principles

  • Format only — no semantic linting
  • Preserve IRIS idioms — e.g. e i kept in format-only mode; expanded on dot-to-block
  • Do not break existing blocks — If ind="" { ... } left intact

Known limitations

  • Very complex nested dot syntax may need manual touch-up
  • Commas in conditions are not converted to && by default
  • Requires ObjectScript language extension for language IDs

Feedback

  • GitHub Issues: yaoxin521123/iris-prettier
  • QQ group (Chinese community): 410039091
  • Rules: docs/RULES.md

License

MIT

  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
© 2026 Microsoft