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