live-server.nvim/lua/live-server.lua
2023-01-07 20:42:18 -06:00

82 lines
1.8 KiB
Lua

local M = {}
local function log(message, level)
vim.notify_once(
string.format('import-cost.nvim: %s', message),
vim.log.levels[level]
)
end
M.config = {
-- let live-server handle the defaults
args = {},
}
M.setup = function(user_config)
M.config = vim.tbl_deep_extend('force', M.config, user_config or {})
if not vim.fn.executable 'live-server' then
log(
'live-server is not executable. Ensure the npm module is properly installed',
vim.log.levels.ERROR
)
return
end
vim.api.nvim_create_user_command('LiveServerStart', M.start, {})
vim.api.nvim_create_user_command('LiveServerStop', M.stop, {})
end
local job_cache = {}
M.start = function()
local bufnr = vim.api.nvim_get_current_buf()
local cmd = { 'live-server' }
vim.list_extend(cmd, M.config.args)
if job_cache[bufnr] then
log('live-server instance already running', 'INFO')
return
end
local job_id = vim.fn.jobstart(cmd, {
on_stderr = function(_, data)
if data[1] == '' then
return
end
log(data[1]:match '.-m(.-)\27', 'ERROR')
end,
on_exit = function(_, exit_code)
job_cache[bufnr] = nil
if exit_code == 0 then
return
end
log(
string.format(
'live-server stopped unexpectedly with exit code %s',
exit_code
),
'ERROR'
)
end,
})
job_cache[bufnr] = job_id
end
M.stop = function()
local bufnr = vim.api.nvim_get_current_buf()
if job_cache[bufnr] then
vim.fn.jobstop(job_cache[bufnr])
job_cache[bufnr] = nil
else
log('no live-server instance running', 'INFO')
end
end
return M