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 的消息。默认值为一个分片、索引 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 解析一个十进制整数。
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 以精确的十进制表示存储整数,因此打印时不带小数部分。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