diff options
Diffstat (limited to 'crates/ra_hir/src/db.rs')
-rw-r--r-- | crates/ra_hir/src/db.rs | 50 |
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 |
25 | pub trait DefDatabase: SourceDatabase { | 25 | // incremental. |
26 | #[salsa::query_group(AstDatabaseStorage)] | ||
27 | pub 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)] | ||
52 | pub 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)] |
124 | pub trait HirDatabase: DefDatabase { | 130 | pub 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 | ||