如何忽略 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
最好的方法是修复警告,但如果不可能,你可以忽略它们。
我没有找到一种能够忽略所有警告的方法,但你可以在配置文件中列出所有警告并忽略它们:
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
CLI 和 .luacheckrc 选项很棒,但我发现**行内**注释也非常有用。
这个页面:Luacheck Inline Commands 展示了许多选项。例如:-- luacheck:ignore 111将禁用 _非标准全局_警告。另一个有趣的功能:**推送和弹出**
-- luacheck: push ignore foo
foo() -- 没有警告。
-- luacheck: pop
foo() -- 警告被发出。
这使您可以禁用规则或其他 lint 函数,然后快速撤消它。
忽略所有警告的最简单方法:
luacheck test.lua --only 0
以下是 luacheck 的警告列表:
https://luacheck.readthedocs.io/en/stable/warnings.html
你可以发现所有错误代码都以 0 开头。因此,我们可以使用 --only 0 来过滤掉所有警告。
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

使用 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"}
local function f(x) if x == "world" then print(17) elseif x ~= "hello" then error("bad value for x") end end
f("world") ```