Module:Introspection utils: Difference between revisions
mNo edit summary |
No edit summary |
||
| (5 intermediate revisions by the same user not shown) | |||
| Line 3: | Line 3: | ||
-- TODO: | -- TODO: | ||
-- - | -- Add support for detecting modules providing data, not just functions. | ||
-- Address edge case of lazy-loaded modules (loaded within a function) | |||
-- Common functions for module and template introspection. | -- Common functions for module and template introspection. | ||
| Line 82: | Line 83: | ||
end | end | ||
-- Normalize tags | -- Normalize tags | ||
text_to_scan = text_to_scan | text_to_scan = text_to_scan | ||
:gsub("<noinclude>.-</noinclude>", "") | :gsub("<noinclude>.-</noinclude>", "") | ||
| Line 90: | Line 91: | ||
:gsub("<onlyinclude>", "") | :gsub("<onlyinclude>", "") | ||
:gsub("</onlyinclude>", "") | :gsub("</onlyinclude>", "") | ||
-- Normalize: | -- Normalize subst/safesubst | ||
text_to_scan = text_to_scan | |||
:gsub("{{+%s*[Ss]afesubst:", "{{") | |||
:gsub("{{+%s*[Ss]ubst:", "{{") | |||
-- Normalize spaces | |||
text_to_scan = text_to_scan | text_to_scan = text_to_scan | ||
:gsub("[\r\n]", " ") | :gsub("[\r\n]", " ") | ||
| Line 324: | Line 328: | ||
return title and title.exists | return title and title.exists | ||
end | |||
local function normalize_module_name(name) | |||
if not name then return "" end | |||
-- Trim, replace spaces with underscores, remove namespace, lowercase first | |||
-- letter | |||
name = mw.text.trim(name) | |||
name = name:gsub(" ", "_") | |||
name = name:gsub("^[Mm]odule:", "") | |||
name = name:gsub("^%a", string.lower) | |||
return name | |||
end | end | ||
| Line 329: | Line 344: | ||
-- of invocations, from find_invokes, and mod_name is the module name. | -- of invocations, from find_invokes, and mod_name is the module name. | ||
function p.invocation_exists(invokes, mod_name) | function p.invocation_exists(invokes, mod_name) | ||
if type(invokes) ~= "table" then | |||
return false | |||
return | |||
end | end | ||
local target_mod = normalize_module_name(mod_name) | |||
for _, invoke in ipairs(invokes) do | for _, invoke in ipairs(invokes) do | ||
if | if normalize_module_name(invoke["module"]) == target_mod then | ||
return true | return true | ||
end | end | ||
end | end | ||
return false | return false | ||
end | |||
function p.tester() | |||
local wikitext = p.get_and_preprocess_content("Template", "MOS intro") | |||
local invokes = p.find_invokes(wikitext) | |||
return p.invocation_exists(invokes, "MOS intro") | |||
end | end | ||
return p | return p | ||