fix: Fix bad unwrap in eager_macro_recur

This commit is contained in:
Lukas Wirth 2023-07-30 11:41:21 +02:00
parent f442c4aad6
commit 3db437cbd6

View File

@ -205,17 +205,19 @@ fn eager_macro_recur(
let ExpandResult { value, err: err2 } = let ExpandResult { value, err: err2 } =
db.parse_macro_expansion(call_id.as_macro_file()); db.parse_macro_expansion(call_id.as_macro_file());
let call_tt_start = if let Some(tt) = call.token_tree() {
call.token_tree().unwrap().syntax().text_range().start(); let call_tt_start = tt.syntax().text_range().start();
let call_start = apply_offset(call.syntax().text_range().start(), offset); let call_start =
if let Some((_, arg_map, _)) = db.macro_arg(call_id).value.as_deref() { apply_offset(call.syntax().text_range().start(), offset);
mapping.extend(arg_map.entries().filter_map(|(tid, range)| { if let Some((_, arg_map, _)) = db.macro_arg(call_id).value.as_deref() {
value mapping.extend(arg_map.entries().filter_map(|(tid, range)| {
.1 value
.first_range_by_token(tid, syntax::SyntaxKind::TOMBSTONE) .1
.map(|r| (r + call_start, range + call_tt_start)) .first_range_by_token(tid, syntax::SyntaxKind::TOMBSTONE)
})); .map(|r| (r + call_start, range + call_tt_start))
}; }));
}
}
ExpandResult { ExpandResult {
value: Some(value.0.syntax_node().clone_for_update()), value: Some(value.0.syntax_node().clone_for_update()),
@ -250,22 +252,24 @@ fn eager_macro_recur(
)?; )?;
let err = err.or(error); let err = err.or(error);
let call_tt_start = call.token_tree().unwrap().syntax().text_range().start(); if let Some(tt) = call.token_tree() {
let call_start = apply_offset(call.syntax().text_range().start(), offset); let call_tt_start = tt.syntax().text_range().start();
if let Some((_tt, arg_map, _)) = parse let call_start = apply_offset(call.syntax().text_range().start(), offset);
.file_id if let Some((_tt, arg_map, _)) = parse
.macro_file() .file_id
.and_then(|id| db.macro_arg(id.macro_call_id).value) .macro_file()
.as_deref() .and_then(|id| db.macro_arg(id.macro_call_id).value)
{ .as_deref()
mapping.extend(arg_map.entries().filter_map(|(tid, range)| { {
tm.first_range_by_token( mapping.extend(arg_map.entries().filter_map(|(tid, range)| {
decl_mac.as_ref().map(|it| it.map_id_down(tid)).unwrap_or(tid), tm.first_range_by_token(
syntax::SyntaxKind::TOMBSTONE, decl_mac.as_ref().map(|it| it.map_id_down(tid)).unwrap_or(tid),
) syntax::SyntaxKind::TOMBSTONE,
.map(|r| (r + call_start, range + call_tt_start)) )
})); .map(|r| (r + call_start, range + call_tt_start))
}; }));
}
}
// FIXME: Do we need to re-use _m here? // FIXME: Do we need to re-use _m here?
ExpandResult { value: value.map(|(n, _m)| n), err } ExpandResult { value: value.map(|(n, _m)| n), err }
} }