付録D CLI・REPL コマンドリファレンス
lune コマンドと REPL の全機能の一覧です。使い方の物語は第11章(診断)と第12章(道具)に
あります。ここは「あの引数、何だったっけ」を引くための場所です。
本書の規約どおり、lune はリポジトリの ./bin/lune を指し、export LUNE_LANG=ja が
設定してあるものとします(第1章 1.1)。
D.1 起動とモード
$ lune [--lang en|ja] [--module-path DIR]... [MODE] [FILE]
モードは以下のいずれかで、同時にはひとつだけ指定します。
| 指定 | 何をするか |
|---|---|
lune | 引数なしで REPL を起動する |
lune --repl | 明示的に REPL を起動する |
lune --check FILE | 型検査だけして終わる。評価しない |
lune --eval NAME FILE | ファイルを読み、トップレベル束縛 NAME を評価して表示する |
lune --eval NAME --trace FILE | 上に加えて、force の実況を stderr に流す(第4章) |
lune --tokens FILE | レイアウト処理後のトークン列を表示する(第12章) |
lune FILE | モードを付けないと、構文木(AST)をそのまま印字する |
最後の行は開発者向けの既定動作です。人が読むためのものではないので、ふだんは
--check か --eval を付けてください。
--eval は型検査をせずに評価だけを行います。型の合わないコードを --eval で
動かすと、演算子や条件の型は実行時に検査され、lune --check を促す hint 付きの
RUN0006 になります。まず --check を通す習慣をつけておくのが安全です。
D.2 グローバルオプション
| オプション | 効果 |
|---|---|
--lang en|ja | 診断の言語。--lang=ja の形でも書ける |
--module-path DIR | モジュールの探索ルートを追加する。繰り返し指定できる(第10章) |
--version / -V | 版番号を表示して終わる |
-h / --help | 使い方を表示する |
言語は「環境変数 LUNE_LANG を既定とし、--lang フラグがそれに優先する」という関係です。
$ export LUNE_LANG=ja # 以後ずっと日本語
$ lune --lang en --check f.lune # この1回だけ英語
注意 —
--langはlune --helpの一覧に出てきません。他のオプションより手前で 処理される作りになっているためです。存在は忘れないでください。
版番号は、バグ報告のときに書き添えると話が早く済みます。
$ lune --version
lune 0.1.0
REPL の起動時に出る一行にも同じ番号が入っています(Lune v0.1.0 REPL.)。本書が対象と
しているのは v0.1 系です。
D.3 サブコマンド
lune explain
$ lune explain CODE [--lang en|ja]
$ lune explain --index [--lang en|ja]
診断コードの解説を表示します。--index は全コードの解説をまとめて出力するので、
documents/ERROR_INDEX_JA.md はこれをファイルに落としたものです(付録C)。
知らないコードを渡すと、渡せるコードの一覧を教えてくれます。
lune fmt / lune fix
$ lune fmt [--write|--check] FILE...
$ lune fix [--write|--check] FILE...
fmt は整形、fix は診断の hint に基づく自動修正です(第11章・第12章)。
両者はフラグの体系が同じです。
| フラグ | 動き |
|---|---|
| なし | 結果を標準出力に書く。ファイルはちょうど1つでなければならない |
--write / -w | ファイルを直接書き換える。複数ファイル可 |
--check | 書き換えず、変更が必要なら終了コード 1 で知らせる。CI 向け |
--write と --check は同時に使えません。
fmt にはひとつ制限があります。### で囲むブロックコメントを含むファイルは整形できません
(第12章 12.3)。
D.4 REPL コマンド
:help で出る一覧がすべてです。
| コマンド | 何をするか |
|---|---|
:help | この一覧を出す |
:quit / :q | 終了する |
:env | いま見えている名前と型を全部並べる |
:type NAME | 名前の型を答える |
:thunks [NAME] | 束縛の評価状態を、評価せずに見せる(第4章) |
:trace [on|off] | force の実況中継を切り替える(第4章) |
:lang [en|ja] | 診断の言語を切り替える |
:explain CODE [en|ja] | 診断コードの解説を読む(第11章) |
引数を省いた :thunks は全束縛の状態を並べます。
複数行の入力は、行末が = : -> のいずれかで終わると継続に入り、空行で確定します。
端末で起動していれば行編集と履歴(上下矢印)が効き、履歴は ~/.lune_history に残ります。
import も打てます(第10章)。探索は起動したディレクトリが基点で、--module-path を
足すこともできます。読み込んだモジュールの名前はセッションに残るので、:env に並びます。
$ lune --repl
lune> import math
ok
lune> add(1, 2)
3 : Int
D.5 終了コード
スクリプトや CI から呼ぶときのために。
| コード | 意味 |
|---|---|
0 | 成功。警告だけなら 0 です — --check は警告では失敗しません |
1 | 検査や評価が失敗した。診断が出ている。fmt --check / fix --check の「要変更」もこれ |
2 | 使い方の誤り。知らないフラグ、引数の不足、--write と --check の同時指定など |
「診断が出た」(1)と「コマンドの呼び方を間違えた」(2)が分かれているのが要点です。
--check が落ちたときに、それがコードの問題なのかスクリプトの書き間違いなのかを、
出力を読まずに判別できます。