From abf2179c0b606730acadc61451739baecfa33a5d Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Mon, 14 Oct 2019 16:20:55 +0300 Subject: Prepare SourceDatabase API for lazy file loading --- crates/ra_ide_api/src/change.rs | 2 +- crates/ra_ide_api/src/db.rs | 21 ++++++++++++++++++++- crates/ra_ide_api/src/diagnostics.rs | 2 +- crates/ra_ide_api/src/lib.rs | 10 +++++++--- crates/ra_ide_api/src/references.rs | 2 +- crates/ra_ide_api/src/symbol_index.rs | 2 +- 6 files changed, 31 insertions(+), 8 deletions(-) (limited to 'crates/ra_ide_api') diff --git a/crates/ra_ide_api/src/change.rs b/crates/ra_ide_api/src/change.rs index 09913787b..050249c0e 100644 --- a/crates/ra_ide_api/src/change.rs +++ b/crates/ra_ide_api/src/change.rs @@ -4,7 +4,7 @@ use std::{fmt, sync::Arc, time}; use ra_db::{ salsa::{Database, Durability, SweepStrategy}, - CrateGraph, CrateId, FileId, SourceDatabase, SourceRoot, SourceRootId, + CrateGraph, CrateId, FileId, SourceDatabase, SourceDatabaseExt, SourceRoot, SourceRootId, }; use ra_prof::{memory_usage, profile, Bytes}; use ra_syntax::SourceFile; diff --git a/crates/ra_ide_api/src/db.rs b/crates/ra_ide_api/src/db.rs index ea0714add..b9321464b 100644 --- a/crates/ra_ide_api/src/db.rs +++ b/crates/ra_ide_api/src/db.rs @@ -4,8 +4,10 @@ use std::sync::Arc; use ra_db::{ salsa::{self, Database, Durability}, - Canceled, CheckCanceled, CrateId, FileId, SourceDatabase, SourceRootId, + Canceled, CheckCanceled, CrateId, FileId, FileLoader, FileLoaderDelegate, SourceDatabase, + SourceDatabaseExt, SourceRootId, }; +use relative_path::RelativePath; use rustc_hash::FxHashMap; use crate::{ @@ -15,6 +17,7 @@ use crate::{ #[salsa::database( ra_db::SourceDatabaseStorage, + ra_db::SourceDatabaseExtStorage, LineIndexDatabaseStorage, symbol_index::SymbolsDatabaseStorage, hir::db::InternDatabaseStorage, @@ -31,6 +34,22 @@ pub(crate) struct RootDatabase { pub(crate) last_gc_check: crate::wasm_shims::Instant, } +impl FileLoader for RootDatabase { + fn file_text(&self, file_id: FileId) -> Arc { + FileLoaderDelegate(self).file_text(file_id) + } + fn resolve_relative_path( + &self, + anchor: FileId, + relative_path: &RelativePath, + ) -> Option { + FileLoaderDelegate(self).resolve_relative_path(anchor, relative_path) + } + fn relevant_crates(&self, file_id: FileId) -> Arc> { + FileLoaderDelegate(self).relevant_crates(file_id) + } +} + impl hir::debug::HirDebugHelper for RootDatabase { fn crate_name(&self, krate: CrateId) -> Option { self.debug_data.crate_names.get(&krate).cloned() diff --git a/crates/ra_ide_api/src/diagnostics.rs b/crates/ra_ide_api/src/diagnostics.rs index 65f061443..8743a3a79 100644 --- a/crates/ra_ide_api/src/diagnostics.rs +++ b/crates/ra_ide_api/src/diagnostics.rs @@ -4,7 +4,7 @@ use std::cell::RefCell; use hir::diagnostics::{AstDiagnostic, Diagnostic as _, DiagnosticSink}; use itertools::Itertools; -use ra_db::SourceDatabase; +use ra_db::{SourceDatabase, SourceDatabaseExt}; use ra_prof::profile; use ra_syntax::{ algo, diff --git a/crates/ra_ide_api/src/lib.rs b/crates/ra_ide_api/src/lib.rs index 2d92fe1c5..f7fd42f65 100644 --- a/crates/ra_ide_api/src/lib.rs +++ b/crates/ra_ide_api/src/lib.rs @@ -52,7 +52,7 @@ use std::sync::Arc; use ra_cfg::CfgOptions; use ra_db::{ salsa::{self, ParallelDatabase}, - CheckCanceled, SourceDatabase, + CheckCanceled, FileLoader, SourceDatabase, }; use ra_syntax::{SourceFile, TextRange, TextUnit}; use ra_text_edit::TextEdit; @@ -289,10 +289,14 @@ impl AnalysisHost { pub fn per_query_memory_usage(&mut self) -> Vec<(String, ra_prof::Bytes)> { self.db.per_query_memory_usage() } - pub fn raw_database(&self) -> &(impl hir::db::HirDatabase + salsa::Database) { + pub fn raw_database( + &self, + ) -> &(impl hir::db::HirDatabase + salsa::Database + ra_db::SourceDatabaseExt) { &self.db } - pub fn raw_database_mut(&mut self) -> &mut (impl hir::db::HirDatabase + salsa::Database) { + pub fn raw_database_mut( + &mut self, + ) -> &mut (impl hir::db::HirDatabase + salsa::Database + ra_db::SourceDatabaseExt) { &mut self.db } } diff --git a/crates/ra_ide_api/src/references.rs b/crates/ra_ide_api/src/references.rs index c95c47bf1..4247c6d90 100644 --- a/crates/ra_ide_api/src/references.rs +++ b/crates/ra_ide_api/src/references.rs @@ -1,7 +1,7 @@ //! FIXME: write short doc here use hir::{Either, ModuleSource}; -use ra_db::SourceDatabase; +use ra_db::{SourceDatabase, SourceDatabaseExt}; use ra_syntax::{algo::find_node_at_offset, ast, AstNode, SourceFile, SyntaxNode}; use relative_path::{RelativePath, RelativePathBuf}; diff --git a/crates/ra_ide_api/src/symbol_index.rs b/crates/ra_ide_api/src/symbol_index.rs index 797e9926f..5729eb5b3 100644 --- a/crates/ra_ide_api/src/symbol_index.rs +++ b/crates/ra_ide_api/src/symbol_index.rs @@ -29,7 +29,7 @@ use std::{ use fst::{self, Streamer}; use ra_db::{ salsa::{self, ParallelDatabase}, - SourceDatabase, SourceRootId, + SourceDatabaseExt, SourceRootId, }; use ra_syntax::{ ast::{self, NameOwner}, -- cgit v1.2.3