diff --git a/README.md b/README.md index 638b17b..2d126c3 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,11 @@ The objective here is human understanding (i.e. for debugging), not serializatio Examples of use =============== +`inspect` has the following declaration: `str = inspect(value, )`. + +`value` can be any Lua value. `inspect` transforms simple types (like strings or numbers) into strings. Tables, on the other +hand, are rendered in a way a human can undersand. + "Array-like" tables are rendered horizontally: inspect({1,2,3,4}) == "{ 1, 2, 3, 4 }" @@ -38,27 +43,7 @@ Tables can be nested, and will be indented with two spaces per level. } }]] -`inspect`'s second parameter allows controlling the maximum depth that will be printed out. When the max depth is reached, it'll just return `{...}`: - - local t5 = {a = {b = {c = {d = {e = 5}}}}} - - inspect(t5, 4) == [[{ - a = { - b = { - c = { - d = {...} - } - } - } - }]] - - inspect(t5, 2) == [[{ - a = { - b = {...} - } - }]]) - -Functions, userdata and threads are simply rendered as ``, `` and `` respectively: +Functions, userdata and any other custom types from Luajit are simply as ``, ``, etc.: inspect({ f = print, ud = some_user_data, thread = a_thread} ) == [[{ f = , @@ -84,6 +69,50 @@ If the table has a metatable, inspect will include it at the end, in a special f Notice that since both `a` appears more than once in the expression, it is prefixed by `<1>` and replaced by `` every time it appears later on. +### options.depth + +`inspect`'s second parameter allows controlling the maximum depth that will be printed out. When the max depth is reached, it'll just return `{...}`: + + local t5 = {a = {b = {c = {d = {e = 5}}}}} + + inspect(t5, {depth = 4}) == [[{ + a = { + b = { + c = { + d = {...} + } + } + } + }]] + + inspect(t5, {depth = 2}) == [[{ + a = { + b = {...} + } + }]]) + +`options.depth` defaults to infinite (`math.huge`). + +### options.filter + +Sometimes it might be convenient to "filter out" some parts of the output. The `options.filter` option can do that. + +`options.filter` accepts a table of values. Any value on that table will be rendered as ``. This is useful for hiding things like long complex tables that are not interesting for the task at hand, for example an unuseful complex metatable. + + local person = {name = 'peter'} + setmetatable(person, complex_mt) + inspect(x, {filter = {complex_mt}}) == [[{ + name = "peter", + = + }]] + +`options.filter` can also be a function. The function must return true for the values that must be filtered out. + + local isEvenNumber = function(x) return type(x) == 'number' and x % 2 == 0 end + + inspect({1,2,3,4,5}, {filter = isEvenNumber}) == "{ 1, , 3, , 5 }" + + Gotchas / Warnings ==================