internal/runner_cli API
internal/runner_cli は、cli/ の適合性ランナーが共有するコマンドライン処理を提供します。共通オプションの解析、ファイルの読み込み、ディレクトリからのコーパスファイルの収集、診断メッセージの整形、JSON 出力の構築です。moonbitlang/x/fs に依存するため、ファイルアクセスはそのパッケージが対応するターゲットで動作します(ランナーは native 向けにビルドされます)。これは内部パッケージであり、例はコンパイルされません。チュートリアルと設計ページも参照してください。
インポート(モジュール内部からのみ):
import {
"Luna-Flow/floating/internal/runner_cli",
}
コマンドラインオプション
CommonOptions
CommonOptions は、すべてのランナーが理解するオプションと、消費されなかった引数を保持します。
pub struct CommonOptions {
// private fields
}
parse_common_options
parse_common_options(arguments, allow_shard?) は、引数ベクタ全体から --json とシャードオプションを取り出します。
pub fn parse_common_options(Array[String], allow_shard? : Bool) -> Result[CommonOptions, String]
arguments[0] はプログラム名であり、スキップされます。認識されるオプション:
--json:json()を設定する。--shard-count N、--shard-count=N、--shard-index I、--shard-index=I:allow_shardが真(既定)の場合のみ。そうでなければremaining()に残される。
その他の引数はすべて順序を保って remaining() に保持されます。エラー:"--shard-count requires a value"(または --shard-index)、整数でない場合の "invalid shard count: X"、組が有効でない場合(数が正、番号が 0 ..< count 内)の ShardSpec::try_new のメッセージ。既定値は 1 シャード、番号 0、JSON 無効です。
CommonOptions::json, shard_count, shard_index, remaining
これらのアクセサは解析された値と、消費されなかった引数のコピーを返します。
pub fn CommonOptions::json(Self) -> Bool
pub fn CommonOptions::shard_count(Self) -> Int
pub fn CommonOptions::shard_index(Self) -> Int
pub fn CommonOptions::remaining(Self) -> Array[String]
///|
test "common options" {
let options = @runner_cli.parse_common_options([
"runner", "--json", "--shard-count=4", "--shard-index", "2", "--cases", "a1", "dir",
]).unwrap()
inspect(options.json(), content="true")
inspect(options.shard_count(), content="4")
inspect(options.remaining().join(" "), content="--cases a1 dir")
}
parse_int
parse_int(name, text) はオプション name の 10 進整数を解析します。
pub fn parse_int(String, String) -> Result[Int, String]
エラーは "invalid NAME: TEXT" です。
ファイル
read_source
read_source(path, label?) は UTF-8 ファイル全体を読み込みます。
pub fn read_source(String, label? : String) -> Result[String, String]
エラーは "cannot read LABEL: PATH" です。label の既定値は "file" です。
collect_files
collect_files(paths, suffix) はファイルとディレクトリのリストを展開し、名前が suffix で終わるファイルのソート済みリストにします。
pub fn collect_files(Array[String], String) -> Result[Array[String], String]
ディレクトリは、suffix で終わる直下のエントリを(dir + "/" + entry として)提供します。サブディレクトリは探索されません。ファイルは suffix で終わればそれ自身を提供し、そうでなければ無視されます。結果は文字列順にソートされるため、実行はファイルシステムに依らず再現可能です。エラー:"path does not exist: P"、"cannot inspect path: P"、"cannot read directory: P"。
診断
format_diagnostic, format_diagnostic_at
これらの関数はメッセージを source:line:column: message の形式に整形します。
pub fn format_diagnostic(@conformance.SourceLocation, String) -> String
pub fn format_diagnostic_at(String, Int, String, column? : Int) -> String
format_diagnostic_at(source, line, message, column?) は SourceLocation::new で位置を構築します(列の既定値は 1。行と列は少なくとも 1 に切り上げられます)。
///|
test "diagnostic format" {
inspect(
@runner_cli.format_diagnostic_at("add.decTest", 12, "malformed testcase row"),
content="add.decTest:12:1: malformed testcase row",
)
}
JSON 出力
json_int, json_string, json_bool, json_strings, json_object
これらの関数はランナーのレポート用に Json 値を構築します。
pub fn json_int(Int) -> Json
pub fn json_string(String) -> Json
pub fn json_bool(Bool) -> Json
pub fn json_strings(Array[String]) -> Json
pub fn json_object(Array[(String, Json)]) -> Json
json_int は整数を正確な 10 進表現で格納するため、小数部なしで出力されます。json_object はフィールドの順序を保持します。重複したキーは最初の位置と最後の値を保持します。
json_stringify
json_stringify(value) は値を、文字列をエスケープしたコンパクトな JSON として出力します。
pub fn json_stringify(Json) -> String
///|
test "json report" {
let report = @runner_cli.json_object([
("totalCases", @runner_cli.json_int(2)),
("failedIds", @runner_cli.json_strings(["a\"1"])),
])
inspect(
@runner_cli.json_stringify(report),
content="{\"totalCases\":2,\"failedIds\":[\"a\\\"1\"]}",
)
}
公開インターフェース全体
このスナップショットは、パッケージの生成された pkg.generated.mbti です。説明文とインターフェースが食い違う場合は、こちらが正となります。
// Generated using `moon info`, DON'T EDIT IT
package "Luna-Flow/floating/internal/runner_cli"
import {
"Luna-Flow/floating/internal/conformance",
}
// Values
pub fn collect_files(Array[String], String) -> Result[Array[String], String]
pub fn format_diagnostic(@conformance.SourceLocation, String) -> String
pub fn format_diagnostic_at(String, Int, String, column? : Int) -> String
pub fn json_bool(Bool) -> Json
pub fn json_int(Int) -> Json
pub fn json_object(Array[(String, Json)]) -> Json
pub fn json_string(String) -> Json
pub fn json_stringify(Json) -> String
pub fn json_strings(Array[String]) -> Json
pub fn parse_common_options(Array[String], allow_shard? : Bool) -> Result[CommonOptions, String]
pub fn parse_int(String, String) -> Result[Int, String]
pub fn read_source(String, label? : String) -> Result[String, String]
// Errors
// Types and methods
pub struct CommonOptions {
// private fields
}
pub fn CommonOptions::json(Self) -> Bool
pub fn CommonOptions::remaining(Self) -> Array[String]
pub fn CommonOptions::shard_count(Self) -> Int
pub fn CommonOptions::shard_index(Self) -> Int
// Type aliases
// Traits