mirror of
https://github.com/kikito/inspect.lua.git
synced 2024-12-15 14:34:21 +00:00
added __tostring comment at the beginning, if possible
This commit is contained in:
parent
395b02ecbe
commit
f46ce9b86b
22
inspect.lua
22
inspect.lua
@ -24,7 +24,8 @@ local controlCharsTranslation = {
|
||||
local function unescapeChar(c) return controlCharsTranslation[c] end
|
||||
|
||||
local function unescape(str)
|
||||
return string.gsub( str, "(%c)", unescapeChar )
|
||||
local result, _ = string.gsub( str, "(%c)", unescapeChar )
|
||||
return result
|
||||
end
|
||||
|
||||
local function isIdentifier(str)
|
||||
@ -101,10 +102,20 @@ function Inspector:putTable(t)
|
||||
if self.level >= self.depth then
|
||||
self:puts('{...}')
|
||||
else
|
||||
local length = #t
|
||||
local comma = false
|
||||
self:puts('{')
|
||||
self:down()
|
||||
|
||||
local length = #t
|
||||
local mt = getmetatable(t)
|
||||
local __tostring = type(mt) == 'table' and mt.__tostring
|
||||
local string = type(__tostring) == 'function' and __tostring(t)
|
||||
|
||||
if type(string) == 'string' and #string > 0 then
|
||||
self:puts(' -- ', unescape(string))
|
||||
if length >= 1 then self:tabify() end -- tabify the array values
|
||||
end
|
||||
|
||||
local comma = false
|
||||
for i=1, length do
|
||||
comma = self:putComma(comma)
|
||||
self:puts(' '):putValue(t[i])
|
||||
@ -117,14 +128,13 @@ function Inspector:putTable(t)
|
||||
self:tabify():putKey(k):puts(' = '):putValue(t[k])
|
||||
end
|
||||
|
||||
local mt = getmetatable(t)
|
||||
if type(mt) == 'table' then
|
||||
if mt then
|
||||
comma = self:putComma(comma)
|
||||
self:tabify():puts('<metatable> = '):putValue(mt)
|
||||
end
|
||||
self:up()
|
||||
|
||||
if #dictKeys > 0 then -- dictionary table. Justify closing }
|
||||
if #dictKeys > 0 or mt then -- dictionary table. Justify closing }
|
||||
self:tabify()
|
||||
elseif length > 0 then -- array tables have one extra space before closing }
|
||||
self:puts(' ')
|
||||
|
@ -147,16 +147,33 @@ context( 'inspect', function()
|
||||
|
||||
end)
|
||||
|
||||
test('Should include the metatable as an extra hash attribute', function()
|
||||
local foo = { foo = 1, __tostring = function(k) return 'foo' end }
|
||||
local bar = setmetatable({a = 1}, foo)
|
||||
assert_equal(inspect(bar), [[{
|
||||
context('metatables', function()
|
||||
|
||||
test('Should include the metatable as an extra hash attribute', function()
|
||||
local foo = { foo = 1, __mode = 'v' }
|
||||
local bar = setmetatable({a = 1}, foo)
|
||||
assert_equal(inspect(bar), [[{
|
||||
a = 1,
|
||||
<metatable> = {
|
||||
__tostring = <function>
|
||||
foo = 1,
|
||||
__mode = "v",
|
||||
foo = 1
|
||||
}
|
||||
}]])
|
||||
end)
|
||||
|
||||
test('Should include the __tostring metamethod if it exists', function()
|
||||
local foo = { foo = 1, __tostring = function() return 'hello\nworld' end }
|
||||
local bar = setmetatable({a = 1}, foo)
|
||||
assert_equal(inspect(bar), [[{ -- hello\nworld
|
||||
a = 1,
|
||||
<metatable> = {
|
||||
__tostring = <function>,
|
||||
foo = 1
|
||||
}
|
||||
}]])
|
||||
end)
|
||||
|
||||
|
||||
end)
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user