aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_analysis/src/db.rs
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2018-11-28 00:25:20 +0000
committerAleksey Kladov <[email protected]>2018-11-28 00:25:20 +0000
commit11168c464cd962af3336a2cc68295496066edd6c (patch)
tree2c3b0bceea0dcf092ae8bf9d16c1508295606b09 /crates/ra_analysis/src/db.rs
parentb2de95879a8d48cc4077895376b0aaed1e972169 (diff)
move db basics to ra_db
This should allow to move hir to a separate crate
Diffstat (limited to 'crates/ra_analysis/src/db.rs')
-rw-r--r--crates/ra_analysis/src/db.rs69
1 files changed, 16 insertions, 53 deletions
diff --git a/crates/ra_analysis/src/db.rs b/crates/ra_analysis/src/db.rs
index e0b7afac5..1b2dd4b3d 100644
--- a/crates/ra_analysis/src/db.rs
+++ b/crates/ra_analysis/src/db.rs
@@ -1,15 +1,13 @@
1use std::sync::Arc; 1use std::sync::Arc;
2#[cfg(test)] 2#[cfg(test)]
3use parking_lot::Mutex; 3use parking_lot::Mutex;
4use ra_editor::LineIndex;
5use ra_syntax::{SourceFileNode};
6use salsa::{self, Database}; 4use salsa::{self, Database};
5use ra_db::{LocationIntener, BaseDatabase};
7 6
8use crate::{ 7use crate::{
9 hir, 8 hir,
10 symbol_index, 9 symbol_index,
11 loc2id::{IdMaps, LocationIntener, DefId, DefLoc, FnId}, 10 loc2id::{IdMaps, DefId, DefLoc, FnId},
12 Cancelable, Canceled, FileId,
13}; 11};
14 12
15#[derive(Debug)] 13#[derive(Debug)]
@@ -47,11 +45,11 @@ impl Default for RootDatabase {
47 runtime: salsa::Runtime::default(), 45 runtime: salsa::Runtime::default(),
48 id_maps: Default::default(), 46 id_maps: Default::default(),
49 }; 47 };
50 db.query_mut(crate::input::SourceRootQuery) 48 db.query_mut(ra_db::SourceRootQuery)
51 .set(crate::input::WORKSPACE, Default::default()); 49 .set(ra_db::WORKSPACE, Default::default());
52 db.query_mut(crate::input::CrateGraphQuery) 50 db.query_mut(ra_db::CrateGraphQuery)
53 .set((), Default::default()); 51 .set((), Default::default());
54 db.query_mut(crate::input::LibrariesQuery) 52 db.query_mut(ra_db::LibrariesQuery)
55 .set((), Default::default()); 53 .set((), Default::default());
56 db 54 db
57 } 55 }
@@ -67,22 +65,7 @@ impl salsa::ParallelDatabase for RootDatabase {
67 } 65 }
68} 66}
69 67
70pub(crate) trait BaseDatabase: salsa::Database { 68impl BaseDatabase for RootDatabase {}
71 fn id_maps(&self) -> &IdMaps;
72 fn check_canceled(&self) -> Cancelable<()> {
73 if self.salsa_runtime().is_current_revision_canceled() {
74 Err(Canceled)
75 } else {
76 Ok(())
77 }
78 }
79}
80
81impl BaseDatabase for RootDatabase {
82 fn id_maps(&self) -> &IdMaps {
83 &self.id_maps
84 }
85}
86 69
87impl AsRef<LocationIntener<DefLoc, DefId>> for RootDatabase { 70impl AsRef<LocationIntener<DefLoc, DefId>> for RootDatabase {
88 fn as_ref(&self) -> &LocationIntener<DefLoc, DefId> { 71 fn as_ref(&self) -> &LocationIntener<DefLoc, DefId> {
@@ -121,16 +104,16 @@ impl RootDatabase {
121 104
122salsa::database_storage! { 105salsa::database_storage! {
123 pub(crate) struct RootDatabaseStorage for RootDatabase { 106 pub(crate) struct RootDatabaseStorage for RootDatabase {
124 impl crate::input::FilesDatabase { 107 impl ra_db::FilesDatabase {
125 fn file_text() for crate::input::FileTextQuery; 108 fn file_text() for ra_db::FileTextQuery;
126 fn file_source_root() for crate::input::FileSourceRootQuery; 109 fn file_source_root() for ra_db::FileSourceRootQuery;
127 fn source_root() for crate::input::SourceRootQuery; 110 fn source_root() for ra_db::SourceRootQuery;
128 fn libraries() for crate::input::LibrariesQuery; 111 fn libraries() for ra_db::LibrariesQuery;
129 fn crate_graph() for crate::input::CrateGraphQuery; 112 fn crate_graph() for ra_db::CrateGraphQuery;
130 } 113 }
131 impl SyntaxDatabase { 114 impl ra_db::SyntaxDatabase {
132 fn source_file() for SourceFileQuery; 115 fn source_file() for ra_db::SourceFileQuery;
133 fn file_lines() for FileLinesQuery; 116 fn file_lines() for ra_db::FileLinesQuery;
134 } 117 }
135 impl symbol_index::SymbolsDatabase { 118 impl symbol_index::SymbolsDatabase {
136 fn file_symbols() for symbol_index::FileSymbolsQuery; 119 fn file_symbols() for symbol_index::FileSymbolsQuery;
@@ -148,23 +131,3 @@ salsa::database_storage! {
148 } 131 }
149 } 132 }
150} 133}
151
152salsa::query_group! {
153 pub(crate) trait SyntaxDatabase: crate::input::FilesDatabase + BaseDatabase {
154 fn source_file(file_id: FileId) -> SourceFileNode {
155 type SourceFileQuery;
156 }
157 fn file_lines(file_id: FileId) -> Arc<LineIndex> {
158 type FileLinesQuery;
159 }
160 }
161}
162
163fn source_file(db: &impl SyntaxDatabase, file_id: FileId) -> SourceFileNode {
164 let text = db.file_text(file_id);
165 SourceFileNode::parse(&*text)
166}
167fn file_lines(db: &impl SyntaxDatabase, file_id: FileId) -> Arc<LineIndex> {
168 let text = db.file_text(file_id);
169 Arc::new(LineIndex::new(&*text))
170}