Module:Log globals

From The Goon Show Depository

Revision as of 12:07, 30 September 2018 by en>Erutuon (return rawget and rawset so as not to interfere with operation of module)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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)