mirror of
https://github.com/denoland/deno.git
synced 2024-12-22 15:24:46 -05:00
fix(cli): Improve error message in watch mode (#15184)
This commit is contained in:
parent
5273259eef
commit
0aca3f0690
2 changed files with 41 additions and 2 deletions
|
@ -1,9 +1,11 @@
|
||||||
// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.
|
// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.
|
||||||
|
|
||||||
use crate::colors;
|
use crate::colors;
|
||||||
|
use crate::fmt_errors::format_js_error;
|
||||||
use crate::fs_util::canonicalize_path;
|
use crate::fs_util::canonicalize_path;
|
||||||
|
|
||||||
use deno_core::error::AnyError;
|
use deno_core::error::AnyError;
|
||||||
|
use deno_core::error::JsError;
|
||||||
use deno_core::futures::Future;
|
use deno_core::futures::Future;
|
||||||
use log::info;
|
use log::info;
|
||||||
use notify::event::Event as NotifyEvent;
|
use notify::event::Event as NotifyEvent;
|
||||||
|
@ -71,8 +73,15 @@ where
|
||||||
{
|
{
|
||||||
let result = watch_future.await;
|
let result = watch_future.await;
|
||||||
if let Err(err) = result {
|
if let Err(err) = result {
|
||||||
let msg = format!("{}: {}", colors::red_bold("error"), err);
|
let error_string = match err.downcast_ref::<JsError>() {
|
||||||
eprintln!("{}", msg);
|
Some(e) => format_js_error(e),
|
||||||
|
None => format!("{:?}", err),
|
||||||
|
};
|
||||||
|
eprintln!(
|
||||||
|
"{}: {}",
|
||||||
|
colors::red_bold("error"),
|
||||||
|
error_string.trim_start_matches("error: ")
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -788,6 +788,36 @@ fn run_watch_with_import_map_and_relative_paths() {
|
||||||
check_alive_then_kill(child);
|
check_alive_then_kill(child);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn run_watch_error_messages() {
|
||||||
|
let t = TempDir::new();
|
||||||
|
let file_to_watch = t.path().join("file_to_watch.js");
|
||||||
|
write(
|
||||||
|
&file_to_watch,
|
||||||
|
"throw SyntaxError(`outer`, {cause: TypeError(`inner`)})",
|
||||||
|
)
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
let mut child = util::deno_cmd()
|
||||||
|
.current_dir(util::testdata_path())
|
||||||
|
.arg("run")
|
||||||
|
.arg("--watch")
|
||||||
|
.arg(&file_to_watch)
|
||||||
|
.env("NO_COLOR", "1")
|
||||||
|
.stdout(std::process::Stdio::piped())
|
||||||
|
.stderr(std::process::Stdio::piped())
|
||||||
|
.spawn()
|
||||||
|
.unwrap();
|
||||||
|
let (_, mut stderr_lines) = child_lines(&mut child);
|
||||||
|
|
||||||
|
wait_contains("Process started", &mut stderr_lines);
|
||||||
|
wait_contains("error: Uncaught SyntaxError: outer", &mut stderr_lines);
|
||||||
|
wait_contains("Caused by: TypeError: inner", &mut stderr_lines);
|
||||||
|
wait_contains("Process finished", &mut stderr_lines);
|
||||||
|
|
||||||
|
check_alive_then_kill(child);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_watch() {
|
fn test_watch() {
|
||||||
let t = TempDir::new();
|
let t = TempDir::new();
|
||||||
|
|
Loading…
Reference in a new issue