From 5a48d41bddf599b14dd9019ff49821c436ce4542 Mon Sep 17 00:00:00 2001 From: Nayeem Rahman Date: Mon, 18 Oct 2021 17:05:36 +0100 Subject: 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. --- cli/fmt_errors.rs | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'cli/fmt_errors.rs') 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. -- cgit v1.2.3