Module:Sandbox/Aidan9382: Difference between revisions

Content deleted Content added
preprocessing, even if not given in the return, will apply the magic words onto the page
that's cool
 
(38 intermediate revisions by the same user not shown)
Line 1:
if mw.title.getCurrentTitle().prefixedText == "Module:Sandbox/Aidan9382" then
require('Module:Module wikitext')._addText('{{User:Aidan9382/sandbox/header|nolint=y}}')
require('Module:Module wikitext')._addText('{{User:Aidan9382/sandbox/header|nolint=y}}')
end
require("strict")
local p = {}
 
function p.main(data)
return "<div style=text-align:right;font-size:80%>This does nothing as of right now. "..os.time().."</div>"
end
 
function p.Debug(arg1, arg2) -- General-purpose debugger/testing tool; combines multiple submodules
function p.iloveregexold(data)
-- Runs CodeAnalysis and Benchmarker
local r = "%[?%[?.-:([^{|]+)%]?%]?"
-- Benchmarker expects either p and the module name or the return function and the module name
local args = {mw.ustring.match("[[File:Hey.jpg|thumb|left|250px]]",r)}
-- This is to be required in the module, not `#invoke:`ed
return table.concat(args," -- ")
require('Module:Module wikitext')._addText('{{#invoke:Sandbox/Aidan9382/CodeAnalysis|main}}')
end
local Hook = require("Module:Sandbox/Aidan9382/Benchmarker")
function p.iloveregex(data)
local t = type(arg1) == "table" and arg1 or type(arg1) == "nil" and {} or nil
--This assumes [[ is present, and that therefore ]] is present
if t then
local r = "%[%[%a-:([^{|]+)(.+)%]%]"
return Hook(t, arg2 or "root module")
local args = {mw.ustring.match("[[File:Hey.jpg|thumb|left|250px|All for [[Module:Excerpt/portals]]|alt=text]]",r)}
elseif type(arg1) == "function" then
return table.concat(args," -- ")
return Hook(arg1, arg2 or "root module")
end
elseif arg1 ~= false then
 
mw.log("Aidan9382 | Unable to load Benchmarker (unexpected arg setup)")
function p.parentingLogic(frame)
--Note: Not even sure this thing goes beyond 1 parent, but have overcomplicated code anyways
local parentChain = {}
local newframe = frame
while true do
local parent = newframe:getParent()
if not parent then
break
end
newframe = parent
parentChain[#parentChain+1] = parent
end
local parentText = ""
for i,p in next,parentChain do
parentText = parentText .. " parent"..i.."="..p:getTitle()
end
return "frame="..frame:getTitle()..parentText.." mw.gct="..mw.title.getCurrentTitle().text
end
 
p["module-use"] = function(frame)
local parentLogicStuff = p.parentingLogic(frame)
local testlogic = "\n\n"
local i = 1
while true do
local c = frame.args["_test"..i]
if c then
testlogic = testlogic .. "_test"..i.."="..c
else
break
end
i = i + 1
end
return parentLogicStuff..testlogic
end
 
Line 77 ⟶ 48:
end
 
function p.testframe(options) --For the Debug console - easy way into template entry points
--To be invoked with the wanted arguments and page titles, or none for the default.
local f = mw.getCurrentFrame()
--Setting .args after testframe() has been called is allowed but discouraged over simply
f.getParent = function() return f end
--calling the function with provided arguments so as to match the real functionality
return f
local options = options or {}
local base = mw.getCurrentFrame()
 
local childArgs = options.args or {}
local parentArgs = options.parentArgs or childArgs
local childTitle = options.title or base:getTitle()
local parentTitle = options.parentTitle
 
local parentFrame = base:newChild({title=parentTitle, args=parentArgs})
local childFrame = parentFrame:newChild({title=childTitle, args=childArgs})
 
--Hide the extra parents, which would be unexpected outside of a debug setting
parentFrame.getParent = function() return nil end
--This 2nd hook is required, or else childFrame:getParent() somehow returns
--the unmodified parent frame, which doesn't have the getParent hook. :/
childFrame.getParent = function() return parentFrame end
 
return childFrame
end
 
function p.magicWordTests(frame)
local args = frame.args
if args.process == "y" then
frame:preprocess("{{DEFAULTSORT:XYZ}}")
elseif args.returnprocess == "y" then
return frame:preprocess("{{DEFAULTSORT:XYZ}}")
else
return "{{DEFAULTSORT:XYZ}}"
end
end
 
function p.substMagic(frame)
local arg = tonumber(frame.args[1]) or 0
return "{{safesubst:#invoke:Sandbox/Aidan9382|substMagic|" .. arg+1 .. "|~~~~}}"
end
 
function p.SpeedTest(frame)
local text = mw.text.unstripNoWiki(frame.args[1])
local outs = {}
local start = os.clock()
for i = 1, tonumber(frame.args[2]) or 10 do
local r = tostring(math.random())
outs[#outs+1] = string.sub(frame:preprocess(text..r),1,-(1+#r))
end
local duration = os.clock() - start
return "Time taken: " .. duration .. "\n\n" .. table.concat(outs, frame.args[3] or "\n")
end
 
function p.SpeedTestNoRandom(frame)
local text = mw.text.unstripNoWiki(frame.args[1])
local outs = {}
local start = os.clock()
for i = 1, tonumber(frame.args[2]) or 10 do
outs[#outs+1] = frame:preprocess(text)
end
local duration = os.clock() - start
return "Time taken: " .. duration .. "\n\n" .. table.concat(outs, frame.args[3] or "\n")
end
 
function p.AnalysisTest()
repeat
local x = 5
until x == 5
end
 
function p.WasteExecutionTime(frame)
local t = tonumber(frame.args[1]) or 0
local start = os.clock()
while os.clock()-start < t do end
return "Wasted " .. (os.clock()-start) .. " seconds"
end
 
p["+expensive"] = function()
mw.incrementExpensiveFunctionCount()
return ""
end
 
Line 89 ⟶ 135:
return setmetatable(p,{
__index=function(t,k)
mw.log("Attempted to access unknown function '"..tostring(k).."' from Module:Sandbox/Aidan9382\n"..debug.traceback())
return function()
return "<span class=\"error\">Attempted to access unknown function '"..tostring(k).."'</span>"