如何忽略 Luacheck 的警告?

Luacheck 代码检查器在 if 语句的分支中没有任何语句时会产生警告。例如,如果我有一个名为 test.lua 的文件,其中包含以下代码:

local function f(x)
    if x == "hello" then
        -- 什么也不用做
    elseif x == "world" then
        print(17)
    else
        error("x 的值无效")
    end
end

f("world")

运行 luacheck test.lua 将产生以下诊断:

 Checking test.lua                                 1 warning

    test.lua:2:21: empty if branch

Total: 1 warning / 0 errors in 1 file

有没有办法绕过这个警告?据我所知,没有配置选项可以禁用它,而尝试使用分号添加一些空语句也不会消除警告(事实上,这只会添加有关空语句的额外警告):

if x == "hello" then
    ;
elseif ...

目前我能想到的唯一解决方法涉及创建额外的 if 语句层,我认为这比原始版本不够清晰。

if x ~= "hello" then
    if x == "world" then
        print(17)
    else
        error("不可能")
    end
end
点赞
用户2858170
用户2858170
使用 luacheck test.lua --ignore 542 进行检查。

请参阅 Luacheck 文档的命令行界面部分。
[命令行界面](http://luacheck.readthedocs.io/en/stable/cli.html)

> 命令行选项 --ignore、--enable 和 --only 及相应的配置选项允许使用警告码模式匹配来过滤警告

[警告列表](http://luacheck.readthedocs.io/en/stable/warnings.html)

> 代码  \|  描述
>
> **542**  \|  空的 if 分支

或者,还可以通过在 .luacheckrc [配置文件](http://luacheck.readthedocs.io/en/stable/config.html) 中设置 ignore 选项来禁用警告:

ignore = {"542"}


* * *

个人认为忽略警告并不好。我更喜欢修复它们的原因。
因此,我对您的特定问题的解决方案是简单地重新排列条件语句。这不需要像您提出的替代方案中那样额外的 if 层。

local function f(x) if x == "world" then print(17) elseif x ~= "hello" then error("bad value for x") end end

f("world") ```

2018-03-07 20:31:08
用户1069083
用户1069083

最好的方法是修复警告,但如果不可能,你可以忽略它们。

我没有找到一种能够忽略所有警告的方法,但你可以在配置文件中列出所有警告并忽略它们:

ignore = {
    "011", -- 语法错误。
    "021", -- 无效的内联选项。
    "022", -- 未成对的内联推送指令。
    "023", -- 未成对的内联弹出指令。
    "111", -- 设置一个未定义的全局变量。
    "112", -- 改变一个未定义的全局变量。
    "113", -- 访问一个未定义的全局变量。
    "121", -- 设置一个只读的全局变量。
    "122", -- 设置一个只读的全局变量字段。
    "131", -- 未使用地隐含定义的全局变量。
    "142", -- 设置一个未定义的全局变量字段。
    "143", -- 访问一个未定义的全局变量字段。
    "211", -- 未使用的局部变量。
    "212", -- 未使用的参数。
    "213", -- 未使用的循环变量。
    "221", -- 局部变量被访问但从未设置。
    "231", -- 局部变量被设置但从未访问。
    "232", -- 参数被设置但从未访问。
    "233", -- 循环变量被设置但从未访问。
    "241", -- 局部变量被改变但从未访问。
    "311", -- 分配给局部变量的值未使用。
    "312", -- 一个参数的值未使用。
    "313", -- 循环变量的值未使用。
    "314", -- 表字面值中字段的值未使用。
    "321", -- 访问未初始化的局部变量。
    "331", -- 分配给局部变量的值被改变但从未访问。
    "341", -- 改变未初始化的局部变量。
    "411", -- 重定义一个局部变量。
    "412", -- 重定义一个参数。
    "413", -- 重定义一个循环变量。
    "421", -- 覆盖一个局部变量。
    "422", -- 覆盖一个参数。
    "423", -- 覆盖一个循环变量。
    "431", -- 覆盖一个上值。
    "432", -- 覆盖一个上值参数。
    "433", -- 覆盖一个上值循环变量。
    "511", -- 无法到达的代码。
    "512", -- 循环具有最多只能执行一次的限制。
    "521", -- 未使用的标签。
    "531", -- 赋值的左侧太短。
    "532", -- 赋值的左侧太长。
    "541", -- 空的 do end 块。
    "542", -- 空的 if 分支。
    "551", -- 空语句。
    "561", -- 函数的圈复杂度太高。
    "571", -- 数字 for 循环从 #(expr) 往下到 1 或更少,并且没有负步长。
    "611", -- 一行只包括空格。
    "612", -- 一行包含尾随空格。
    "613", -- 字符串中的尾随空格。
    "614", -- 注释中的尾随空格。
    "621", -- 不一致的缩进(空格后跟 TAB)。
    "631", -- 行太长。
}

忽略错误更困难,这是一个问题,因为有一些假错误,比如: https://github.com/mpeterv/luacheck/issues/152

2019-06-16 10:34:52
用户657764
用户657764

CLI.luacheckrc 选项很棒,但我发现**行内**注释也非常有用。

这个页面:Luacheck Inline Commands 展示了许多选项。例如:-- luacheck:ignore 111将禁用 _非标准全局_警告。另一个有趣的功能:**推送弹出**

-- luacheck: push ignore foo
foo() -- 没有警告。
-- luacheck: pop
foo() -- 警告被发出。

这使您可以禁用规则或其他 lint 函数,然后快速撤消它。

2019-08-08 17:55:15
用户11565192
用户11565192

忽略所有警告的最简单方法:

luacheck test.lua --only 0

以下是 luacheck 的警告列表:

https://luacheck.readthedocs.io/en/stable/warnings.html

你可以发现所有错误代码都以 0 开头。因此,我们可以使用 --only 0 来过滤掉所有警告。

2022-07-08 12:13:53