Skip to content

警告码 ​

本文档列出 YaoXiang 编译器可能产生的警告码。警告不会阻止编译,但可能指示代码中存在潜在问题。

配置 ​

可以通过 yaoxiang.toml 配置警告行为:

toml
[lint]
# 死代码警告级别:off | warn | deny
dead-code = "warn"
  • off:禁用警告
  • warn:显示警告(默认)
  • deny:将警告视为错误

警告列表 ​

W1001: 未使用的导出函数 ​

原因:导出的函数从未被任何代码调用。

yaoxiang
pub dead_function: () -> Void = { }  // W1001: 未使用的导出函数

main: () -> Void = {
    // dead_function 从未被调用
}

建议:

  • 如果函数不需要被外部使用,移除 pub 修饰符
  • 如果函数需要保留但暂未使用,可以在配置中设置 dead-code = "off"

W1002: 未使用的导出类型 ​

原因:导出的类型(type 别名或自定义类型)从未被使用。

示例:

yaoxiang
DeadType: Type = Int  // W1002: 未使用的导出类型

main: () -> Void = {
    x = 42
}

建议:

  • 如果类型需要导出但暂未使用,忽略此警告

W1003: 未使用的导入 ​

原因:use 语句导入的模块或符号从未被使用。

yaoxiang
use std.json  // W1003: 未使用的导入

main: () -> Void = {
    // json 模块从未被使用
}

建议:

  • 移除未使用的导入以保持代码整洁
  • 如果需要保留导入(用于副作用),考虑使用 use std.json.* 或添加注释说明

W1004: 未使用的导出变量 ​

原因:使用 pub 导出的变量从未被读取。

示例:

yaoxiang
pub dead_var = 42  // W1004: 未使用的导出变量

main: () -> Void = {
    // dead_var 从未被读取
}

建议:

  • 移除不必要的 pub 修饰符
  • 如果变量需要导出但暂未使用,忽略此警告

W1005: 未使用的导出方法 ​

原因:在类型上导出的方法从未被调用。

示例:

yaoxiang
Foo: Type = { value: Int }

pub Foo.dead_method: (self: Foo) -> Void = { }  // W1005: 未使用的导出方法

main: () -> Void = {
    foo = Foo(1)
    // dead_method 从未被调用
}

建议:

  • 移除不必要的 pub 修饰符
  • 如果方法需要保留但暂未使用,忽略此警告

W1063: const 泛型约束无法求值 ​

原因:const 泛型参数的值约束无法在编译期求值。

消息:const 泛型约束无法求值: `{constraint}` ({var} = {value})

yaoxiang
BadArray(Int, n)  // n 不是编译期常量

建议:

  • 确保 const 参数是编译期常量

W1080: 编译期证明降级 ​

原因:约束无法在编译期证明,已降级为运行时检查。

消息:编译期无法证明约束,已降级为运行时检查

建议:

  • 考虑添加证明函数以提高安全性

警告级别详解 ​

级别效果
off完全禁用此警告
warn显示警告但继续编译(默认)
deny将警告视为错误,阻止编译

使用场景 ​

  • 开发过程中:使用 warn 级别了解代码中的潜在问题
  • 发布前:使用 deny 级别确保没有未使用的代码
  • 遗留代码:使用 off 级别暂时忽略警告

与错误码的区别 ​

警告码使用 W 前缀(如 W1001),错误码使用 E 前缀(如 E1001)。

  • 错误 (Error):阻止编译,必须修复
  • 警告 (Warning):提示潜在问题,可选择修复