Difference between revisions of "Module:LibraryUtil"
Jump to navigation
Jump to search
m |
(FnControlOption changed the content model of the page Module:LibraryUtil from "plain text" to "Scribunto") Tag: content model change |
||
(3 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
--[[ | --[[ | ||
+ | libraryUtil, modified for the Minetest Wiki. | ||
+ | |||
Code released under the GPL v2+ as per: | Code released under the GPL v2+ as per: | ||
− | + | https://github.com/wikimedia/mediawiki-extensions-Scribunto/blob/7d676c3/COPYING | |
− | + | @license GNU GPL v2+ | |
− | + | @author Brad Jorsch < bjorsch@wikimedia.org > | |
− | + | @author "Mr. Stradivarius" < misterstrad@gmail.com > | |
+ | @author MrIbby < siribby@outlook.com > | ||
]] | ]] | ||
Line 11: | Line 14: | ||
function LibraryUtil.checkType( name, argIdx, arg, expectType, nilOk ) | function LibraryUtil.checkType( name, argIdx, arg, expectType, nilOk ) | ||
− | + | if arg == nil and nilOk then | |
− | + | return | |
− | + | end | |
− | + | if type( arg ) ~= expectType then | |
− | + | local msg = string.format( "bad argument #%d to '%s' (%s expected, got %s)", | |
− | + | argIdx, name, expectType, type( arg ) | |
− | + | ) | |
− | + | error( msg, 3 ) | |
− | + | end | |
end | end | ||
function LibraryUtil.checkTypeMulti( name, argIdx, arg, expectTypes ) | function LibraryUtil.checkTypeMulti( name, argIdx, arg, expectTypes ) | ||
− | + | local argType = type( arg ) | |
− | + | for _, expectType in ipairs( expectTypes ) do | |
− | + | if argType == expectType then | |
− | + | return | |
− | + | end | |
− | + | end | |
− | + | local n = #expectTypes | |
− | + | local typeList | |
− | + | if n > 1 then | |
− | + | typeList = table.concat( expectTypes, ', ', 1, n - 1 ) .. ' or ' .. expectTypes[n] | |
− | + | else | |
− | + | typeList = expectTypes[1] | |
− | + | end | |
− | + | local msg = string.format( "bad argument #%d to '%s' (%s expected, got %s)", | |
− | + | argIdx, | |
− | + | name, | |
− | + | typeList, | |
− | + | type( arg ) | |
− | + | ) | |
− | + | error( msg, 3 ) | |
end | end | ||
function LibraryUtil.checkTypeForIndex( index, value, expectType ) | function LibraryUtil.checkTypeForIndex( index, value, expectType ) | ||
− | + | if type( value ) ~= expectType then | |
− | + | local msg = string.format( "value for index '%s' must be %s, %s given", | |
− | + | index, expectType, type( value ) | |
− | + | ) | |
− | + | error( msg, 3 ) | |
− | + | end | |
end | end | ||
function LibraryUtil.checkTypeForNamedArg( name, argName, arg, expectType, nilOk ) | function LibraryUtil.checkTypeForNamedArg( name, argName, arg, expectType, nilOk ) | ||
− | + | if arg == nil and nilOk then | |
− | + | return | |
− | + | end | |
− | + | if type( arg ) ~= expectType then | |
− | + | local msg = string.format( "bad named argument %s to '%s' (%s expected, got %s)", | |
− | + | argName, name, expectType, type( arg ) | |
− | + | ) | |
− | + | error( msg, 3 ) | |
− | + | end | |
end | end | ||
function LibraryUtil.makeCheckSelfFunction( libraryName, varName, selfObj, selfObjDesc ) | function LibraryUtil.makeCheckSelfFunction( libraryName, varName, selfObj, selfObjDesc ) | ||
− | + | return function ( self, method ) | |
− | + | if self ~= selfObj then | |
− | + | error( string.format( | |
− | + | "%s: invalid %s. Did you call %s with a dot instead of a colon, i.e. " .. | |
− | + | "%s.%s() instead of %s:%s()?", | |
− | + | libraryName, selfObjDesc, method, varName, method, varName, method | |
− | + | ), 3 ) | |
− | + | end | |
− | + | end | |
end | end | ||
return LibraryUtil | return LibraryUtil |
Latest revision as of 17:38, 7 June 2022
Documentation for this module may be created at Module:LibraryUtil/doc
--[[ libraryUtil, modified for the Minetest Wiki. Code released under the GPL v2+ as per: https://github.com/wikimedia/mediawiki-extensions-Scribunto/blob/7d676c3/COPYING @license GNU GPL v2+ @author Brad Jorsch < bjorsch@wikimedia.org > @author "Mr. Stradivarius" < misterstrad@gmail.com > @author MrIbby < siribby@outlook.com > ]] local LibraryUtil = {} function LibraryUtil.checkType( name, argIdx, arg, expectType, nilOk ) if arg == nil and nilOk then return end if type( arg ) ~= expectType then local msg = string.format( "bad argument #%d to '%s' (%s expected, got %s)", argIdx, name, expectType, type( arg ) ) error( msg, 3 ) end end function LibraryUtil.checkTypeMulti( name, argIdx, arg, expectTypes ) local argType = type( arg ) for _, expectType in ipairs( expectTypes ) do if argType == expectType then return end end local n = #expectTypes local typeList if n > 1 then typeList = table.concat( expectTypes, ', ', 1, n - 1 ) .. ' or ' .. expectTypes[n] else typeList = expectTypes[1] end local msg = string.format( "bad argument #%d to '%s' (%s expected, got %s)", argIdx, name, typeList, type( arg ) ) error( msg, 3 ) end function LibraryUtil.checkTypeForIndex( index, value, expectType ) if type( value ) ~= expectType then local msg = string.format( "value for index '%s' must be %s, %s given", index, expectType, type( value ) ) error( msg, 3 ) end end function LibraryUtil.checkTypeForNamedArg( name, argName, arg, expectType, nilOk ) if arg == nil and nilOk then return end if type( arg ) ~= expectType then local msg = string.format( "bad named argument %s to '%s' (%s expected, got %s)", argName, name, expectType, type( arg ) ) error( msg, 3 ) end end function LibraryUtil.makeCheckSelfFunction( libraryName, varName, selfObj, selfObjDesc ) return function ( self, method ) if self ~= selfObj then error( string.format( "%s: invalid %s. Did you call %s with a dot instead of a colon, i.e. " .. "%s.%s() instead of %s:%s()?", libraryName, selfObjDesc, method, varName, method, varName, method ), 3 ) end end end return LibraryUtil