A documentação para este módulo pode ser criada na página Módulo:debug/track/doc
-- Transclusion-based tracking as subpages of ].
-- Tracked pages can be found at ].
local error = error
local find = string.find
local makeTitle = mw.title.makeTitle
local sub = string.sub
local type = type
local memo = {}
local function track(key)
-- Return if memoized.
if memo then
return
end
-- Throw an error if `key` isn't a string.
local key_type = type(key)
if key_type ~= "string" then
error("Tracking keys supplied to ] must be strings; received " .. key_type .. ".", 3)
end
-- makeTitle returns nil for invalid titles, but "#" is treated as a
-- fragment separator (e.g. "foo#bar" generates the title "foo"), so we
-- need to manually exclude it.
local title = not find(key, "#", 1, true) and makeTitle(4, "Tracking/" .. key)
if title then
-- Normalize the key, by getting title.text and removing the initial
-- "Tracking/". Normally this will be the same as title.subpageText,
-- but subpageText will be wrong if there are further slashes, so we
-- can't use it.
local normalized = sub(title.text, 10)
-- Return if the normalized form has been memoized.
if memo then
return
end
-- Otherwise, transclude the page. Getting the raw page content is the
-- fastest way to trigger transclusion, as it avoids any parser
-- expansion of the target page.
title:getContent()
-- Memoize normalized form.
memo = true
else
-- Track uses of invalid keys. Replace with error message once all have
-- been eliminated.
-- ]
track("debug/track/invalid key")
-- error("Tracking key \"" .. key .. "\" supplied to ] is invalid: key must be a ].", 3)
end
memo = true
end
return function(input)
if input == nil then
error("No tracking key supplied to ].", 2)
elseif type(input) ~= "table" then
track(input)
return true
end
local key = input
if key == nil then
error("No tracking keys in table supplied to ].", 2)
end
local i = 1
repeat
track(key)
i = i + 1
key = input
until key == nil
return true
end