诊断码速查表
Zero 编译器发出的所有稳定诊断码的快速参考表。使用 zero explain <code> 获取更详细的指导。
如何阅读诊断信息
运行 zero check --json 获取结构化诊断输出:
{
"schemaVersion": 1,
"ok": false,
"diagnostics": [
{
"severity": "error",
"code": "NAM003",
"message": "unknown identifier 'message'",
"path": "examples/hello.0",
"line": 2,
"column": 27,
"length": 7,
"expected": "visible local, parameter, function, or builtin",
"actual": "no visible symbol named 'message'",
"help": "declare the name before using it",
"fixSafety": "behavior-preserving",
"repair": {
"id": "manual-review",
"summary": "Inspect the diagnostic fields and choose a repair manually."
},
"related": []
}
]
}
每条诊断信息包含:code(稳定标识符)、message(出了什么问题)、位置信息(path、line、column)、expected/actual(不匹配详情)、help(建议修复方案)和 fixSafety(自动化标签)。
修复安全标签
修复方案附带安全标签,帮助 Agent 和工具判断是否可以自动应用:
| 标签 | 含义 |
|---|---|
format-only | 仅修改格式,不影响行为 |
behavior-preserving | 保持程序行为 不变,可安全应用 |
local-edit | 限于当前局部作用域或文件 |
api-changing | 会改变函数签名、导出名称、包 API 或调用点 |
requires-human-review | 有风险或存在歧义;展示方案但不自动应用 |
代码参考
PAR - 解析器
| Code | Message | Meaning | Fix |
|---|---|---|---|
| PAR100 | parser syntax failure | 缺少花括号、逗号,或类型参数列表格式错误等语法错误 | 检查指示的 token 及周围结构;添加缺少的分隔符或修正语法 |
NAM - 名称
| Code | Message | Meaning | Fix |
|---|---|---|---|
| NAM003 | unknown identifier | 在当前词法作用域中使用了未声明的名称 | 在使用前引入局部绑定、参数或导入 |
| NAM004 | duplicate name / arity mismatch | 重复的名称、错误的调用参数数量,或泛型类型名遮蔽 | 重命名重复项、修正参数数量或移除遮蔽声明 |
TYP - 类型
| Code | Message | Meaning | Fix |
|---|---|---|---|
| TYP002 | type mismatch | 赋值、字面量、返回值或类型默认值中的类型不匹配 | 确保表达式与预期类型匹配;添加显式转换或标注 |
| TYP009 | mutable storage required | 可写字节辅助函数(如 std.mem.copy)需要可变存储 | 将目标绑定的 let 改为 var |
| TYP010 | condition must be Bool | 条件表达式不是 Bool 类型 | 使用布尔表达式或比较运算符 |
| TYP011 | null requires Maybe context | null 在 Maybe<T> 上下文之外使用 | 用 Maybe<T> 包装或提供带类型的默认值 |
| TYP012 | break outside loop | break 在没有外层循环时使用 | 将 break 移到循环体内部或重构控制流 |
| TYP013 | continue outside loop | continue 在没有外层循环时使用 | 将 continue 移到循环体内部或重构控制流 |
| TYP014 | non-integer loop bounds | 范围循环的边界必须是整数兼容类型 | 为循环范围使用整数表达式 |
| TYP015 | invalid integer literal | 整数字面量使用了无效的数字、分隔符、进制前缀或后缀 | 修正字面量格式;使用有效的数字和可选进制前缀(0x、0b、0o) |
| TYP016 | integer overflow | 整数字面量超出预期的原始整数宽度 | 使用更宽的类型或减小字面量值 |
| TYP017 | invalid cast | as 转换仅限于原始数值类型和字节 char 类型 | 仅在兼容的数值类型之间转换 |
| TYP018 | invalid char literal | 字符字面量必须包含恰好一个字节或支持的字节转义 | 使用单个字符或转义序列如 \n、\t、\\ |
| TYP019 | invalid float literal | 浮点字面量必须使用 digits "." digits 格式,可选指数 | 添加小数点;例如用 1.0 代替 1 |
| TYP020 | float overflow | 浮点字面量超出预期的原始浮点宽度 | 对较大值使用 f64 或减小字面量 |
| TYP021 | unsupported indexing target | 对不支持的目标进行索引、切片或索引赋值 | 使用支持的数组、切片或可索引类型 |
| TYP022 | non-integer index | 索引表达式和切片边界必须是整数 | 为索引和边界使用整数表达式 |
| TYP023 | generic arity mismatch | 泛型调用类型参数数量不匹配,或在非泛型函数上使用了类型参数 | 匹配类型参数数量;从非泛型调用中移除类型参数 |
| TYP024 | conflicting generic inference | 泛型推断为同一类型参数找到了冲突的具体类型 | 使参数一致或传递显式类型参数 |
| TYP025 | inference failure | 无法从局部调用参数推断泛型类型参数 | 传递显式类型参数:fn<Type>(args) |
| TYP026 | cyclic type alias | 类型别名重复、格式错误或循环 | 将别名指向具体类型或移除循环 |
| TYP027 | recursive generic mutation | 递归泛型调用改变了类型参数 | 确保递归调用使用一致的类型参数 |