VS Code 向けの WebRelease2 テンプレート言語サポート拡張機能です。.wr2 / .wr2t を対象に、構文ハイライト、入力補助、静的な構文チェックを提供します。
WebRelease Version 2.80Mの構文をベースにしてます。
- Releases から
.vsixをダウンロード - VS Code で
Extensions: Install from VSIX...を実行 - ダウンロードした
.vsixを選択
code --install-extension webrelease2-template-lsp-1.0.0.vsix%...%(テンプレート式)<wr-*>(WebRelease2 拡張タグ)- コメント
- 属性
- HTML / CSS / JavaScript / JSON の埋め込み(基本)
- タグ補完:
<wr-からwr-if/wr-forなどを補完 - 関数補完:
%...%の内側で組み込み関数を補完wr-*の一部属性値(例:condition/value/listなど)入力中にも関数補完
- HTML 補完: 通常の HTML 編集時は HTML の補完もフォールバックで動作
- タグ:
wr-ifなどにホバーで簡易ドキュメント表示 - 関数: 一部の関数はホバーで簡易説明を表示
- HTML: 通常の HTML 部分は HTML のホバー情報にフォールバック
保存不要で、編集中にエラー/警告を表示します(静的解析ベース)。
- テンプレート式
%...%の構文チェック - タグ検証: 不明な
wr-*タグを検出 - 属性検証: タグごとに許可されない属性を警告
- 必須属性の検証(例:
wr-ifのcondition、wr-variableのnameなど) - 閉じタグの整合(未閉じ/対応しない閉じタグの検出)
wr-variable/wr-appendの文法チェックname必須value属性と本文(子要素/テキスト)の併用禁止(本文が空白のみは許可)
wr-if/wr-switch/wr-conditionalの直下要素制約wr-ifがwr-then/wr-elseを使う場合の配置制約wr-switch直下はwr-case/wr-defaultのみ(wr-defaultは最大1つ、かつ最後)wr-conditional直下はwr-condのみ
wr-breakの使用位置:wr-forの内部でのみ使用可能- リスト要素に対する関数呼び出し検出
selectedValue()/selectedName()/selected()をリスト要素に直接呼ぶ誤りを検出
例(リスト要素に対する誤った呼び出し):
<!-- ❌ NG: list 属性で回している要素に対して直接 selectedValue() を呼んでいる -->
<wr-for list='card.selectPriceInfo' variable="info">
%card.selectPriceInfo.selectedValue().txtHtml%
</wr-for>
<!-- ✅ OK: ループ変数(info)に対して呼び出す -->
<wr-for list='card.selectPriceInfo' variable="info">
%info.selectedValue().txtHtml%
</wr-for>.wr2.wr2t
wr-if,wr-then,wr-elsewr-for,wr-breakwr-switch,wr-case,wr-defaultwr-variable,wr-append,wr-clearwr-return,wr-errorwr-conditional,wr-condwr-comment,wr--(コメント)
補完の対象になっている主な関数は以下です(実装上の組み込み関数一覧)。
- 選択系:
selectedValue(),selectedName(),selected() - Null/型判定:
isNull(value),isNotNull(value),isNumber(value) - 変換:
number(value),string(value) - 文字列/配列:
length(value),substring(str, start, end),indexOf(str, substr),contains(str, substr),startsWith(str, prefix),endsWith(str, suffix),toUpperCase(str),toLowerCase(str),trim(str),replace(str, from, to),split(str, delimiter),join(array, delimiter),unsplit(...) - 数値:
round(num),floor(num),ceil(num),abs(num),min(a, b),max(a, b),divide(a, b, scale, mode),setScale(num, scale) - その他:
pageTitle(),currentTime(),formatDate(time, format)
- Node.js 18+
- npm
# Install dependencies
cd server && npm install
cd ../client && npm install
# Compile
cd server && npm run compile
cd ../client && npm run compile
# Package
cd client && npx vsce packagewebrelease-template-language-support/
├── server/ # LSP Server (Node.js/TypeScript)
│ ├── src/
│ │ ├── server.ts # LSP server implementation
│ │ └── parser.ts # Template parser
│ └── package.json
├── client/ # VS Code Extension
│ ├── src/
│ │ └── extension.ts # Extension entry point
│ ├── syntaxes/ # TextMate grammar
│ └── package.json
└── README.md
MIT License - 詳細は LICENSE を参照してください。
Pull Request を歓迎します。
