Tweaks to visualizing tables.

This commit is contained in:
Bruce Hill 2018-03-22 13:45:17 -07:00
parent f083b78aad
commit db872e8606
2 changed files with 56 additions and 24 deletions

53
ldt.lua
View File

@ -544,24 +544,45 @@ ldb = {
end
local value_x = pads.vars.x + pads.vars.width
local value_w = SCREEN_W - (value_x)
local value = assert(values[var_index], "No value found for " .. tostring(var_index))
local _exp_0 = type(value)
local value = values[var_index]
local type_str = type(value)
local _exp_0 = type_str
if "string" == _exp_0 then
pads.values = Pad("(D)ata [string]", var_y, value_x, pads.vars.height, value_w, wrap_text(value, value_w - 2), function(self, i)
return color()
end)
elseif "table" == _exp_0 then
local type_str, value_str = 'table', repr(value)
do
local mt = getmetatable(value)
if mt then
if mt.__class and mt.__class.__name then
type_str = mt.__class.__name
else
type_str = 'table with metatable'
local value_str = repr(value, 3)
local mt = getmetatable(value)
if mt then
if mt.__class and mt.__class.__name then
type_str = mt.__class.__name
elseif value.__base and value.__name then
type_str = "class " .. tostring(value.__name)
else
type_str = 'table with metatable'
end
if mt.__tostring then
value_str = tostring(value)
else
if value.__base and value.__name then
value = value.__base
value_str = repr(value, 2)
end
if mt.__tostring then
value_str = tostring(value)
if #value_str >= value_w - 2 then
local key_repr
key_repr = function(k)
return type(k) == 'string' and k or "[" .. tostring(repr(k, 1)) .. "]"
end
value_str = table.concat((function()
local _accum_0 = { }
local _len_0 = 1
for k, v in pairs(value) do
_accum_0[_len_0] = tostring(key_repr(k)) .. " = " .. tostring(repr(v, 1))
_len_0 = _len_0 + 1
end
return _accum_0
end)(), "\n \n")
end
end
end
@ -571,19 +592,19 @@ ldb = {
elseif "function" == _exp_0 then
local info = debug.getinfo(value, 'nS')
local s = ("function '%s' defined at %s:%s"):format(info.name or var_names[var_index], info.short_src, info.linedefined)
pads.values = Pad("(D)ata [function]", var_y, value_x, pads.vars.height, value_w, wrap_text(s, value_w - 2), function(self, i)
pads.values = Pad("(D)ata [" .. tostring(type_str) .. "]", var_y, value_x, pads.vars.height, value_w, wrap_text(s, value_w - 2), function(self, i)
return color("green bold")
end)
elseif "number" == _exp_0 then
pads.values = Pad("(D)ata [number]", var_y, value_x, pads.vars.height, value_w, wrap_text(repr(value), value_w - 2), function(self, i)
pads.values = Pad("(D)ata [" .. tostring(type_str) .. "]", var_y, value_x, pads.vars.height, value_w, wrap_text(repr(value), value_w - 2), function(self, i)
return color("magenta bold")
end)
elseif "boolean" == _exp_0 then
pads.values = Pad("(D)ata [boolean]", var_y, value_x, pads.vars.height, value_w, wrap_text(repr(value), value_w - 2), function(self, i)
pads.values = Pad("(D)ata [" .. tostring(type_str) .. "]", var_y, value_x, pads.vars.height, value_w, wrap_text(repr(value), value_w - 2), function(self, i)
return value and color("green bold") or color("red bold")
end)
else
pads.values = Pad("(D)ata [" .. tostring(type(value)) .. "]", var_y, value_x, pads.vars.height, value_w, wrap_text(repr(value), value_w - 2), function(self, i)
pads.values = Pad("(D)ata [" .. tostring(type_str) .. "]", var_y, value_x, pads.vars.height, value_w, wrap_text(repr(value), value_w - 2), function(self, i)
return color()
end)
end

View File

@ -376,35 +376,46 @@ ldb = {
if var_index == nil then return
value_x = pads.vars.x+pads.vars.width
value_w = SCREEN_W-(value_x)
value = assert(values[var_index], "No value found for #{var_index}")
value = values[var_index]
type_str = type(value)
-- Show single value:
switch type(value)
switch type_str
when "string"
pads.values = Pad "(D)ata [string]",var_y,value_x,pads.vars.height,value_w,
wrap_text(value, value_w-2), (i)=>color()
when "table"
type_str, value_str = 'table', repr(value)
if mt = getmetatable(value)
value_str = repr(value, 3)
mt = getmetatable(value)
if mt
type_str = if mt.__class and mt.__class.__name then mt.__class.__name
elseif value.__base and value.__name then "class #{value.__name}"
else 'table with metatable'
if mt.__tostring
value_str = tostring(value)
else
if value.__base and value.__name
value = value.__base
value_str = repr(value, 2)
if #value_str >= value_w-2
key_repr = (k)-> type(k) == 'string' and k or "[#{repr(k,1)}]"
value_str = table.concat ["#{key_repr k} = #{repr v,1}" for k,v in pairs(value)], "\n \n"
pads.values = Pad "(D)ata [#{type_str}]",var_y,value_x,pads.vars.height,value_w,
wrap_text(value_str, value_w-2), (i)=>color("cyan bold")
when "function"
info = debug.getinfo(value, 'nS')
s = ("function '%s' defined at %s:%s")\format info.name or var_names[var_index],
info.short_src, info.linedefined
pads.values = Pad "(D)ata [function]",var_y,value_x,pads.vars.height,value_w,
pads.values = Pad "(D)ata [#{type_str}]",var_y,value_x,pads.vars.height,value_w,
wrap_text(s, value_w-2), (i)=>color("green bold")
when "number"
pads.values = Pad "(D)ata [number]",var_y,value_x,pads.vars.height,value_w,
pads.values = Pad "(D)ata [#{type_str}]",var_y,value_x,pads.vars.height,value_w,
wrap_text(repr(value), value_w-2), (i)=>color("magenta bold")
when "boolean"
pads.values = Pad "(D)ata [boolean]",var_y,value_x,pads.vars.height,value_w,
pads.values = Pad "(D)ata [#{type_str}]",var_y,value_x,pads.vars.height,value_w,
wrap_text(repr(value), value_w-2), (i)=> value and color("green bold") or color("red bold")
else
pads.values = Pad "(D)ata [#{type(value)}]",var_y,value_x,pads.vars.height,value_w,
pads.values = Pad "(D)ata [#{type_str}]",var_y,value_x,pads.vars.height,value_w,
wrap_text(repr(value), value_w-2), (i)=>color()
collectgarbage()