diff options
author | Justin M. Keyes <justinkz@gmail.com> | 2024-10-02 08:05:03 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-10-02 08:05:03 -0700 |
commit | d3b4772ddcd4c890dc5bc38e1f1b36a08aed0c04 (patch) | |
tree | a2ba739b5d7588ca36516421188fac5c7850d246 /runtime/lua/vim/_watch.lua | |
parent | 391c5084d1181a6742ebd8551efda4db7e8ca46e (diff) | |
parent | bbf208784ca279178ba0075b60d3e9c80f11da7a (diff) | |
download | rneovim-d3b4772ddcd4c890dc5bc38e1f1b36a08aed0c04.tar.gz rneovim-d3b4772ddcd4c890dc5bc38e1f1b36a08aed0c04.tar.bz2 rneovim-d3b4772ddcd4c890dc5bc38e1f1b36a08aed0c04.zip |
Merge #30595 from justinmk/fixwatch
Diffstat (limited to 'runtime/lua/vim/_watch.lua')
-rw-r--r-- | runtime/lua/vim/_watch.lua | 27 |
1 files changed, 24 insertions, 3 deletions
diff --git a/runtime/lua/vim/_watch.lua b/runtime/lua/vim/_watch.lua index 3c090af3ff..11f6742941 100644 --- a/runtime/lua/vim/_watch.lua +++ b/runtime/lua/vim/_watch.lua @@ -30,6 +30,8 @@ M.FileChangeType = { --- @class vim._watch.watch.Opts : vim._watch.Opts --- @field uvflags? uv.fs_event_start.flags +--- Decides if `path` should be skipped. +--- --- @param path string --- @param opts? vim._watch.Opts local function skip(path, opts) @@ -69,7 +71,7 @@ function M.watch(path, opts, callback) local uvflags = opts and opts.uvflags or {} local handle = assert(uv.new_fs_event()) - local _, start_err = handle:start(path, uvflags, function(err, filename, events) + local _, start_err, start_errname = handle:start(path, uvflags, function(err, filename, events) assert(not err, err) local fullpath = path if filename then @@ -96,7 +98,15 @@ function M.watch(path, opts, callback) callback(fullpath, change_type) end) - assert(not start_err, start_err) + if start_err then + if start_errname == 'ENOENT' then + -- Server may send "workspace/didChangeWatchedFiles" with nonexistent `baseUri` path. + -- This is mostly a placeholder until we have `nvim_log` API. + vim.notify_once(('watch.watch: %s'):format(start_err), vim.log.levels.INFO) + end + -- TODO(justinmk): log important errors once we have `nvim_log` API. + return function() end + end return function() local _, stop_err = handle:stop() @@ -193,7 +203,18 @@ function M.watchdirs(path, opts, callback) local root_handle = assert(uv.new_fs_event()) handles[path] = root_handle - root_handle:start(path, {}, create_on_change(path)) + local _, start_err, start_errname = root_handle:start(path, {}, create_on_change(path)) + + if start_err then + if start_errname == 'ENOENT' then + -- Server may send "workspace/didChangeWatchedFiles" with nonexistent `baseUri` path. + -- This is mostly a placeholder until we have `nvim_log` API. + vim.notify_once(('watch.watchdirs: %s'):format(start_err), vim.log.levels.INFO) + end + -- TODO(justinmk): log important errors once we have `nvim_log` API. + + -- Continue. vim.fs.dir() will return nothing, so the code below is harmless. + end --- "640K ought to be enough for anyone" --- Who has folders this deep? |