lua: expose full interface of vim.inspect and add test

Implement lazy loading for vim.submodule, this would be over-engineering
for inspect only, but we expect to use this solution also for more and
larger modules.
This commit is contained in:
Björn Linse 2019-01-14 18:08:17 +01:00
parent 89d7e24891
commit 3a84e5be88
2 changed files with 21 additions and 9 deletions

View File

@ -152,14 +152,6 @@ local function gsplit(s, sep, plain)
end end
end end
local inspect = (function()
local f
return function(...)
if f == nil then f = require('vim.inspect') end
return f(...)
end
end)()
local function split(s,sep,plain) local function split(s,sep,plain)
local t={} for c in gsplit(s, sep, plain) do table.insert(t,c) end local t={} for c in gsplit(s, sep, plain) do table.insert(t,c) end
return t return t
@ -195,6 +187,13 @@ deepcopy = function(orig)
return deepcopy_funcs[type(orig)](orig) return deepcopy_funcs[type(orig)](orig)
end end
local function __index(table, key)
if key == "inspect" then
table.inspect = require("vim.inspect")
return table.inspect
end
end
local module = { local module = {
_update_package_paths = _update_package_paths, _update_package_paths = _update_package_paths,
_os_proc_children = _os_proc_children, _os_proc_children = _os_proc_children,
@ -204,7 +203,10 @@ local module = {
split = split, split = split,
gsplit = gsplit, gsplit = gsplit,
deepcopy = deepcopy, deepcopy = deepcopy,
inspect = inspect,
} }
setmetatable(module, {
__index = __index
})
return module return module

View File

@ -176,6 +176,16 @@ describe("vim.inspect", function()
eq('2', inspect(2)) eq('2', inspect(2))
eq('{+a = {+b = 1+}+}', eq('{+a = {+b = 1+}+}',
inspect({ a = { b = 1 } }, { newline = '+', indent = '' })) inspect({ a = { b = 1 } }, { newline = '+', indent = '' }))
-- special value vim.inspect.KEY works
eq('{ KEY_a = "x", KEY_b = "y"}', meths.execute_lua([[
return vim.inspect({a="x", b="y"}, {newline = '', process = function(item, path)
if path[#path] == vim.inspect.KEY then
return 'KEY_'..item
end
return item
end})
]], {}))
end) end)
end) end)