Module:Module introspection: Difference between revisions
fix duplicates in functions used column Tag: Reverted |
m bugfix worked too well, now it thinks it doesnt use arguments when it does Tag: Reverted |
||
| Line 64: | Line 64: | ||
local deps = deps or p.list_dependencies(module_name) | local deps = deps or p.list_dependencies(module_name) | ||
local results = {} | local results = {} | ||
-- Helper: escape Lua pattern chars in dependency names | |||
local function escape_pattern(s) | |||
return (s:gsub("(%W)", "%%%1")) | |||
end | |||
-- Step 2: for each dependency, find all variables referring to it | -- Step 2: for each dependency, find all variables referring to it | ||
for _, dep in ipairs(deps) do | for _, dep in ipairs(deps) do | ||
results[dep] = results[dep] or {} | results[dep] = results[dep] or {functions = {}, variables = {}} | ||
-- | -- Pattern for require statements (case-insensitive) | ||
local depPattern = escape_pattern(dep) | |||
for var, entry in content:gmatch( | for var, entry in content:gmatch( | ||
"local%s+([%w_]+)%s*=%s*require%s*%(%s*['\"]Module:" .. | "local%s+([%w_]+)%s*=%s*require%s*%(%s*['\"]Module:" .. depPattern .. "['\"]%s*%)%.?([%w_]*)" | ||
) do | ) do | ||
local used = {} | local used = {} | ||
if entry ~= "" then | if entry ~= "" then | ||
-- Case: module returns a function | -- Case: module returns a single function (e.g. var = require("Module:Dep").func) | ||
for _ in content:gmatch(var .. "%s*%(") do | for _ in content:gmatch(var .. "%s*%(") do | ||
used[entry] = true | used[entry] = true | ||
end | end | ||
else | else | ||
-- Case: module returns a table | -- Case: module returns a table (e.g. var.func()) | ||
for func in content:gmatch(var .. "%.(%w+)%s*%(") do | for func in content:gmatch(var .. "%.(%w+)%s*%(") do | ||
used[func] = true | used[func] = true | ||
| Line 88: | Line 94: | ||
-- Merge deduplicated results | -- Merge deduplicated results | ||
for f in pairs(used) do | |||
for f in pairs(used) do | results[dep].functions[f] = true | ||
end | |||
table.insert(results[dep].variables, { | table.insert(results[dep].variables, { | ||
variable = var, | variable = var, | ||
| Line 113: | Line 117: | ||
return results | return results | ||
end | end | ||
-- Helper function | -- Helper function | ||