summaryrefslogtreecommitdiff
path: root/cli/fmt_errors.rs
diff options
context:
space:
mode:
authorNayeem Rahman <nayeemrmn99@gmail.com>2021-10-18 17:05:36 +0100
committerGitHub <noreply@github.com>2021-10-18 18:05:36 +0200
commit5a48d41bddf599b14dd9019ff49821c436ce4542 (patch)
tree00fa6bd6d23bb3ec7548e2dbc7cdfdf41f2b2e74 /cli/fmt_errors.rs
parent0a7ba33ed13450af031503a1060389037c509ea3 (diff)
fix(cli/fmt_errors): don't panic on source line formatting errors (#12449)
Returns empty values in case of errors, source lines are non-essential anyway. These errors can happen e.g. when source files change at runtime. A warning is also printed to help us track when it happens in unexpected cases besides this.
Diffstat (limited to 'cli/fmt_errors.rs')
-rw-r--r--cli/fmt_errors.rs11
1 files changed, 11 insertions, 0 deletions
diff --git a/cli/fmt_errors.rs b/cli/fmt_errors.rs
index 2b95f0fc7..6c4a4893a 100644
--- a/cli/fmt_errors.rs
+++ b/cli/fmt_errors.rs
@@ -177,12 +177,23 @@ fn format_maybe_source_line(
if source_line.is_empty() || source_line.len() > SOURCE_ABBREV_THRESHOLD {
return "".to_string();
}
+ if source_line.contains("Couldn't format source line: ") {
+ return format!("\n{}", source_line);
+ }
assert!(start_column.is_some());
assert!(end_column.is_some());
let mut s = String::new();
let start_column = start_column.unwrap();
let end_column = end_column.unwrap();
+
+ if start_column as usize >= source_line.len() {
+ return format!(
+ "\n{} Couldn't format source line: Column {} is out of bounds (source may have changed at runtime)",
+ crate::colors::yellow("Warning"), start_column + 1,
+ );
+ }
+
// TypeScript uses `~` always, but V8 would utilise `^` always, even when
// doing ranges, so here, if we only have one marker (very common with V8
// errors) we will use `^` instead.