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.rs | 20 |
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)) } } |