NekoYume517/lincheck/cmd/lincheck does not have a README file

    DataFailure

    type DataFailure

    输入数据错误(文件读不到、JSONL 不合法、记录格式错)

    与 Failure 分开,是为了让退出码能区分「你命令打错了」和 「你的数据有问题」——这两件事调用方的处理方式完全不同。

    Failure

    type Failure

    CLI 用法错误(参数缺失、拼错、未知取值)

    Cli

    type Cli

    解析后的一次调用

    jsonl_error_text

    fn jsonl_error_text(path : String, error : Error) -> String

    把解析失败渲染成可读的错误文本(行号 + 原因都在里面)。

    库层的 History::from_jsonl 已经算好了「从 1 开始的行号」与具体原因 (见 history.mbt 的 parse_op_line,注释写明「报错位置与编辑器里的行号 一致」),旧实现却用 Err(_) 把它们整个丢掉,只留一句 JSONL 解析失败:<路径> —— 对一个几百行的历史几乎无法定位。

    标 pub 仅为可测性(理由同 parse_int_arg):错误文本是这条命令的 可观测输出,主包的 *_test.mbt 只能看到 pub 符号。返回 String 而不是 直接 raise,是为了让测试能无副作用地断言文本。

    parse_double_arg

    fn parse_double_arg(s : String) -> Double?

    解析 "0.5" / "1" 这类简单浮点。

    符号必须对整个数值生效:小数部分只按无符号数解析,最后统一乘上 整体符号。直接把负号塞给整数段会让 -0.5 变成 +0.5(整数段是 0,负号被静默丢掉),-1.5 变成 -0.5。

    标 pub 仅为可测性,理由同 parse_int_arg。

    parse_int_arg

    fn parse_int_arg(s : String) -> Int?

    解析整数(允许前导 -)。手写逐位累加,不依赖标准库解析函数。

    溢出防护:累加前先判断 acc 是否还会溢出(Int32 上限 2147483647), 溢出返回 None 让调用方报「参数值非法」,而不是静默回绕成另一个数。 -2147483648 单独放行:它的绝对值超 Int32 上限,但取负后合法。

    标 pub 仅为可测性:可执行包没有下游消费者,黑盒测试(主包的 *_test.mbt 只能看到 pub 符号)需要直接覆盖溢出与符号的边界。

    run

    fn run(argv : Array[String]) -> Int

    执行一次调用并返回退出码。

    标 pub 仅为可测性,理由同 parse_int_arg:可执行包没有下游消费者,而 主包的 *_test.mbt 只能看到 pub 符号。退出码是 docs/exit-codes.md 的核心 契约(1 = 有效结论 / 3 = 没有结论),只有直接断言它才能锁住 「预算耗尽不得被渲染成已判定违规」这类缺陷。

    Source Files