aboutsummaryrefslogtreecommitdiff
path: root/crates/hir
diff options
context:
space:
mode:
Diffstat (limited to 'crates/hir')
-rw-r--r--crates/hir/src/semantics.rs16
1 files changed, 16 insertions, 0 deletions
diff --git a/crates/hir/src/semantics.rs b/crates/hir/src/semantics.rs
index 0d55e4a3e..920e18208 100644
--- a/crates/hir/src/semantics.rs
+++ b/crates/hir/src/semantics.rs
@@ -117,6 +117,12 @@ impl<'db, DB: HirDatabase> Semantics<'db, DB> {
117 pub fn expand(&self, macro_call: &ast::MacroCall) -> Option<SyntaxNode> { 117 pub fn expand(&self, macro_call: &ast::MacroCall) -> Option<SyntaxNode> {
118 self.imp.expand(macro_call) 118 self.imp.expand(macro_call)
119 } 119 }
120
121 /// If `item` has an attribute macro attached to it, expands it.
122 pub fn expand_attr_macro(&self, item: &ast::Item) -> Option<SyntaxNode> {
123 self.imp.expand_attr_macro(item)
124 }
125
120 pub fn speculative_expand( 126 pub fn speculative_expand(
121 &self, 127 &self,
122 actual_macro_call: &ast::MacroCall, 128 actual_macro_call: &ast::MacroCall,
@@ -332,6 +338,16 @@ impl<'db> SemanticsImpl<'db> {
332 Some(node) 338 Some(node)
333 } 339 }
334 340
341 fn expand_attr_macro(&self, item: &ast::Item) -> Option<SyntaxNode> {
342 let sa = self.analyze(item.syntax());
343 let src = InFile::new(sa.file_id, item.clone());
344 let macro_call_id = self.with_ctx(|ctx| ctx.item_to_macro_call(src))?;
345 let file_id = macro_call_id.as_file();
346 let node = self.db.parse_or_expand(file_id)?;
347 self.cache(node.clone(), file_id);
348 Some(node)
349 }
350
335 fn speculative_expand( 351 fn speculative_expand(
336 &self, 352 &self,
337 actual_macro_call: &ast::MacroCall, 353 actual_macro_call: &ast::MacroCall,