Difference between revisions of "Module:Log globals"
Jump to navigation
Jump to search
blackwiki>Erutuon (from wikt:Module:log globals) |
m (4 revisions imported) |
||
| (3 intermediate revisions by one other user not shown) | |||
| Line 26: | Line 26: | ||
mt.__newindex = function (self, key, value) | 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 | end | ||
mt.__index = function (self, key) | mt.__index = function (self, key) | ||
| − | mw.log("Nil global variable " .. print(key) .. " was read somewhere:", | + | if key ~= "arg" then |
| − | + | mw.log("Nil global variable " .. print(key) .. " was read somewhere:", | |
| + | debug.traceback("", 2)) | ||
| + | end | ||
| + | return rawget(self, key) | ||
end | end | ||
setmetatable(_G, mt) | setmetatable(_G, mt) | ||
Latest revision as of 07:50, 27 September 2020
| 40x40px | This module is rated as beta, and is ready for widespread use. It is still new and should be used with some caution to ensure the results are as expected. |
This module finds nil globals and adds the to the lua log along with where they were read/written. This module is different from Module:No globals as you can see all nil global variables that are being read/written to rather then only getting an error for the first problematic global variable. The arg variable is excluded.
See also
- Module:No globals - 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)