Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-db/src/lib.rs')
-rw-r--r--crates/ide-db/src/lib.rs25
1 files changed, 15 insertions, 10 deletions
diff --git a/crates/ide-db/src/lib.rs b/crates/ide-db/src/lib.rs
index 8d16826e19..99af1c32d8 100644
--- a/crates/ide-db/src/lib.rs
+++ b/crates/ide-db/src/lib.rs
@@ -61,7 +61,7 @@ use std::{fmt, mem::ManuallyDrop};
use base_db::{
CrateGraphBuilder, CratesMap, FileSourceRootInput, FileText, Files, Nonce, SourceDatabase,
- SourceRoot, SourceRootId, SourceRootInput, query_group, set_all_crates_with_durability,
+ SourceRoot, SourceRootId, SourceRootInput, set_all_crates_with_durability,
};
use hir::{
FilePositionWrapper, FileRangeWrapper,
@@ -252,15 +252,20 @@ impl RootDatabase {
}
}
-#[query_group::query_group]
-pub trait LineIndexDatabase: base_db::SourceDatabase {
- #[salsa::invoke_interned(line_index)]
- fn line_index(&self, file_id: FileId) -> Arc<LineIndex>;
-}
-
-fn line_index(db: &dyn LineIndexDatabase, file_id: FileId) -> Arc<LineIndex> {
- let text = db.file_text(file_id).text(db);
- Arc::new(LineIndex::new(text))
+pub fn line_index(db: &dyn SourceDatabase, file_id: FileId) -> &Arc<LineIndex> {
+ #[salsa::interned]
+ pub struct InternedFileId {
+ id: FileId,
+ }
+ #[salsa::tracked(returns(ref))]
+ fn line_index<'db>(
+ db: &'db dyn SourceDatabase,
+ file_id: InternedFileId<'db>,
+ ) -> Arc<LineIndex> {
+ let text = db.file_text(file_id.id(db)).text(db);
+ Arc::new(LineIndex::new(text))
+ }
+ line_index(db, InternedFileId::new(db, file_id))
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]