aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_cargo_watch/src/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_cargo_watch/src/lib.rs')
-rw-r--r--crates/ra_cargo_watch/src/lib.rs19
1 files changed, 16 insertions, 3 deletions
diff --git a/crates/ra_cargo_watch/src/lib.rs b/crates/ra_cargo_watch/src/lib.rs
index bffe5eb00..deb763af9 100644
--- a/crates/ra_cargo_watch/src/lib.rs
+++ b/crates/ra_cargo_watch/src/lib.rs
@@ -259,7 +259,7 @@ pub fn run_cargo(
259 let mut child = command 259 let mut child = command
260 .args(args) 260 .args(args)
261 .stdout(Stdio::piped()) 261 .stdout(Stdio::piped())
262 .stderr(Stdio::null()) 262 .stderr(Stdio::piped())
263 .stdin(Stdio::null()) 263 .stdin(Stdio::null())
264 .spawn() 264 .spawn()
265 .expect("couldn't launch cargo"); 265 .expect("couldn't launch cargo");
@@ -352,8 +352,21 @@ impl WatchThread {
352 // It is okay to ignore the result, as it only errors if the process is already dead 352 // It is okay to ignore the result, as it only errors if the process is already dead
353 let _ = child.kill(); 353 let _ = child.kill();
354 354
355 // Again, we don't care about the exit status so just ignore the result 355 // Again, we are resilient to errors, so we don't try to panic here
356 let _ = child.wait(); 356 match child.wait_with_output() {
357 Ok(output) => match output.status.code() {
358 Some(0) | None => {}
359 Some(exit_code) => {
360 let output =
361 std::str::from_utf8(&output.stderr).unwrap_or("<bad utf8 output>");
362
363 if !output.contains("could not compile") {
364 log::error!("Cargo failed with exit code {} {}", exit_code, output);
365 }
366 }
367 },
368 Err(err) => log::error!("Cargo io error: {:?}", err),
369 }
357 })) 370 }))
358 } else { 371 } else {
359 None 372 None