Liminalia

VS Code の拡張機能

.lim のシナリオを VS Code で手で書く、AI と書くときの拡張機能(packages/vscode)。 Cursor など VS Code と同じ拡張機能を読むエディタでも使える。

入れる

  1. npm run -w @liminalia/vscode package で packages/vscode/liminalia-<版>.vsix を作る(下の「作る」)
  2. VS Code のコマンドパレットで「Extensions: Install from VSIX…」(日本語なら「拡張機能: VSIX からのインストール…」)を選び、その .vsix を選ぶ
  3. liminalia.json のあるフォルダを開き、.lim を開く

入れ直すときも同じ手順で上書きする。

できること

  • 色分け: ラベル # 名前、命令 @名前 key=value、コメント //、台詞の話者 名前「…」、本文の中の書き方 {r 漢字|かんじ} {br} {= 式} {b …} {@命令 …}、選択肢の行 - 文 -> 飛び先 key=value、(式) の値、文字列、時間、色
  • 検査: lim check と同じ検査を、書いているそばから出す。開いているファイルは保存前の中身で、ほかのファイルはディスクの 中身で見る。cast.json、liminalia.json、訳のファイル(lang/<言語>.json)への指摘もそのファイルに出す
  • 補完
    • @ のあとに命令の名前(要約つき。そのファイルと @use したファイルの @define も)
    • 命令の引数の名前(key=)と、型に応じた値(選べる値、true / false、キャスト、立ち絵セット、差分、立ち位置、素材のファイル)
    • 飛び先(@jump @call、選択肢の -> のあと、飛び先の型の引数)に #ラベル、ファイル、ファイル#ラベル
    • 行頭に話者の名前(cast.json の speakers。括弧も入れる)
    • 本文の { のあとに本文の中の書き方
  • 説明(ホバー): 命令の名前に要約、例、引数の表、key= や位置引数にその引数の説明
  • 定義へ移動: 飛び先(#ラベル、ファイル、ファイル#ラベル)、@use のファイル、@define した部品の呼び出し (@use したファイルのものも)
  • 目次(アウトライン): ラベルと @define
  • @if @choice @define @script 〜 @end の折りたたみ、// のコメントの切り替え、括弧 「」『』()""{} の自動の閉じ

命令の仕様は、組み込みの命令、標準の命令(@liminalia/std)、プロジェクトの plugins のプラグインの命令から集める。 プラグインは TypeScript のまま書かれていることが多いので、拡張機能の中で読めなければ、別のプロセスで読み直す (プロジェクトから tsx が見つかれば使う。Node.js は既定で VS Code に入っているものを使い、設定 liminalia.node で替えられる)。それでも読めないときは出力パネルの 「Liminalia」に理由を出し、知らない命令の指摘を警告にする。信頼していないフォルダと、ワークスペースのフォルダの外にあるプロジェクト(ワークスペースの外で開いた .lim)では、プラグインのコードは動かさない。

設定、キャスト、プラグインを書き換えると読み直す。うまく読み直されないときは、コマンドパレットの 「Liminalia: 言語サーバーを再起動」を使う。

作る

npm install
npm run -w @liminalia/vscode build     # packages/vscode/dist/ に束ねる(esbuild)
npm run -w @liminalia/vscode package   # build のあと .vsix にする(@vscode/vsce)
  • 拡張機能の側(src/extension.ts)は dist/extension.cjs、言語サーバー(src/server.ts)は dist/server.mjs になる。 @liminalia/lang と標準の命令は言語サーバーに束ねるので、.vsix はエンジンのリポジトリがなくても動く
  • 補完、説明、定義へ移動、検査の中身は src/features.ts と src/model.ts にあり、VS Code なしで試せる (packages/vscode/test/。リポジトリの直下の npx vitest run で動く)
  • 開発中に試すときは、packages/vscode を VS Code で開いて「実行とデバッグ」から拡張機能の開発ホストを起動してもよい (先に build を動かす)