summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevin (Kun) "Kassimo" Qian <kevinkassimo@gmail.com>2020-03-24 20:53:48 -0700
committerGitHub <noreply@github.com>2020-03-24 23:53:48 -0400
commit3d228f5f9ec729d1b027588ccf36987c82f53516 (patch)
treedf7bc53204d8eef5df25875bb0eeb3b8d9182e3a
parentaddfdc4cd0ffa0e0f6b284379c8873a202af7d5b (diff)
hide source line if error message longer than 150 chars (#4487)
-rw-r--r--cli/fmt_errors.rs7
-rw-r--r--cli/tests/error_017_hide_long_source_ts.ts2
-rw-r--r--cli/tests/error_017_hide_long_source_ts.ts.out3
-rw-r--r--cli/tests/error_018_hide_long_source_js.js2
-rw-r--r--cli/tests/error_018_hide_long_source_js.js.out3
-rw-r--r--cli/tests/integration_tests.rs14
6 files changed, 29 insertions, 2 deletions
diff --git a/cli/fmt_errors.rs b/cli/fmt_errors.rs
index 73d6bb2d2..0a22b4625 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 000000000..a4c30670f
--- /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 000000000..4b4016b84
--- /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 000000000..a4c30670f
--- /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 000000000..dbdd924df
--- /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 ed5160565..437214dcc 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,