Jump to content

Module:Pcall

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Awesome Aasim (talk | contribs) at 19:10, 10 March 2025 (implement module that exposes pcall for suppressing errors when calling modules from a frame). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
(diff) ← Previous revision | Latest revision (diff) | Newer revision → (diff)

--- This module attempts to suppress the display of any error
-- @module pcall
-- @alias p
-- @release alpha

local p = {}

--- Main function.
-- @param {table} frame Calling frame.
-- @return Wikitext output.
function main(modToCall, frame)
	local args = frame.args
	local pckg = frame.args[1]
	local fail = frame.args["_fail"] or ''
	local includeError = frame.args["_error"]
	
	for k,v in ipairs(frame.args) do
		if k - 1 >= 1 then
			frame.args[k - 2] = v
		end
	end
	
	-- get rid of first underscore for arguments "__fail" and "__includeerror"
	for k,v in pairs(frame.args) do
		if k:find(k, "__fail") or k:find(k, "__error") then
			frame.args[k:sub(-k:len() - 1)] = v
			frame.args[k] = nil
		end
	end

	local toCall = require("Module:" .. modToCall)[pckg]
	local success, result = pcall(toCall, frame)
	if success then
		return result
	else
		if includeError then
			return result
		else
			return fail
		end
	end
end

setmetatable(p, {
	__index = function(t, index)
		return function(frame)
			return main(index, frame)
		end
	end
})

return p