aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_db/src/lib.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_db/src/lib.rs
parentb2de95879a8d48cc4077895376b0aaed1e972169 (diff)
move db basics to ra_db
This should allow to move hir to a separate crate
Diffstat (limited to 'crates/ra_db/src/lib.rs')
-rw-r--r--crates/ra_db/src/lib.rs69
1 files changed, 69 insertions, 0 deletions
diff --git a/crates/ra_db/src/lib.rs b/crates/ra_db/src/lib.rs
new file mode 100644
index 000000000..833f95eeb
--- /dev/null
+++ b/crates/ra_db/src/lib.rs
@@ -0,0 +1,69 @@
1//! ra_db defines basic database traits. Concrete DB is defined by ra_analysis.
2
3extern crate ra_editor;
4extern crate ra_syntax;
5extern crate relative_path;
6extern crate rustc_hash;
7extern crate salsa;
8
9mod syntax_ptr;
10mod file_resolver;
11mod input;
12mod loc2id;
13
14use std::sync::Arc;
15use ra_editor::LineIndex;
16use ra_syntax::SourceFileNode;
17
18#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
19pub struct Canceled;
20
21pub type Cancelable<T> = Result<T, Canceled>;
22
23impl std::fmt::Display for Canceled {
24 fn fmt(&self, fmt: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
25 fmt.write_str("Canceled")
26 }
27}
28
29impl std::error::Error for Canceled {}
30
31pub use crate::{
32 syntax_ptr::LocalSyntaxPtr,
33 file_resolver::{FileResolver, FileResolverImp},
34 input::{
35 FilesDatabase, FileId, CrateId, SourceRoot, SourceRootId, CrateGraph, WORKSPACE,
36 FileTextQuery, FileSourceRootQuery, SourceRootQuery, LibrariesQuery, CrateGraphQuery,
37 },
38 loc2id::{LocationIntener, NumericId},
39};
40
41pub trait BaseDatabase: salsa::Database {
42 fn check_canceled(&self) -> Cancelable<()> {
43 if self.salsa_runtime().is_current_revision_canceled() {
44 Err(Canceled)
45 } else {
46 Ok(())
47 }
48 }
49}
50
51salsa::query_group! {
52 pub trait SyntaxDatabase: crate::input::FilesDatabase + BaseDatabase {
53 fn source_file(file_id: FileId) -> SourceFileNode {
54 type SourceFileQuery;
55 }
56 fn file_lines(file_id: FileId) -> Arc<LineIndex> {
57 type FileLinesQuery;
58 }
59 }
60}
61
62fn source_file(db: &impl SyntaxDatabase, file_id: FileId) -> SourceFileNode {
63 let text = db.file_text(file_id);
64 SourceFileNode::parse(&*text)
65}
66fn file_lines(db: &impl SyntaxDatabase, file_id: FileId) -> Arc<LineIndex> {
67 let text = db.file_text(file_id);
68 Arc::new(LineIndex::new(&*text))
69}