Module:Module introspection: Difference between revisions
normalize arg names to snake case |
ArrowHead294 (talk | contribs) mNo edit summary |
||
| (19 intermediate revisions by 2 users not shown) | |||
| Line 1: | Line 1: | ||
-- This module follows [[User:Ganaram inukshuk/Provisional style guide for Lua]] | -- This module follows [[User:Ganaram inukshuk/Provisional style guide for Lua]] | ||
local getArgs = require("Module:Arguments").getArgs | local getArgs = require("Module:Arguments").getArgs | ||
local iutils = require("Module:Introspection utils") | |||
local yesno = require("Module:Yesno") | |||
local p = {} | local p = {} | ||
-- Helper function | -- Helper function | ||
| Line 207: | Line 13: | ||
local lines = {} | local lines = {} | ||
table.insert(lines, '{| class="wikitable sortable"') | table.insert(lines, '{| class="wikitable sortable"') | ||
table.insert(lines, "|+ Lua modules | table.insert(lines, "|+ style=\"font-size: 105%;\" | " .. string.format("Lua modules required (%d)", #module_deps)) | ||
table.insert(lines, "|-") | |||
table.insert(lines, "! Variable") | table.insert(lines, "! Variable") | ||
table.insert(lines, "! Module") | table.insert(lines, "! Module") | ||
| Line 256: | Line 63: | ||
--table.insert(lines, string.format("'''Module:%s''' provides %d function(s):", module_name, #module_funcs)) | --table.insert(lines, string.format("'''Module:%s''' provides %d function(s):", module_name, #module_funcs)) | ||
table.insert(lines, '{| class="wikitable sortable"') | table.insert(lines, '{| class="wikitable sortable"') | ||
table.insert(lines, "|+ | table.insert(lines, "|+ style=\"font-size: 105%;\" | " .. string.format("Functions provided (%d)", #module_funcs)) | ||
table.insert(lines, "|-") | |||
table.insert(lines, "! Line") | table.insert(lines, "! Line") | ||
table.insert(lines, "! Function") | table.insert(lines, "! Function") | ||
| Line 295: | Line 103: | ||
if info.name == main_function then | if info.name == main_function then | ||
func = func .. " '''(main)'''" | func = func .. " '''(main)'''" | ||
end | |||
-- If the function is invokable (it has one param called "frame"), add | |||
-- "invokable" to that cell | |||
if #params == 1 and params[1] == "frame" then | |||
func = func .. " '''(invokable)'''" | |||
end | end | ||
| Line 317: | Line 131: | ||
local main_function = args["main_function"] | local main_function = args["main_function"] | ||
local descriptions = args["descriptions" ] | local descriptions = args["descriptions" ] | ||
local is_doc = args["is_doc"] | |||
-- Check whether this page is a docpage | |||
-- If so, don't bother | |||
if is_doc then | |||
return "''To see introspection summary, see this module's main page.''" | |||
end | |||
-- Preprocess module and blank-out comments | -- Preprocess module and blank-out comments | ||
local title = mw.title.new('Module:' .. module_name) | --local title = mw.title.new('Module:' .. module_name) | ||
local code = title:getContent() | --local code = title:getContent() | ||
code = | --code = iutils.preprocess_code(code) -- Blank-out comments | ||
local code = iutils.get_and_preprocess_content("Module", module_name) | |||
-- Get dependencies and their functions used, then build a table | -- Get dependencies and their functions used, then build a table | ||
local module_deps = | local module_deps = iutils.find_dependencies(code) | ||
local dep_table = p.make_dependency_table(module_deps) | local dep_table = p.make_dependency_table(module_deps) | ||
-- Get module's functions, then build a table using that information | -- Get module's functions, then build a table using that information | ||
local module_funcs = | local module_funcs = iutils.find_functions(code) | ||
local func_table = p.make_function_table(module_name, module_funcs, descriptions, main_function) | local func_table = p.make_function_table(module_name, module_funcs, descriptions, main_function) | ||
| Line 335: | Line 157: | ||
local lines = { | local lines = { | ||
'{| class="wikitable mw-collapsible"', | '{| class="wikitable mw-collapsible"', | ||
'! colspan="2" | Introspection summary for Module: | '|-', | ||
'! colspan="2" style="font-size: 105%;" | ' .. string.format("Introspection summary for Module:%s ", module_name), | |||
"|-", | "|-", | ||
'| style="vertical-align:top; border-right:none" | '| style="vertical-align: top; border-right: none;" | ', | ||
func_table, | func_table, | ||
'| style="vertical-align:top; border-left:none" |', | '| style="vertical-align: top; border-left: none;" | ', | ||
dep_table, | dep_table, | ||
"|}" | "|}" | ||
| Line 355: | Line 178: | ||
-- If no descriptions were provided, add text below that points to the code. | -- If no descriptions were provided, add text below that points to the code. | ||
if not has_descriptions then | if not has_descriptions then | ||
table.insert(lines, "''No function descriptions were provided. | table.insert(lines, "''No function descriptions were provided. The Lua code may have further information.''") | ||
end | end | ||
| Line 370: | Line 193: | ||
-- Strip trailing "/doc" if the template is used on a documentation subpage | -- Strip trailing "/doc" if the template is used on a documentation subpage | ||
module_name = module_name:gsub("/doc$", "") | --module_name = module_name:gsub("/doc$", "") | ||
-- Check whether page is the doc page | |||
-- To ensure proper referencing, do not display introspection on a docpage. | |||
local is_doc = string.find(module_name, "/doc$") | |||
-- Normalize module name so it can be used to find the main function, which | -- Normalize module name so it can be used to find the main function, which | ||
| Line 391: | Line 218: | ||
["module_name" ] = module_name, | ["module_name" ] = module_name, | ||
["main_function"] = main_function, | ["main_function"] = main_function, | ||
["descriptions" ] = func_descriptions | ["descriptions" ] = func_descriptions, | ||
["is_doc"] = is_doc | |||
}) | }) | ||
-- Debugger option to show generated WikiText | |||
local wtext = yesno(frame.args["wtext"] or args["wtext"]) | |||
if wtext == true then | |||
result = "<syntaxhighlight lang=\"wikitext\">" .. result .. "</syntaxhighlight>" | |||
end | |||
return frame:preprocess(result) | return frame:preprocess(result) | ||
end | end | ||
return p | return p | ||