fix(fs): log file watcher errors (#3621)

In plugins/fs/src/watcher.rs, notify errors were discarded (TODO), so a
watch that died left no trace. They are now logged with log::error!.
Reporting them to the JS callback would change the event payload and is
deferred to v3.
This commit is contained in:
Lucas Fernandes Nogueira
2026-09-23 12:57:33 -03:00
committed by GitHub
parent 101e1b068a
commit 0c84c917e3
2 changed files with 18 additions and 6 deletions
+6
View File
@@ -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.
+12 -6
View File
@@ -69,13 +69,18 @@ pub fn watch<R: Runtime>(
let mut debouncer = new_debouncer(
Duration::from_millis(delay),
None,
move |events: Result<Vec<DebouncedEvent>, Vec<notify::Error>>| {
if let Ok(events) = events {
move |events: Result<Vec<DebouncedEvent>, Vec<notify::Error>>| 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<R: Runtime>(
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<notify::Event>| 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(),
)?;