From 695294bbb974cdbac136e260029403e90a17d953 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Tue, 8 Jan 2019 21:00:51 +0300 Subject: ra_db is independent from editor --- crates/ra_analysis/src/db.rs | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) (limited to 'crates/ra_analysis/src/db.rs') diff --git a/crates/ra_analysis/src/db.rs b/crates/ra_analysis/src/db.rs index 1709be5cf..9d46609ec 100644 --- a/crates/ra_analysis/src/db.rs +++ b/crates/ra_analysis/src/db.rs @@ -1,10 +1,9 @@ use std::{fmt, sync::Arc}; + use salsa::{self, Database}; -use ra_db::{LocationIntener, BaseDatabase}; +use ra_db::{LocationIntener, BaseDatabase, FileId}; -use crate::{ - symbol_index, -}; +use crate::{symbol_index, LineIndex}; #[derive(Debug)] pub(crate) struct RootDatabase { @@ -71,6 +70,19 @@ impl AsRef> for RootDatabas } } +salsa::query_group! { + pub(crate) trait LineIndexDatabase: ra_db::FilesDatabase + BaseDatabase { + fn line_index(file_id: FileId) -> Arc { + type LineIndexQuery; + } + } +} + +fn line_index(db: &impl ra_db::FilesDatabase, file_id: FileId) -> Arc { + let text = db.file_text(file_id); + Arc::new(LineIndex::new(&*text)) +} + salsa::database_storage! { pub(crate) struct RootDatabaseStorage for RootDatabase { impl ra_db::FilesDatabase { @@ -84,7 +96,9 @@ salsa::database_storage! { } impl ra_db::SyntaxDatabase { fn source_file() for ra_db::SourceFileQuery; - fn file_lines() for ra_db::FileLinesQuery; + } + impl LineIndexDatabase { + fn line_index() for LineIndexQuery; } impl symbol_index::SymbolsDatabase { fn file_symbols() for symbol_index::FileSymbolsQuery; -- cgit v1.2.3