Module:Check for clobbered parameters

local p = {}

local function trim(s)

return s:match('^%s*(.-)%s*$')

end

local function isnotempty(s)

return s and s:match('%S')

end

function p.check(frame)

local args = frame.args

local pargs = frame:getParent().args

local checknested = isnotempty(args['nested'])

local delimiter = isnotempty(args['delimiter']) and args['delimiter'] or ';'

local argpairs = {}

for k, v in pairs(args) do

if type(k) == 'number' then

local plist = mw.text.split(v, delimiter)

local pfound = {}

local count = 0

for ii, vv in ipairs(plist) do

vv = trim(vv)

if checknested and pargs[vv] or isnotempty(pargs[vv]) then

count = count + 1

table.insert(pfound, vv)

end

end

if count > 1 then

table.insert(argpairs, pfound)

end

end

end

local warnmsg = {}

local res = ''

local cat = ''

if args['cat'] and mw.ustring.match(args['cat'],'^[Cc][Aa][Tt][Ee][Gg][Oo][Rr][Yy]:') then

cat = args['cat']

end

local template = args['template'] and ' in ' .. args['template'] or ''

if #argpairs > 0 then

for i, v in ipairs( argpairs ) do

table.insert(

warnmsg,

mw.ustring.format(

'Using more than one of the following parameters%s: %s.',

template,

table.concat(v, ', ')

)

)

if cat ~= '' then

res = res .. '' .. (v[1] == and ' ' or ) .. v[1] .. ''

end

end

end

if #warnmsg > 0 then

res = require('Module:If preview')._warning({

table.concat(warnmsg, '
')

}) .. res

end

return res

end

return p