Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir/src/semantics.rs')
| -rw-r--r-- | crates/hir/src/semantics.rs | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/crates/hir/src/semantics.rs b/crates/hir/src/semantics.rs index 5e2eebcd13..aeeb3f9790 100644 --- a/crates/hir/src/semantics.rs +++ b/crates/hir/src/semantics.rs @@ -307,9 +307,10 @@ impl<'db> SemanticsImpl<'db> { SemanticsImpl { db, s2d_cache: Default::default(), macro_call_cache: Default::default() } } - pub fn parse(&self, file_id: EditionedFileId) -> ast::SourceFile { + pub fn parse(&self, file_id: base_db::EditionedFileId) -> ast::SourceFile { + let hir_file_id = file_id.editioned_file_id(self.db).into(); let tree = self.db.parse(file_id).tree(); - self.cache(tree.syntax().clone(), file_id.into()); + self.cache(tree.syntax().clone(), hir_file_id); tree } @@ -329,11 +330,14 @@ impl<'db> SemanticsImpl<'db> { } pub fn parse_guess_edition(&self, file_id: FileId) -> ast::SourceFile { - let file_id = self + let editioned_file_id = self .attach_first_edition(file_id) .unwrap_or_else(|| EditionedFileId::current_edition(file_id)); + + let file_id = base_db::EditionedFileId::new(self.db, editioned_file_id); + let tree = self.db.parse(file_id).tree(); - self.cache(tree.syntax().clone(), file_id.into()); + self.cache(tree.syntax().clone(), editioned_file_id.into()); tree } @@ -1903,7 +1907,9 @@ fn macro_call_to_macro_id( match loc.def.ast_id() { Either::Left(it) => { let node = match it.file_id.repr() { - HirFileIdRepr::FileId(file_id) => { + HirFileIdRepr::FileId(editioned_file_id) => { + let file_id = base_db::EditionedFileId::new(db, editioned_file_id); + it.to_ptr(db).to_node(&db.parse(file_id).syntax_node()) } HirFileIdRepr::MacroFile(macro_file) => { @@ -1915,7 +1921,9 @@ fn macro_call_to_macro_id( } Either::Right(it) => { let node = match it.file_id.repr() { - HirFileIdRepr::FileId(file_id) => { + HirFileIdRepr::FileId(editioned_file_id) => { + let file_id = base_db::EditionedFileId::new(db, editioned_file_id); + it.to_ptr(db).to_node(&db.parse(file_id).syntax_node()) } HirFileIdRepr::MacroFile(macro_file) => { |