我正在使用一个加载Lua脚本的闭源应用程序,并允许通过修改这些脚本进行一些自定义。不幸的是,如果其中一个Lua脚本出现问题,应用程序不能很好地生成有用的日志输出(我得到的全部是'脚本失败')。
我意识到动态语言几乎可以抵抗静态代码分析,例如C ++代码的分析方式。
我希望,有一个工具可以通过Lua脚本运行,例如警告未在特定脚本的上下文中定义的变量。
基本上我正在寻找的是一个用于脚本的工具:
local a
print b
会输出:
warning: script.lua(1): local 'a' is not used'
warning: script.lua(2): 'b' may not be defined'
对于大多数事情来说它只能是警告,但这仍然有用!这样的工具存在吗?或者是一个具有内置功能的Lua IDE?
谢谢,克里斯
答案 0 :(得分:9)
Lua的自动静态代码分析通常不是一件容易的事。但是,对于一组有限的实际问题,这是非常可行的。
快速googling for "lua lint"会产生以下两个工具:lua-checker和Lua lint。
您可能希望根据自己的特定需求推出自己的工具。
Metalua是静态Lua代码分析最强大的工具之一。例如,请参阅metalint,这是全局变量使用分析的工具。
请不要犹豫,在Metalua mailing list上发布您的问题。那里的人通常非常有帮助。
答案 1 :(得分:3)
还有lua-inspect,它基于已经提到的metalua。我已将其集成到ZeroBrane Studio IDE中,这会产生与您期望的非常相似的输出。有关详细信息,请参阅此SO答案:https://stackoverflow.com/a/11789348/1442917。
答案 2 :(得分:2)
要检查全局变量,请参阅this lua-l posting。检查当地人更难。
答案 3 :(得分:1)
您需要找到lua的解析器(应该作为开源提供)并使用它将脚本解析为适当的AST树。使用该树和一个简单的可变可见性跟踪器来查找变量何时定义或未定义。
通常,范围规则很简单:
这将为您提供AST内部可见的变量。您可以使用此信息,如果您还检查表达式AST节点(读/写变量),您可以找到您的信息。
答案 4 :(得分:0)
我刚开始使用 luacheck
,它非常好!
第一个版本是 2015 年。