Module:Log globals
Appearance
| This module is rated as beta. It is considered ready for widespread use, but as it is still relatively new, it should be applied with some caution to ensure results are as expected. |
| This template may have no transclusions. This is because it is intended largely for debugging the use of globals. |
This module finds nil global variable use and adds the to the Lua log along with where they were read/written. This module is different from require('strict') as you can see all nil global variables that are being read/written to rather than only getting an error for the first problematic global variable. The arg variable is excluded.
See also
[edit]require('strict')- Creates error message for first encountered nil global read/write
local mt = getmetatable(_G) or {}
local function print(val)
if type(val) == "table" then
local printout = {}
local i = 1
for k, v in pairs(val) do
table.insert(printout, ("[%s] = %s"):format(tostring(k), tostring(v)) )
i = i + 1
if i > 5 then
table.insert(printout, "...")
break
end
end
printout = { table.concat(printout, ", ") }
table.insert(printout, 1, "{")
table.insert(printout, "}")
return table.concat(printout)
elseif type(val) == "string" then
return '"' .. val .. '"'
else
return tostring(val)
end
end
mt.__newindex = function (self, key, value)
if key ~= "arg" then
mw.log("Global variable " .. print(key) .. " was set to "
.. print(value) .. " somewhere:",
debug.traceback("", 2))
end
return rawset(self, key, value)
end
mt.__index = function (self, key)
if key ~= "arg" then
mw.log("Nil global variable " .. print(key) .. " was read somewhere:",
debug.traceback("", 2))
end
return rawget(self, key)
end
setmetatable(_G, mt)