45 lines
999 B
Lua
45 lines
999 B
Lua
-- utils.lua
|
|
local M = {}
|
|
|
|
function M.await(fn, timeout, interval)
|
|
local done = false
|
|
local ok, data
|
|
|
|
-- Wrap resolve in vim.schedule so it runs on main loop
|
|
fn(function(success, result)
|
|
vim.schedule(function()
|
|
done = true
|
|
ok = success
|
|
data = result
|
|
end)
|
|
end)
|
|
|
|
vim.wait(timeout, function()
|
|
return done
|
|
end, interval)
|
|
|
|
return { ok = ok or false, data = data }
|
|
end
|
|
|
|
function M.root_markers_with_field(root_files, new_names, field, fname)
|
|
local path = vim.fn.fnamemodify(fname, ':h')
|
|
local found = vim.fs.find(new_names, { path = path, upward = true })
|
|
|
|
for _, file in ipairs(found or {}) do
|
|
for line in io.lines(file) do
|
|
if line:find(field) then
|
|
root_files[#root_files + 1] = vim.fs.basename(file)
|
|
break
|
|
end
|
|
end
|
|
end
|
|
|
|
return root_files
|
|
end
|
|
|
|
function M.insert_package_json(root_files, field, fname)
|
|
return M.root_markers_with_field(root_files, { 'package.json', 'package.json5' }, field, fname)
|
|
end
|
|
|
|
return M
|