aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_hir/src/db.rs
diff options
context:
space:
mode:
Diffstat (limited to 'crates/ra_hir/src/db.rs')
-rw-r--r--crates/ra_hir/src/db.rs50
1 files changed, 28 insertions, 22 deletions
diff --git a/crates/ra_hir/src/db.rs b/crates/ra_hir/src/db.rs
index e8b4f0ddc..872103219 100644
--- a/crates/ra_hir/src/db.rs
+++ b/crates/ra_hir/src/db.rs
@@ -21,10 +21,35 @@ use crate::{
21 lang_item::{LangItems, LangItemTarget}, 21 lang_item::{LangItems, LangItemTarget},
22}; 22};
23 23
24#[salsa::query_group(DefDatabaseStorage)] 24// This database has access to source code, so queries here are not really
25pub trait DefDatabase: SourceDatabase { 25// incremental.
26#[salsa::query_group(AstDatabaseStorage)]
27pub trait AstDatabase: SourceDatabase {
26 #[salsa::interned] 28 #[salsa::interned]
27 fn intern_macro(&self, macro_call: MacroCallLoc) -> ids::MacroCallId; 29 fn intern_macro(&self, macro_call: MacroCallLoc) -> ids::MacroCallId;
30
31 #[salsa::invoke(crate::source_id::AstIdMap::ast_id_map_query)]
32 fn ast_id_map(&self, file_id: HirFileId) -> Arc<AstIdMap>;
33 #[salsa::transparent]
34 #[salsa::invoke(crate::source_id::AstIdMap::file_item_query)]
35 fn ast_id_to_node(&self, file_id: HirFileId, ast_id: ErasedFileAstId) -> TreeArc<SyntaxNode>;
36 #[salsa::invoke(crate::ids::HirFileId::parse_or_expand_query)]
37 fn parse_or_expand(&self, file_id: HirFileId) -> Option<TreeArc<SyntaxNode>>;
38
39 #[salsa::invoke(crate::ids::macro_def_query)]
40 fn macro_def(&self, macro_id: MacroDefId) -> Option<Arc<mbe::MacroRules>>;
41
42 #[salsa::invoke(crate::ids::macro_arg_query)]
43 fn macro_arg(&self, macro_call: ids::MacroCallId) -> Option<Arc<tt::Subtree>>;
44
45 #[salsa::invoke(crate::ids::macro_expand_query)]
46 fn macro_expand(&self, macro_call: ids::MacroCallId) -> Result<Arc<tt::Subtree>, String>;
47}
48
49// This database uses `AstDatabase` internally,
50#[salsa::query_group(DefDatabaseStorage)]
51#[salsa::requires(AstDatabase)]
52pub trait DefDatabase: SourceDatabase {
28 #[salsa::interned] 53 #[salsa::interned]
29 fn intern_function(&self, loc: ids::ItemLoc<ast::FnDef>) -> ids::FunctionId; 54 fn intern_function(&self, loc: ids::ItemLoc<ast::FnDef>) -> ids::FunctionId;
30 #[salsa::interned] 55 #[salsa::interned]
@@ -46,18 +71,6 @@ pub trait DefDatabase: SourceDatabase {
46 #[salsa::interned] 71 #[salsa::interned]
47 fn intern_impl_block(&self, impl_block: ImplBlock) -> ids::GlobalImplId; 72 fn intern_impl_block(&self, impl_block: ImplBlock) -> ids::GlobalImplId;
48 73
49 #[salsa::invoke(crate::ids::macro_def_query)]
50 fn macro_def(&self, macro_id: MacroDefId) -> Option<Arc<mbe::MacroRules>>;
51
52 #[salsa::invoke(crate::ids::macro_arg_query)]
53 fn macro_arg(&self, macro_call: ids::MacroCallId) -> Option<Arc<tt::Subtree>>;
54
55 #[salsa::invoke(crate::ids::macro_expand_query)]
56 fn macro_expand(&self, macro_call: ids::MacroCallId) -> Result<Arc<tt::Subtree>, String>;
57
58 #[salsa::invoke(crate::ids::HirFileId::parse_or_expand_query)]
59 fn parse_or_expand(&self, file_id: HirFileId) -> Option<TreeArc<SyntaxNode>>;
60
61 #[salsa::invoke(crate::adt::StructData::struct_data_query)] 74 #[salsa::invoke(crate::adt::StructData::struct_data_query)]
62 fn struct_data(&self, s: Struct) -> Arc<StructData>; 75 fn struct_data(&self, s: Struct) -> Arc<StructData>;
63 76
@@ -70,13 +83,6 @@ pub trait DefDatabase: SourceDatabase {
70 #[salsa::invoke(crate::traits::TraitItemsIndex::trait_items_index)] 83 #[salsa::invoke(crate::traits::TraitItemsIndex::trait_items_index)]
71 fn trait_items_index(&self, module: Module) -> crate::traits::TraitItemsIndex; 84 fn trait_items_index(&self, module: Module) -> crate::traits::TraitItemsIndex;
72 85
73 #[salsa::invoke(crate::source_id::AstIdMap::ast_id_map_query)]
74 fn ast_id_map(&self, file_id: HirFileId) -> Arc<AstIdMap>;
75
76 #[salsa::invoke(crate::source_id::AstIdMap::file_item_query)]
77 #[salsa::transparent]
78 fn ast_id_to_node(&self, file_id: HirFileId, ast_id: ErasedFileAstId) -> TreeArc<SyntaxNode>;
79
80 #[salsa::invoke(RawItems::raw_items_query)] 86 #[salsa::invoke(RawItems::raw_items_query)]
81 fn raw_items(&self, file_id: HirFileId) -> Arc<RawItems>; 87 fn raw_items(&self, file_id: HirFileId) -> Arc<RawItems>;
82 88
@@ -121,7 +127,7 @@ pub trait DefDatabase: SourceDatabase {
121} 127}
122 128
123#[salsa::query_group(HirDatabaseStorage)] 129#[salsa::query_group(HirDatabaseStorage)]
124pub trait HirDatabase: DefDatabase { 130pub trait HirDatabase: DefDatabase + AstDatabase {
125 #[salsa::invoke(ExprScopes::expr_scopes_query)] 131 #[salsa::invoke(ExprScopes::expr_scopes_query)]
126 fn expr_scopes(&self, def: DefWithBody) -> Arc<ExprScopes>; 132 fn expr_scopes(&self, def: DefWithBody) -> Arc<ExprScopes>;
127 133