diff options
Diffstat (limited to 'crates/ra_analysis/src/db.rs')
-rw-r--r-- | crates/ra_analysis/src/db.rs | 69 |
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 @@ | |||
1 | use std::sync::Arc; | 1 | use std::sync::Arc; |
2 | #[cfg(test)] | 2 | #[cfg(test)] |
3 | use parking_lot::Mutex; | 3 | use parking_lot::Mutex; |
4 | use ra_editor::LineIndex; | ||
5 | use ra_syntax::{SourceFileNode}; | ||
6 | use salsa::{self, Database}; | 4 | use salsa::{self, Database}; |
5 | use ra_db::{LocationIntener, BaseDatabase}; | ||
7 | 6 | ||
8 | use crate::{ | 7 | use 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 | ||
70 | pub(crate) trait BaseDatabase: salsa::Database { | 68 | impl 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 | |||
81 | impl BaseDatabase for RootDatabase { | ||
82 | fn id_maps(&self) -> &IdMaps { | ||
83 | &self.id_maps | ||
84 | } | ||
85 | } | ||
86 | 69 | ||
87 | impl AsRef<LocationIntener<DefLoc, DefId>> for RootDatabase { | 70 | impl 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 | ||
122 | salsa::database_storage! { | 105 | salsa::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 | |||
152 | salsa::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 | |||
163 | fn source_file(db: &impl SyntaxDatabase, file_id: FileId) -> SourceFileNode { | ||
164 | let text = db.file_text(file_id); | ||
165 | SourceFileNode::parse(&*text) | ||
166 | } | ||
167 | fn 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 | } | ||