diff options
author | Aleksey Kladov <[email protected]> | 2019-05-04 15:38:09 +0100 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2019-05-04 15:38:09 +0100 |
commit | 5dc384132f7fe6f610ec21e62830ab83f45274a9 (patch) | |
tree | f9b89014aff6dab0353b2134dc5e8cf502f7fc4f /crates/ra_hir/src/db.rs | |
parent | 8876f44054f57c1f4ee305eb47340609683bd566 (diff) |
introduce macro_arg intermediate query
Currently, when expanding macros, we look at the source code
directly (we invoke ast_id_to_node query via to_node method).
This is less then ideal, because it make us re-expand macros after
every source change.
This commit establishes a salsa-firewall: a query to get macro call's
token tree. Unlike the syntax tree, token tree changes only if we
actually modify the macro itself.
Diffstat (limited to 'crates/ra_hir/src/db.rs')
-rw-r--r-- | crates/ra_hir/src/db.rs | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/crates/ra_hir/src/db.rs b/crates/ra_hir/src/db.rs index 8af0a3176..f88ae61bb 100644 --- a/crates/ra_hir/src/db.rs +++ b/crates/ra_hir/src/db.rs | |||
@@ -42,7 +42,10 @@ pub trait DefDatabase: SourceDatabase { | |||
42 | #[salsa::invoke(crate::ids::macro_def_query)] | 42 | #[salsa::invoke(crate::ids::macro_def_query)] |
43 | fn macro_def(&self, macro_id: MacroDefId) -> Option<Arc<mbe::MacroRules>>; | 43 | fn macro_def(&self, macro_id: MacroDefId) -> Option<Arc<mbe::MacroRules>>; |
44 | 44 | ||
45 | #[salsa::invoke(HirFileId::hir_parse_query)] | 45 | #[salsa::invoke(crate::ids::macro_arg_query)] |
46 | fn macro_arg(&self, macro_call: ids::MacroCallId) -> Option<Arc<tt::Subtree>>; | ||
47 | |||
48 | #[salsa::invoke(crate::ids::HirFileId::hir_parse_query)] | ||
46 | fn hir_parse(&self, file_id: HirFileId) -> TreeArc<SourceFile>; | 49 | fn hir_parse(&self, file_id: HirFileId) -> TreeArc<SourceFile>; |
47 | 50 | ||
48 | #[salsa::invoke(crate::adt::StructData::struct_data_query)] | 51 | #[salsa::invoke(crate::adt::StructData::struct_data_query)] |