Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-expand/src/files.rs')
-rw-r--r--crates/hir-expand/src/files.rs20
1 files changed, 13 insertions, 7 deletions
diff --git a/crates/hir-expand/src/files.rs b/crates/hir-expand/src/files.rs
index f3bcc77268..5810d11338 100644
--- a/crates/hir-expand/src/files.rs
+++ b/crates/hir-expand/src/files.rs
@@ -159,7 +159,9 @@ trait FileIdToSyntax: Copy {
impl FileIdToSyntax for EditionedFileId {
fn file_syntax(self, db: &dyn db::ExpandDatabase) -> SyntaxNode {
- db.parse(self).syntax_node()
+ let file_id = base_db::EditionedFileId::new(db, self);
+
+ db.parse(file_id).syntax_node()
}
}
impl FileIdToSyntax for MacroFileId {
@@ -274,7 +276,7 @@ impl<SN: Borrow<SyntaxNode>> InFile<SN> {
// as we don't have node inputs otherwise and therefore can't find an `N` node in the input
let file_id = match self.file_id.repr() {
HirFileIdRepr::FileId(file_id) => {
- return Some(InRealFile { file_id, value: self.value.borrow().clone() })
+ return Some(InRealFile { file_id, value: self.value.borrow().clone() });
}
HirFileIdRepr::MacroFile(m)
if matches!(m.kind(db), MacroKind::Attr | MacroKind::AttrBuiltIn) =>
@@ -284,12 +286,14 @@ impl<SN: Borrow<SyntaxNode>> InFile<SN> {
_ => return None,
};
- let FileRange { file_id, range } = map_node_range_up_rooted(
+ let FileRange { file_id: editioned_file_id, range } = map_node_range_up_rooted(
db,
&db.expansion_span_map(file_id),
self.value.borrow().text_range(),
)?;
+ let file_id = base_db::EditionedFileId::new(db, editioned_file_id);
+
let kind = self.kind();
let value = db
.parse(file_id)
@@ -298,7 +302,7 @@ impl<SN: Borrow<SyntaxNode>> InFile<SN> {
.ancestors()
.take_while(|it| it.text_range() == range)
.find(|it| it.kind() == kind)?;
- Some(InRealFile::new(file_id, value))
+ Some(InRealFile::new(editioned_file_id, value))
}
}
@@ -453,7 +457,7 @@ impl<N: AstNode> InFile<N> {
// as we don't have node inputs otherwise and therefore can't find an `N` node in the input
let file_id = match self.file_id.repr() {
HirFileIdRepr::FileId(file_id) => {
- return Some(InRealFile { file_id, value: self.value })
+ return Some(InRealFile { file_id, value: self.value });
}
HirFileIdRepr::MacroFile(m) => m,
};
@@ -461,16 +465,18 @@ impl<N: AstNode> InFile<N> {
return None;
}
- let FileRange { file_id, range } = map_node_range_up_rooted(
+ let FileRange { file_id: editioned_file_id, range } = map_node_range_up_rooted(
db,
&db.expansion_span_map(file_id),
self.value.syntax().text_range(),
)?;
+ let file_id = base_db::EditionedFileId::new(db, editioned_file_id);
+
// FIXME: This heuristic is brittle and with the right macro may select completely unrelated nodes?
let anc = db.parse(file_id).syntax_node().covering_element(range);
let value = anc.ancestors().find_map(N::cast)?;
- Some(InRealFile::new(file_id, value))
+ Some(InRealFile::new(editioned_file_id, value))
}
}