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 unescapeChar(c) return controlCharsTranslation[c] end
|
||||||
|
|
||||||
local function unescape(str)
|
local function unescape(str)
|
||||||
return string.gsub( str, "(%c)", unescapeChar )
|
local result, _ = string.gsub( str, "(%c)", unescapeChar )
|
||||||
|
return result
|
||||||
end
|
end
|
||||||
|
|
||||||
local function isIdentifier(str)
|
local function isIdentifier(str)
|
||||||
@ -101,10 +102,20 @@ function Inspector:putTable(t)
|
|||||||
if self.level >= self.depth then
|
if self.level >= self.depth then
|
||||||
self:puts('{...}')
|
self:puts('{...}')
|
||||||
else
|
else
|
||||||
local length = #t
|
|
||||||
local comma = false
|
|
||||||
self:puts('{')
|
self:puts('{')
|
||||||
self:down()
|
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
|
for i=1, length do
|
||||||
comma = self:putComma(comma)
|
comma = self:putComma(comma)
|
||||||
self:puts(' '):putValue(t[i])
|
self:puts(' '):putValue(t[i])
|
||||||
@ -117,14 +128,13 @@ function Inspector:putTable(t)
|
|||||||
self:tabify():putKey(k):puts(' = '):putValue(t[k])
|
self:tabify():putKey(k):puts(' = '):putValue(t[k])
|
||||||
end
|
end
|
||||||
|
|
||||||
local mt = getmetatable(t)
|
if mt then
|
||||||
if type(mt) == 'table' then
|
|
||||||
comma = self:putComma(comma)
|
comma = self:putComma(comma)
|
||||||
self:tabify():puts('<metatable> = '):putValue(mt)
|
self:tabify():puts('<metatable> = '):putValue(mt)
|
||||||
end
|
end
|
||||||
self:up()
|
self:up()
|
||||||
|
|
||||||
if #dictKeys > 0 then -- dictionary table. Justify closing }
|
if #dictKeys > 0 or mt then -- dictionary table. Justify closing }
|
||||||
self:tabify()
|
self:tabify()
|
||||||
elseif length > 0 then -- array tables have one extra space before closing }
|
elseif length > 0 then -- array tables have one extra space before closing }
|
||||||
self:puts(' ')
|
self:puts(' ')
|
||||||
|
@ -147,14 +147,28 @@ context( 'inspect', function()
|
|||||||
|
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
context('metatables', function()
|
||||||
|
|
||||||
test('Should include the metatable as an extra hash attribute', function()
|
test('Should include the metatable as an extra hash attribute', function()
|
||||||
local foo = { foo = 1, __tostring = function(k) return 'foo' end }
|
local foo = { foo = 1, __mode = 'v' }
|
||||||
local bar = setmetatable({a = 1}, foo)
|
local bar = setmetatable({a = 1}, foo)
|
||||||
assert_equal(inspect(bar), [[{
|
assert_equal(inspect(bar), [[{
|
||||||
a = 1,
|
a = 1,
|
||||||
<metatable> = {
|
<metatable> = {
|
||||||
__tostring = <function>
|
__mode = "v",
|
||||||
foo = 1,
|
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)
|
||||||
@ -164,3 +178,6 @@ context( 'inspect', function()
|
|||||||
|
|
||||||
|
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
|
||||||
|
end)
|
||||||
|
Loading…
Reference in New Issue
Block a user