From 3d228f5f9ec729d1b027588ccf36987c82f53516 Mon Sep 17 00:00:00 2001 From: "Kevin (Kun) \"Kassimo\" Qian" Date: Tue, 24 Mar 2020 20:53:48 -0700 Subject: [PATCH] hide source line if error message longer than 150 chars (#4487) --- cli/fmt_errors.rs | 7 +++++-- cli/tests/error_017_hide_long_source_ts.ts | 2 ++ cli/tests/error_017_hide_long_source_ts.ts.out | 3 +++ cli/tests/error_018_hide_long_source_js.js | 2 ++ cli/tests/error_018_hide_long_source_js.js.out | 3 +++ cli/tests/integration_tests.rs | 14 ++++++++++++++ 6 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 cli/tests/error_017_hide_long_source_ts.ts create mode 100644 cli/tests/error_017_hide_long_source_ts.ts.out create mode 100644 cli/tests/error_018_hide_long_source_js.js create mode 100644 cli/tests/error_018_hide_long_source_js.js.out diff --git a/cli/fmt_errors.rs b/cli/fmt_errors.rs index 73d6bb2d23..0a22b4625f 100644 --- a/cli/fmt_errors.rs +++ b/cli/fmt_errors.rs @@ -10,6 +10,8 @@ use std::error::Error; use std::fmt; use std::ops::Deref; +const SOURCE_ABBREV_THRESHOLD: usize = 150; + /// A trait which specifies parts of a diagnostic like item needs to be able to /// generate to conform its display to other diagnostic like items pub trait DisplayFormatter { @@ -74,8 +76,9 @@ pub fn format_maybe_source_line( let source_line = source_line.as_ref().unwrap(); // sometimes source_line gets set with an empty string, which then outputs - // an empty source line when displayed, so need just short circuit here - if source_line.is_empty() { + // an empty source line when displayed, so need just short circuit here. + // Also short-circuit on error line too long. + if source_line.is_empty() || source_line.len() > SOURCE_ABBREV_THRESHOLD { return "".to_string(); } diff --git a/cli/tests/error_017_hide_long_source_ts.ts b/cli/tests/error_017_hide_long_source_ts.ts new file mode 100644 index 0000000000..a4c30670f9 --- /dev/null +++ b/cli/tests/error_017_hide_long_source_ts.ts @@ -0,0 +1,2 @@ +const LONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONG = undefined; +LONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONG.a; diff --git a/cli/tests/error_017_hide_long_source_ts.ts.out b/cli/tests/error_017_hide_long_source_ts.ts.out new file mode 100644 index 0000000000..4b4016b84d --- /dev/null +++ b/cli/tests/error_017_hide_long_source_ts.ts.out @@ -0,0 +1,3 @@ +[WILDCARD]error TS2532: Object is possibly 'undefined'. + +► file:///[WILDCARD]cli/tests/error_017_hide_long_source_ts.ts:2:1 diff --git a/cli/tests/error_018_hide_long_source_js.js b/cli/tests/error_018_hide_long_source_js.js new file mode 100644 index 0000000000..a4c30670f9 --- /dev/null +++ b/cli/tests/error_018_hide_long_source_js.js @@ -0,0 +1,2 @@ +const LONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONG = undefined; +LONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONGLONG.a; diff --git a/cli/tests/error_018_hide_long_source_js.js.out b/cli/tests/error_018_hide_long_source_js.js.out new file mode 100644 index 0000000000..dbdd924df3 --- /dev/null +++ b/cli/tests/error_018_hide_long_source_js.js.out @@ -0,0 +1,3 @@ +error: Uncaught TypeError: Cannot read property 'a' of undefined +► file:///[WILDCARD]cli/tests/error_018_hide_long_source_js.js:2:206 + at file:///[WILDCARD]cli/tests/error_018_hide_long_source_js.js:2:206 diff --git a/cli/tests/integration_tests.rs b/cli/tests/integration_tests.rs index ed51605652..437214dcc2 100644 --- a/cli/tests/integration_tests.rs +++ b/cli/tests/integration_tests.rs @@ -1274,6 +1274,20 @@ itest!(error_016_dynamic_import_permissions2 { http_server: true, }); +itest!(error_017_hide_long_source_ts { + args: "--reload error_017_hide_long_source_ts.ts", + output: "error_017_hide_long_source_ts.ts.out", + check_stderr: true, + exit_code: 1, +}); + +itest!(error_018_hide_long_source_js { + args: "error_018_hide_long_source_js.js", + output: "error_018_hide_long_source_js.js.out", + check_stderr: true, + exit_code: 1, +}); + itest!(error_stack { args: "run --reload error_stack.ts", check_stderr: true,