mirror of
https://github.com/denoland/deno.git
synced 2025-08-04 02:48:24 +00:00
fix: use inline source maps when present in js (#8995)
This commit is contained in:
parent
8d1ee3bfaf
commit
39bbbbce70
17 changed files with 157 additions and 48 deletions
|
@ -33,14 +33,15 @@ pub fn apply_source_map<G: SourceMapGetter>(
|
|||
// prepareStackTrace().
|
||||
let mut mappings_map: CachedMaps = HashMap::new();
|
||||
|
||||
let (script_resource_name, line_number, start_column) =
|
||||
let (script_resource_name, line_number, start_column, source_line) =
|
||||
get_maybe_orig_position(
|
||||
js_error.script_resource_name.clone(),
|
||||
js_error.line_number,
|
||||
// start_column is 0-based, we need 1-based here.
|
||||
js_error.start_column.map(|n| n + 1),
|
||||
js_error.source_line.clone(),
|
||||
&mut mappings_map,
|
||||
getter.clone(),
|
||||
getter,
|
||||
);
|
||||
let start_column = start_column.map(|n| n - 1);
|
||||
// It is better to just move end_column to be the same distance away from
|
||||
|
@ -56,20 +57,6 @@ pub fn apply_source_map<G: SourceMapGetter>(
|
|||
}
|
||||
_ => None,
|
||||
};
|
||||
// if there is a source line that we might be different in the source file, we
|
||||
// will go fetch it from the getter
|
||||
let source_line = match line_number {
|
||||
Some(ln)
|
||||
if js_error.source_line.is_some() && script_resource_name.is_some() =>
|
||||
{
|
||||
getter.get_source_line(
|
||||
&js_error.script_resource_name.clone().unwrap(),
|
||||
// Getter expects 0-based line numbers, but ours are 1-based.
|
||||
ln as usize - 1,
|
||||
)
|
||||
}
|
||||
_ => js_error.source_line.clone(),
|
||||
};
|
||||
|
||||
JsError {
|
||||
message: js_error.message.clone(),
|
||||
|
@ -87,16 +74,29 @@ fn get_maybe_orig_position<G: SourceMapGetter>(
|
|||
file_name: Option<String>,
|
||||
line_number: Option<i64>,
|
||||
column_number: Option<i64>,
|
||||
source_line: Option<String>,
|
||||
mappings_map: &mut CachedMaps,
|
||||
getter: Arc<G>,
|
||||
) -> (Option<String>, Option<i64>, Option<i64>) {
|
||||
) -> (Option<String>, Option<i64>, Option<i64>, Option<String>) {
|
||||
match (file_name, line_number, column_number) {
|
||||
(Some(file_name_v), Some(line_v), Some(column_v)) => {
|
||||
let (file_name, line_number, column_number) =
|
||||
get_orig_position(file_name_v, line_v, column_v, mappings_map, getter);
|
||||
(Some(file_name), Some(line_number), Some(column_number))
|
||||
let (file_name, line_number, column_number, source_line) =
|
||||
get_orig_position(
|
||||
file_name_v,
|
||||
line_v,
|
||||
column_v,
|
||||
source_line,
|
||||
mappings_map,
|
||||
getter,
|
||||
);
|
||||
(
|
||||
Some(file_name),
|
||||
Some(line_number),
|
||||
Some(column_number),
|
||||
source_line,
|
||||
)
|
||||
}
|
||||
_ => (None, None, None),
|
||||
_ => (None, None, None, source_line),
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -104,11 +104,13 @@ pub fn get_orig_position<G: SourceMapGetter>(
|
|||
file_name: String,
|
||||
line_number: i64,
|
||||
column_number: i64,
|
||||
source_line: Option<String>,
|
||||
mappings_map: &mut CachedMaps,
|
||||
getter: Arc<G>,
|
||||
) -> (String, i64, i64) {
|
||||
let maybe_source_map = get_mappings(&file_name, mappings_map, getter);
|
||||
let default_pos = (file_name, line_number, column_number);
|
||||
) -> (String, i64, i64, Option<String>) {
|
||||
let maybe_source_map = get_mappings(&file_name, mappings_map, getter.clone());
|
||||
let default_pos =
|
||||
(file_name, line_number, column_number, source_line.clone());
|
||||
|
||||
// Lookup expects 0-based line and column numbers, but ours are 1-based.
|
||||
let line_number = line_number - 1;
|
||||
|
@ -121,11 +123,33 @@ pub fn get_orig_position<G: SourceMapGetter>(
|
|||
None => default_pos,
|
||||
Some(token) => match token.get_source() {
|
||||
None => default_pos,
|
||||
Some(original) => (
|
||||
original.to_string(),
|
||||
i64::from(token.get_src_line()) + 1,
|
||||
i64::from(token.get_src_col()) + 1,
|
||||
),
|
||||
Some(original) => {
|
||||
let maybe_source_line =
|
||||
if let Some(source_view) = token.get_source_view() {
|
||||
source_view.get_line(token.get_src_line())
|
||||
} else {
|
||||
None
|
||||
};
|
||||
|
||||
let source_line = if let Some(source_line) = maybe_source_line {
|
||||
Some(source_line.to_string())
|
||||
} else if let Some(source_line) = getter.get_source_line(
|
||||
original,
|
||||
// Getter expects 0-based line numbers, but ours are 1-based.
|
||||
token.get_src_line() as usize,
|
||||
) {
|
||||
Some(source_line)
|
||||
} else {
|
||||
source_line
|
||||
};
|
||||
|
||||
(
|
||||
original.to_string(),
|
||||
i64::from(token.get_src_line()) + 1,
|
||||
i64::from(token.get_src_col()) + 1,
|
||||
source_line,
|
||||
)
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue