Mòdul:log globals

De Viccionari
Icona de documentació de mòdul Documentació del mòdul[mostra] [modifica] [refresca]

A continuació es mostra la documentació transclosa de la subpàgina /ús. [salta a la caixa de codi]


Aquest és un mòdul de depuració que detecta variables incorrectament assignades com a globals. És una versió menys dràstica que la llibreria strict que mostra un error en la mateixa situació.

Genera un registre Lua després que el mòdul s’hagi carregat, a més d’altres mòduls de suport si és el cas. No detecta duplicacions, el mateix missatge pot aparèixer diverses vegades si és invocat per diverses plantilles d’una pàgina.

Aquest mòdul no hauria d’estar inclòs en cap altre. El seu propòsit és de depuració, no perquè s’executi cada vegada.

Ús:

  • Afegiu require("Module:log globals") temporalment al principi d’un mòdul.
  • Previsualitzeu una pàgina posant-la en la caixa "Previsualització d'una pàgina amb aquesta plantilla" i cliqueu el botó "Mostra previsualització".
  • Al final de la pàgina de previsualització, obriu la caixa "Perfil de dades de l'analitzador:", si no era oberta. En l’etiqueta "Lua logs" cliqueu l’enllaç "Amplia". Aquí es troba el registre de variables globals. Pot tractar-se d’una errada en el nom o la manca de definició com a local.
  • Després de corregir aquestes variables, i abans de desar res, elimineu la línia inicial require("Module:log globals").

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)