Skip to content

Commit da50271

Browse files
Fix logic for determining macro calls
I believe this currently goes back all the way to the initial user-written call, but that seems better than the current broken behavior.
1 parent 306c6cb commit da50271

File tree

1 file changed

+7
-9
lines changed

1 file changed

+7
-9
lines changed

crates/hir_expand/src/lib.rs

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -457,17 +457,15 @@ impl<'a> InFile<&'a SyntaxNode> {
457457
return FileRange { file_id: range.file_id.original_file(db), range: range.value };
458458
}
459459

460-
// Fall back to whole macro call
461-
if let Some(expansion) = self.file_id.expansion_info(db) {
462-
if let Some(call_node) = expansion.call_node() {
463-
return FileRange {
464-
file_id: call_node.file_id.original_file(db),
465-
range: call_node.value.text_range(),
466-
};
467-
}
460+
// Fall back to whole macro call.
461+
let mut node = self.cloned();
462+
while let Some(call_node) = node.file_id.call_node(db) {
463+
node = call_node;
468464
}
469465

470-
FileRange { file_id: self.file_id.original_file(db), range: self.value.text_range() }
466+
let orig_file = node.file_id.original_file(db);
467+
assert_eq!(node.file_id, orig_file.into());
468+
FileRange { file_id: orig_file, range: node.value.text_range() }
471469
}
472470
}
473471

0 commit comments

Comments
 (0)