summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cli/file_watcher.rs7
-rw-r--r--cli/tests/integration_tests.rs15
2 files changed, 20 insertions, 2 deletions
diff --git a/cli/file_watcher.rs b/cli/file_watcher.rs
index 699a27864..d9681af7f 100644
--- a/cli/file_watcher.rs
+++ b/cli/file_watcher.rs
@@ -172,7 +172,7 @@ where
let mut debounce = Debounce::new();
// Store previous data. If module resolution fails at some point, the watcher will try to
// continue watching files using these data.
- let mut paths;
+ let mut paths = Vec::new();
let mut module = None;
loop {
@@ -185,7 +185,10 @@ where
module = Some(module_info);
}
ModuleResolutionResult::Fail { source_path, error } => {
- paths = vec![source_path];
+ if paths.is_empty() {
+ paths = vec![source_path];
+ }
+
if module.is_none() {
eprintln!("{}: {}", colors::red_bold("error"), error);
}
diff --git a/cli/tests/integration_tests.rs b/cli/tests/integration_tests.rs
index 1bffe9ba9..feb3f7f04 100644
--- a/cli/tests/integration_tests.rs
+++ b/cli/tests/integration_tests.rs
@@ -1571,6 +1571,21 @@ fn run_watch() {
assert!(stdout_lines.next().unwrap().contains("42"));
wait_for_process_finished("Process", &mut stderr_lines);
+ // Update the content of the imported file with invalid syntax
+ std::fs::write(&another_file, "syntax error ^^").expect("error writing file");
+ std::thread::sleep(std::time::Duration::from_secs(1));
+ assert!(stderr_lines.next().unwrap().contains("Restarting"));
+ assert!(stderr_lines.next().unwrap().contains("error:"));
+ wait_for_process_finished("Process", &mut stderr_lines);
+
+ // Modify the imported file and make sure that restarting occurs
+ std::fs::write(&another_file, "export const foo = 'modified!';")
+ .expect("error writing file");
+ std::thread::sleep(std::time::Duration::from_secs(1));
+ assert!(stderr_lines.next().unwrap().contains("Restarting"));
+ assert!(stdout_lines.next().unwrap().contains("modified!"));
+ wait_for_process_finished("Process", &mut stderr_lines);
+
// the watcher process is still alive
assert!(child.try_wait().unwrap().is_none());