Дополнительные действия
DarkMuse (обсуждение | вклад) Новая страница: «local Array = require('Module:Array') local Error = require('Module:Error') local Json = require('Module:Json') local PageVariableNamespace = require('Module:PageVariableNamespace') local Table = require('Module:Table') local pageVars = PageVariableNamespace('ErrorStash') local _local_errors = {} local ErrorExt = {} ---@param error Error function ErrorExt.logAndStash(error) ErrorExt.Stash.add(error) ErrorExt.log(error) end ---@param error Error functi...» |
DarkMuse (обсуждение | вклад) Нет описания правки |
||
| Строка 34: | Строка 34: | ||
function ErrorExt.makeFullDetails(error) | function ErrorExt.makeFullDetails(error) | ||
local parts = Array.extend( | local parts = Array.extend( | ||
error.header, | |||
error.message, | |||
ErrorExt.makeFullStackTrace(error), | |||
ErrorExt.printExtraProps(error) | |||
) | ) | ||
return table.concat(parts, '\n') | return table.concat(parts, '\n') | ||
Версия от 19:04, 9 октября 2024
Для документации этого модуля может быть создана страница Модуль:Error/Ext/doc
local Array = require('Module:Array')
local Error = require('Module:Error')
local Json = require('Module:Json')
local PageVariableNamespace = require('Module:PageVariableNamespace')
local Table = require('Module:Table')
local pageVars = PageVariableNamespace('ErrorStash')
local _local_errors = {}
local ErrorExt = {}
---@param error Error
function ErrorExt.logAndStash(error)
ErrorExt.Stash.add(error)
ErrorExt.log(error)
end
---@param error Error
function ErrorExt.log(error)
mw.log(ErrorExt.makeFullDetails(error))
mw.log()
end
---@param tbl table
---@return table
---@overload fun(tbl: any): {}
local function tableOrEmpty(tbl)
return type(tbl) == 'table' and tbl or {}
end
---@param error Error
---@return string
function ErrorExt.makeFullDetails(error)
local parts = Array.extend(
error.header,
error.message,
ErrorExt.makeFullStackTrace(error),
ErrorExt.printExtraProps(error)
)
return table.concat(parts, '\n')
end
---Builds a string for fields not covered by the other functions in this module.
---Returns nil if there are no extra fields.
---@param error Error
---@return string?
function ErrorExt.printExtraProps(error)
local extraProps = Table.copy(error)
extraProps.message = nil
extraProps.header = nil
extraProps.stacks = nil
extraProps.originalErrors = nil
if type(extraProps.childErrors) == 'table' then
extraProps.childErrors = Array.map(extraProps.childErrors, ErrorExt.makeFullDetails)
end
if Table.isNotEmpty(extraProps) then
return 'Additional properties: \n' .. mw.dumpObject(extraProps)
else
return nil
end
end
---@param error Error
---@return string
function ErrorExt.makeFullStackTrace(error)
local parts = Array.extend(
error.stacks,
Array.flatten(Array.map(tableOrEmpty(error.originalErrors), function(originalError)
return {
'',
'Error was thrown while handling:',
originalError.message,
ErrorExt.makeFullStackTrace(originalError),
}
end))
)
return table.concat(parts, '\n')
end
local Stash = {}
ErrorExt.Stash = Stash
---Adds an Error instance to the local store.
---@param error Error
---@param storeAsPageVar boolean?
function Stash.add(error, storeAsPageVar)
if storeAsPageVar then
local count = tonumber(pageVars:get('count')) or 0
pageVars:set('count', count + 1)
pageVars:set(count + 1, Json.stringify{error})
else
table.insert(_local_errors, error)
end
end
---Returns all errors (locally and from page variables), and clears the store.
---@return Error[]
function Stash.retrieve()
local errors = {}
local count = tonumber(pageVars:get('count')) or 0
pageVars:delete('count')
for i = 1, count do
Array.extendWith(errors, Array.map(Json.parse(pageVars:get(i)), Error))
pageVars:delete(i)
end
Array.extendWith(errors, _local_errors)
_local_errors = {}
return errors
end
return ErrorExt