报错与诊断 - inline-function/Sublimation GitHub Wiki
编译器诊断分四级:错误(E-,阻断编译)、警告(W-,不阻断但提示风险)、提示(H-,改进建议)、补充(D-,类型推导结果,默认不输出)。现共 53+ 个诊断码。
每条带位置的诊断,check / compile 输出时自动附带源码行 + 行号 + 上箭头,一眼定位:
[错误][1:16] E-TYPE-MISMATCH: 函数 f 体类型 Str 与声明 Nat 不符
1 | fun f(): Nat = "s"
| ^
不记得某个诊断码是什么意思?explain 直接给出含义与修复建议(不区分大小写):
sublimationc explain W-UNUSED
# => W-UNUSED — 变量/参数声明后从未使用(_ 前缀可抑制):删除或加 _ 前缀。
常用诊断码:
| 码 | 含义 |
|---|---|
E-TYPE-MISMATCH |
表达式类型与预期不符(函数返回类型/实参/标注) |
E-UNBOUND-NAME |
未定义名字(拼写、作用域、模块前缀) |
E-ARITY / E-NAMED-ARG
|
实参个数 / 命名实参冲突 |
E-MISSING-RETURN |
块函数未在所有路径 return(Kotlin 语义) |
E-NON-SEALED-MATCH |
作为表达式的 when 未密封(穷尽性) |
W-NON-EXHAUSTIVE |
when 对枚举/构造子未穷尽 |
E-PRE/POST-UNPROVEN |
前件/后件未证明 |
E-NON-STRUCTURAL-REC |
纯函数递归停止性存疑 |
E-IMMUT-ASSIGN / E-ASSIGN-TARGET
|
不可变赋值 / 赋值目标非变量 |
E-NO-INSTANCE / E-IMPL-INCOMPLETE
|
类型类实例缺失 / impl 不完整 |
E-IMPURE-CALL |
纯上下文调用非纯函数 |
E-NEED-ASYNC |
异步调用需在 @async 上下文(readFile 等) |
E-TUPLE-VARARG |
@tuple 形参只收元组字面量 |
W-UNUSED |
变量/参数声明后从未使用(加 _ 前缀可抑制) |
W-UNREACHABLE / W-DIV-ZERO
|
不可达代码 / 除以零 |
H-ROOT-BUILTIN / H-FIELD-SHADOW / H-PARAM-REF
|
改进提示 |
E-DEEP-SATURATION |
命题推理饱和深度超限 |
完整表见 explain 或源码 src/main/kotlin/Main.kt 的 EXPLAIN。实现见 doc/形式化规范.md、std/工程规范.md(内部文档)。