扫描 Lua 文件中的无效函数名称(魔兽世界)
Scan Lua file for invalid function names (World of Warcraft)
所以我有一个 Wow 插件,它有很多很多行。有时,暴雪会从游戏中删除 Lua 函数,而我并不总是确定我在插件中调用的函数是否仍然有效。
有没有一种方法可以扫描整个 Lua 文件以查找不再存在的函数?
我知道我可以做这样的事情:
if not RemovedFunction then print("Function does not exist") end
但这需要我一次检查每个函数名称,所以这是不现实的(有数百个)。
我希望能够扫描整个 Lua 文件,并在我调用的任何函数名称不再出现在魔兽世界中时提醒我 API。
解决方案可以用任何语言编写(不必是 Lua 脚本,尽管那样更好)。
一个好的 API 会在他们的变更日志中列出删除的函数名称。只需在您的脚本中搜索这些名称即可。
您可以使用像 luacheck 这样的 linter 来查找脚本中未定义的内容。这将需要您维护现有函数名称的列表。
这也适用于其他全局变量。
或者您在脚本中搜索函数调用并在现有函数名称列表中搜索该名称。或者您检查此名称在您的环境中是否为 nil。函数调用是后跟可选空格和 (
、"
或 {
之一的任何名称。
对于函数,这是微不足道的,对于其他变量,它变得有点复杂,您最终将编写自己的 linter,因此您也可以使用现有的 linter。
您可以在此处找到更新日志
- https://wow.gamepedia.com/Patch_9.0.1/API_changes
- https://github.com/Ketho/BlizzardInterfaceResources/compare/8.3.7...9.0.1#diff-ca64e26bbd77a0dd7b6d3699c75cbf60dd7ac03e379b8085dd7efcca4a52510e
GitHub 项目展示了如何扫描这些函数,它本质上只是扫描 _G[] 和暴雪的 FrameXML 代码
您还可以将 zip 上传到 Globe,它会告诉您任何已删除的 API,例如
如果函数名是nil则扫描
function isFunctionExist(functionName) --Function name in string
local func = load("return "..functionName")
if func == nil then
error("Invalid function name!") --There an invalid letter in your function name that cause load unable to load
end
return type(func()) == "function"
end
它也适用于任何 lua 解释器,不仅在魔兽世界插件中
Lua 会导致 attempt to call nil value
或类似的
所以在 运行 之前我们检查它是 nil 还是函数
load("return "..functionName)
将 return functionName 变量内容即使它为 nil 然后我们用 type
检查它是否存在函数它 return "function"
type(func()) == "function"
这一行做检查
所以我有一个 Wow 插件,它有很多很多行。有时,暴雪会从游戏中删除 Lua 函数,而我并不总是确定我在插件中调用的函数是否仍然有效。
有没有一种方法可以扫描整个 Lua 文件以查找不再存在的函数?
我知道我可以做这样的事情:
if not RemovedFunction then print("Function does not exist") end
但这需要我一次检查每个函数名称,所以这是不现实的(有数百个)。
我希望能够扫描整个 Lua 文件,并在我调用的任何函数名称不再出现在魔兽世界中时提醒我 API。
解决方案可以用任何语言编写(不必是 Lua 脚本,尽管那样更好)。
一个好的 API 会在他们的变更日志中列出删除的函数名称。只需在您的脚本中搜索这些名称即可。
您可以使用像 luacheck 这样的 linter 来查找脚本中未定义的内容。这将需要您维护现有函数名称的列表。 这也适用于其他全局变量。
或者您在脚本中搜索函数调用并在现有函数名称列表中搜索该名称。或者您检查此名称在您的环境中是否为 nil。函数调用是后跟可选空格和 (
、"
或 {
之一的任何名称。
对于函数,这是微不足道的,对于其他变量,它变得有点复杂,您最终将编写自己的 linter,因此您也可以使用现有的 linter。
您可以在此处找到更新日志
- https://wow.gamepedia.com/Patch_9.0.1/API_changes
- https://github.com/Ketho/BlizzardInterfaceResources/compare/8.3.7...9.0.1#diff-ca64e26bbd77a0dd7b6d3699c75cbf60dd7ac03e379b8085dd7efcca4a52510e
GitHub 项目展示了如何扫描这些函数,它本质上只是扫描 _G[] 和暴雪的 FrameXML 代码
您还可以将 zip 上传到 Globe,它会告诉您任何已删除的 API,例如
如果函数名是nil则扫描
function isFunctionExist(functionName) --Function name in string
local func = load("return "..functionName")
if func == nil then
error("Invalid function name!") --There an invalid letter in your function name that cause load unable to load
end
return type(func()) == "function"
end
它也适用于任何 lua 解释器,不仅在魔兽世界插件中
Lua 会导致 attempt to call nil value
或类似的
所以在 运行 之前我们检查它是 nil 还是函数
load("return "..functionName)
将 return functionName 变量内容即使它为 nil 然后我们用 type
检查它是否存在函数它 return "function"
type(func()) == "function"
这一行做检查