diff --git a/.changes/fix-fs-watch-errors.md b/.changes/fix-fs-watch-errors.md new file mode 100644 index 000000000..418704489 --- /dev/null +++ b/.changes/fix-fs-watch-errors.md @@ -0,0 +1,6 @@ +--- +fs: patch +fs-js: patch +--- + +File watcher errors (e.g. the watched directory was removed or the inotify limit was reached) are now logged instead of being silently dropped. diff --git a/plugins/fs/src/watcher.rs b/plugins/fs/src/watcher.rs index de9a85d31..68f6a8019 100644 --- a/plugins/fs/src/watcher.rs +++ b/plugins/fs/src/watcher.rs @@ -69,13 +69,18 @@ pub fn watch( let mut debouncer = new_debouncer( Duration::from_millis(delay), None, - move |events: Result, Vec>| { - if let Ok(events) = events { + move |events: Result, Vec>| match events { + Ok(events) => { for event in events { - // TODO: Should errors be emitted too? let _ = on_event.send(event.event); } } + // TODO(v3): report the errors to the webview + Err(errors) => { + for error in errors { + log::error!("file watcher error: {error}"); + } + } }, )?; for path in &resolved_paths { @@ -84,11 +89,12 @@ pub fn watch( WatcherKind::Debouncer(debouncer) } else { let mut watcher = RecommendedWatcher::new( - move |event| { - if let Ok(event) = event { - // TODO: Should errors be emitted too? + move |event: notify::Result| match event { + Ok(event) => { let _ = on_event.send(event); } + // TODO(v3): report the errors to the webview + Err(error) => log::error!("file watcher error: {error}"), }, Config::default(), )?;