mirror of https://github.com/bfredl/nvim-luadev
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
1.2 KiB
Lua
47 lines
1.2 KiB
Lua
local function complete()
|
|
local line = vim.api.nvim_get_current_line()
|
|
local endcol = vim.api.nvim_win_get_cursor(0)[2]
|
|
local text = string.sub(line,1,endcol)
|
|
local x,y,z = string.match(text,"([%.%w%[%]_]-)([:%.%[])([%w_]-)$")
|
|
--require'luadev'.print(x,y,z)
|
|
local status, obj
|
|
if x ~= nil then
|
|
status, obj = pcall(loadstring("return "..x))
|
|
else
|
|
status, obj = true, _G
|
|
y, z = ".", string.match(text,"([%w_]-)$")
|
|
end
|
|
--require'luadev'.print(status,obj,y,z)
|
|
local entries = {}
|
|
|
|
if (not status) then
|
|
return
|
|
end
|
|
|
|
local function insertify(o)
|
|
for k,_ in pairs(o) do
|
|
if type(k) == "string" and k:sub(1,string.len(z)) == z then
|
|
table.insert(entries,k)
|
|
end
|
|
end
|
|
end
|
|
|
|
if type(obj) == 'table' then
|
|
insertify(obj)
|
|
end
|
|
|
|
local index = (debug.getmetatable(obj) or {}).__index
|
|
if type(index) == 'table' then
|
|
insertify(index)
|
|
end
|
|
|
|
local start = endcol - string.len(z) + 1
|
|
table.sort(entries)
|
|
--require'luadev'.print(vim.inspect(entries))
|
|
-- BUG/REGRESSION?? complete() doesn't respect 'completeopt'
|
|
vim.api.nvim_call_function("complete", {start, entries})
|
|
end
|
|
-- TODO: luadev should add a command to source a file like this:
|
|
--package.loaded['luadev.complete']=complete
|
|
return complete
|