Module:Arguments: Difference between revisions

From Halopedia, the Halo wiki

No edit summary
mNo edit summary
 
(3 intermediate revisions by the same user not shown)
Line 33: Line 33:
deprecated[ vl ] = true
deprecated[ vl ] = true
end
end
for k, v in pairs( args.aliases or {} ) do
for i, v in ipairs( args.valid or {} ) do
local kl = mw.ustring.lower( tostring( k ) )
local vl = mw.ustring.lower( tostring( v ) )
local vl = mw.ustring.lower( tostring( v ) )
valid[ vl ] = true
if valid[vl] then
valid[ kl ] = true
end
end
end
Line 49: Line 51:
for k, v in pairs( parent.args ) do
for k, v in pairs( parent.args ) do
local kl = mw.ustring.lower( tostring( k ) )
local kl = mw.ustring.lower( tostring( k ) )
if deprecated[ kl ] then
usingDeprecated[ kl ] = true
end
kl = args.aliases[ kl ] or kl
kl = args.aliases[ kl ] or kl
missingRequired[ kl ] = nil
missingRequired[ kl ] = nil
Line 57: Line 62:
if deprecated[ kl ] then
if deprecated[ kl ] then
usingDeprecated[ kl ] = true
usingDeprecated[ kl ] = true
end
if not utils.empty( preprocessed[ kl ] ) then
clobbered[ kl ] = true
end
end
preprocessed[ kl ] = v
preprocessed[ kl ] = v
Line 69: Line 77:
if deprecated[ k ] then
if deprecated[ k ] then
usingDeprecated[ k ] = true
usingDeprecated[ k ] = true
end
if not utils.empty( preprocessed[ kl ] ) then
clobbered[ kl ] = true
end
end
preprocessed[ k ] = v
preprocessed[ k ] = v
end
end
local foundError = false
local out = ''
local out = ''
if next( missingRequired ) then
if next( missingRequired ) then
local missing = ''
local list = ''
for k, v in pairs( missingRequired ) do
for k, v in pairs( missingRequired ) do
missing = missing .. ', "' .. k .. '"'
list = list .. ', "' .. k .. '"'
end
end
missing = mw.ustring.sub( missing, 3 )
list = mw.ustring.sub( list, 3 )
out = out .. utils.error(
out = out .. utils.error(
'Template missing required fields: ' .. missing,
'Template missing required fields: ' .. list,
'template',
'template',
'Pages containing missing template parameter errors')
'Pages containing missing template parameter errors')
end
end
if next( missingRecommended ) then
if next( missingRecommended ) then
local missing = ''
local list = ''
for k, v in pairs( missingRecommended ) do
for k, v in pairs( missingRecommended ) do
missing = missing .. ', "' .. k .. '"'
list = list .. ', "' .. k .. '"'
end
end
missing = mw.ustring.sub( missing, 3 )
list = mw.ustring.sub( list, 3 )
out = out .. utils.warning(
out = out .. utils.warning(
'Template missing required fields: ' .. missing,
'Template missing recommended fields: ' .. list,
'template',
'template',
'Pages containing missing template parameter warnings')
'Pages containing missing template parameter warnings')
end
end
if next( usingInvalid ) then
if next( usingInvalid ) then
local invalid = ''
local list = ''
for k, v in pairs( missingRecommended ) do
invalid = invalid .. ', "' .. k .. '"'
end
invalid = mw.ustring.sub( invalid, 3 )
out = out .. utils.error(
'Template using invalid/disallowed fields: ' .. invalid,
'template',
'Pages containing invalid template parameter errors')
end
if next( usingInvalid ) then
local invalid = ''
for k, v in pairs( usingInvalid ) do
for k, v in pairs( usingInvalid ) do
invalid = invalid .. ', "' .. k .. '"'
list = list .. ', "' .. k .. '"'
end
end
invalid = mw.ustring.sub( invalid, 3 )
list = mw.ustring.sub( list, 3 )
out = out .. utils.error(
out = out .. utils.error(
'Template using invalid/disallowed fields: ' .. invalid,
'Template using invalid/disallowed fields: ' .. list,
'template',
'template',
'Pages containing invalid template parameter errors')
'Pages containing invalid template parameter errors')
end
end
if next( usingDeprecated ) then
if next( usingDeprecated ) then
local deprecated = ''
local list = ''
for k, v in pairs( usingDeprecated ) do
for k, v in pairs( usingDeprecated ) do
deprecated = deprecated .. ', "' .. k .. '"'
list = list .. ', "' .. k .. '"'
end
end
deprecated = mw.ustring.sub( deprecated, 3 )
list = mw.ustring.sub( list, 3 )
out = out .. utils.warning(
out = out .. utils.warning(
'Template using deprecated fields: ' .. deprecated,
'Template using deprecated fields: ' .. list,
'template',
'template',
'Pages containing deprecated template parameter warnings')
'Pages containing deprecated template parameter warnings')
end
if next( clobbered ) then
local list = ''
for k, v in pairs( clobbered ) do
list = list .. ', "' .. k .. '"'
end
list = mw.ustring.sub( list, 3 )
out = out .. utils.error(
'Template using multiple aliases for the same field(s): ' .. list,
'template',
'Pages containing overwritten template parameter errors')
end
end

Latest revision as of 06:18, January 23, 2022

Documentation for this module may be created at ModuleDoc:Arguments

local utils = require( 'Module:Utils' )

local arguments = {}

function arguments.preprocess( frame, args )
	
	-- TODO: Complete error messages, make sure that in the preprocessed version, the keys for numbered args are still numbered
	
	local parent = frame:getParent()
	
	local valid = {}
	local required = {}
	local recommended = {}
	local deprecated = {}
	
	for i, v in ipairs( args.valid or {} ) do
		local vl = mw.ustring.lower( tostring( v ) )
		valid[ vl ] = true
	end
	for i, v in ipairs( args.required or {} ) do
		local vl = mw.ustring.lower( tostring( v ) )
		valid[ vl ] = true
		required[ vl ] = true
	end
	for i, v in ipairs( args.recommended or {} ) do
		local vl = mw.ustring.lower( tostring( v ) )
		valid[ vl ] = true
		recommended[ vl ] = true
	end
	for i, v in ipairs( args.deprecated or {} ) do
		local vl = mw.ustring.lower( tostring( v ) )
		valid[ vl ] = true
		deprecated[ vl ] = true
	end
	for k, v in pairs( args.aliases or {} ) do
		local kl = mw.ustring.lower( tostring( k ) )
		local vl = mw.ustring.lower( tostring( v ) )
		if valid[vl] then
			valid[ kl ] = true
		end
	end
	
	local preprocessed = {}
	
	local missingRequired = required
	local missingRecommended = recommended
	local usingDeprecated = {}
	local usingInvalid = {}
	local clobbered = {}
	
	for k, v in pairs( parent.args ) do
		local kl = mw.ustring.lower( tostring( k ) )
		if deprecated[ kl ] then
			usingDeprecated[ kl ] = true
		end
		kl = args.aliases[ kl ] or kl
		missingRequired[ kl ] = nil
		missingRecommended[ kl ] = nil
		if not valid[ kl ] then
			usingInvalid[ kl ] = true
		end
		if deprecated[ kl ] then
			usingDeprecated[ kl ] = true
		end
		if not utils.empty( preprocessed[ kl ] ) then
			clobbered[ kl ] = true
		end
		preprocessed[ kl ] = v
	end
	for i, v in ipairs( parent.args ) do
		local k = args.aliases[ i ] or i
		missingRequired[ k ] = nil
		missingRecommended[ k ] = nil
		if not valid[ k ] then
			usingInvalid[ k ] = true
		end
		if deprecated[ k ] then
			usingDeprecated[ k ] = true
		end
		if not utils.empty( preprocessed[ kl ] ) then
			clobbered[ kl ] = true
		end
		preprocessed[ k ] = v
	end
	
	local out = ''
	if next( missingRequired ) then
		local list = ''
		for k, v in pairs( missingRequired ) do
			list = list .. ', "' .. k .. '"'
		end
		list = mw.ustring.sub( list, 3 )
		out = out .. utils.error(
			'Template missing required fields: ' .. list,
			'template',
			'Pages containing missing template parameter errors')
	end
	if next( missingRecommended ) then
		local list = ''
		for k, v in pairs( missingRecommended ) do
			list = list .. ', "' .. k .. '"'
		end
		list = mw.ustring.sub( list, 3 )
		out = out .. utils.warning(
			'Template missing recommended fields: ' .. list,
			'template',
			'Pages containing missing template parameter warnings')
	end
	if next( usingInvalid ) then
		local list = ''
		for k, v in pairs( usingInvalid ) do
			list = list .. ', "' .. k .. '"'
		end
		list = mw.ustring.sub( list, 3 )
		out = out .. utils.error(
			'Template using invalid/disallowed fields: ' .. list,
			'template',
			'Pages containing invalid template parameter errors')
	end
	if next( usingDeprecated ) then
		local list = ''
		for k, v in pairs( usingDeprecated ) do
			list = list .. ', "' .. k .. '"'
		end
		list = mw.ustring.sub( list, 3 )
		out = out .. utils.warning(
			'Template using deprecated fields: ' .. list,
			'template',
			'Pages containing deprecated template parameter warnings')
	end
	if next( clobbered ) then
		local list = ''
		for k, v in pairs( clobbered ) do
			list = list .. ', "' .. k .. '"'
		end
		list = mw.ustring.sub( list, 3 )
		out = out .. utils.error(
			'Template using multiple aliases for the same field(s): ' .. list,
			'template',
			'Pages containing overwritten template parameter errors')
	end
	
	return preprocessed, out
end

return arguments