VS Code の拡張機能
.lim のシナリオを VS Code で手で書く、AI と書くときの拡張機能(packages/vscode)。
Cursor など VS Code と同じ拡張機能を読むエディタでも使える。
入れる
npm run -w @liminalia/vscode packageでpackages/vscode/liminalia-<版>.vsixを作る(下の「作る」)- VS Code のコマンドパレットで「Extensions: Install from VSIX…」(日本語なら「拡張機能: VSIX からのインストール…」)を選び、その .vsix を選ぶ
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 を動かす)