diff --git a/crates/base-db/src/lib.rs b/crates/base-db/src/lib.rs index ff439119c917..a681ac72b701 100644 --- a/crates/base-db/src/lib.rs +++ b/crates/base-db/src/lib.rs @@ -170,16 +170,32 @@ impl Files { }; } - pub fn file_source_root(&self, id: vfs::FileId) -> FileSourceRootInput { + pub fn file_source_root( + &self, + db: &dyn SourceDatabase, + id: vfs::FileId, + ) -> FileSourceRootInput { let file_source_root = match self.file_source_roots.get(&id) { Some(file_source_root) => file_source_root, None => panic!( - "Unable to get `FileSourceRootInput` with `vfs::FileId` ({id:?}); this is a bug", + "Unable to get `FileSourceRootInput` with `vfs::FileId` ({id:?}, path: {}); this is a bug", + self.path_for_file(db, id) + .map_or_else(|| "".to_owned(), |path| path.to_string()), ), }; *file_source_root } + fn path_for_file(&self, db: &dyn SourceDatabase, id: vfs::FileId) -> Option { + for source_root in &*self.source_roots { + let source_root = *source_root.value(); + if let Some(path) = source_root.source_root(db).path_for_file(&id) { + return Some(path.clone()); + } + } + None + } + pub fn set_file_source_root_with_durability( &self, db: &mut dyn SourceDatabase, diff --git a/crates/hir-def/src/test_db.rs b/crates/hir-def/src/test_db.rs index 913b99223d9d..e3fd4560f049 100644 --- a/crates/hir-def/src/test_db.rs +++ b/crates/hir-def/src/test_db.rs @@ -122,7 +122,7 @@ impl SourceDatabase for TestDB { } fn file_source_root(&self, id: base_db::FileId) -> FileSourceRootInput { - self.files.file_source_root(id) + self.files.file_source_root(self, id) } fn set_file_source_root_with_durability( diff --git a/crates/hir-ty/src/test_db.rs b/crates/hir-ty/src/test_db.rs index 653fbe34f158..3dee592dbcfc 100644 --- a/crates/hir-ty/src/test_db.rs +++ b/crates/hir-ty/src/test_db.rs @@ -112,7 +112,7 @@ impl SourceDatabase for TestDB { } fn file_source_root(&self, id: base_db::FileId) -> FileSourceRootInput { - self.files.file_source_root(id) + self.files.file_source_root(self, id) } fn set_file_source_root_with_durability( diff --git a/crates/ide-db/src/lib.rs b/crates/ide-db/src/lib.rs index 2b1525e2b289..87cbc7c533d2 100644 --- a/crates/ide-db/src/lib.rs +++ b/crates/ide-db/src/lib.rs @@ -160,7 +160,7 @@ impl SourceDatabase for RootDatabase { } fn file_source_root(&self, id: vfs::FileId) -> FileSourceRootInput { - self.files.file_source_root(id) + self.files.file_source_root(self, id) } fn set_file_source_root_with_durability(