live-server: avoid duplicate instances

This commit is contained in:
Barrett Ruth 2023-01-08 02:00:10 -06:00
parent 46df6ae7e6
commit 61f18ef900

View file

@ -7,6 +7,22 @@ local function log(message, level)
)
end
local job_cache = {}
local function find_cached_dir(dir)
local cur = dir
while not job_cache[cur] do
if cur == '/' then
return
end
cur = vim.fn.fnamemodify(cur, ':h')
end
return cur
end
M.config = {
-- let live-server handle the defaults
args = {},
@ -27,19 +43,18 @@ M.setup = function(user_config)
vim.api.nvim_create_user_command('LiveServerStop', M.stop, {})
end
local job_cache = {}
M.start = function()
local dir = vim.fn.expand '%:p:h'
local cached_dir = find_cached_dir(dir) or dir
local cmd = { 'live-server' }
vim.list_extend(cmd, M.config.args)
if job_cache[dir] then
if cached_dir then
log('live-server instance already running', 'INFO')
return
end
local cmd = { 'live-server', cached_dir }
vim.list_extend(cmd, M.config.args)
local job_id = vim.fn.jobstart(cmd, {
on_stderr = function(_, data)
if not data or data[1] == '' then
@ -66,10 +81,11 @@ end
M.stop = function()
local dir = vim.fn.expand '%:p:h'
local cached_dir = find_cached_dir(dir)
if job_cache[dir] then
vim.fn.jobstop(job_cache[dir])
job_cache[dir] = nil
if cached_dir then
vim.fn.jobstop(job_cache[cached_dir])
job_cache[cached_dir] = nil
else
log('no live-server instance running', 'INFO')
end