Module:Template introspection: Difference between revisions

Ganaram inukshuk (talk | contribs)
No edit summary
Ganaram inukshuk (talk | contribs)
mNo edit summary
 
(13 intermediate revisions by the same user not shown)
Line 5: Line 5:


-- Inspects a template for any modules' functions being invoked.
-- Inspects a template for any modules' functions being invoked.
-- TODO: write wrapper


-- Helper function: preprocess wikitext so that:
-- Helper function: preprocess wikitext so that:
Line 36: Line 35:
:gsub("%s+", " ")
:gsub("%s+", " ")
:match("^%s*(.-)%s*$")
:match("^%s*(.-)%s*$")
-- Normalize more by removing subst, safesubst, and any extra curly brackets
normalized = normalized
:gsub("{{{|safesubst:}}}", "")  -- Remove {{{{|safesubst:}}} if used
:gsub("{{{|subst:}}}", "")      -- Remove {{{{|subst:}}} if used
:gsub("{{{{", "{{")            -- Collapse excessive curly brackets
:gsub("}}}}", "}}")            -- Collapse excessive curly brackets


return normalized
return normalized
Line 54: Line 60:
return results
return results
end
function p.make_hatnote(invokes)
local hatnote = ""
if #invokes == 0 then
hatnote = "This template does not invoke any functions."
return string.format(":''%s''\n", hatnote)
else
hatnote = "This template invokes the following functions:"
local calls = {}
for _, call in ipairs(invokes) do
table.insert(calls, string.format("'''%s''' from [[Module:%s]]", call.func, call.module))
end
return string.format(":''%s %s''\n", hatnote, table.concat(calls, ", "))
end
end
end


function p._template_introspection(args)
function p._template_introspection(args)
local template_name = args["Template Name"]
local template_name = args["template_name"]


-- Get template wikitext
-- Get template wikitext
Line 65: Line 86:
end
end


-- Get template's code and preprocess
local wikitext = titleObj:getContent()
local wikitext = titleObj:getContent()
wikitext = p.preprocess_wikitext(wikitext)
wikitext = p.preprocess_wikitext(wikitext)
Line 72: Line 94:
end
end
-- Run invoke finder
-- Run invoke finder and return as a hatnote
local invokes = p.find_invokes(wikitext)
local invokes = p.find_invokes(wikitext)
return p.make_hatnote(invokes)
-- Format result for readability (or later, you could return a table)
local out = {}
table.insert(out, "== Invoked modules ==")
for _, call in ipairs(invokes) do
table.insert(out, string.format("* %s → %s", call.module, call.func))
end
if #invokes == 0 then
table.insert(out, "No #invoke calls found.")
end
return table.concat(out, "\n")
end
end


Line 92: Line 102:
local args = getArgs(frame) or {}
local args = getArgs(frame) or {}
-- Get template name, and strip /doc for proper display on /doc subpage
-- Get template name, with namespace, and strip /doc if present
args["Template Name"] = args["Template Name"] or mw.title.getCurrentTitle().text
args["template_name"] = args["template_name"] or mw.title.getCurrentTitle().prefixedText
args["Template Name"] = args["Template Name"]:gsub("/doc$", "")
args["template_name"] = args["template_name"]:gsub("/doc$", "")
return frame:preprocess(p._template_introspection(args))
return p._template_introspection(args)
end
end


return p
return p