Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-expand/src/lib.rs')
-rw-r--r--crates/hir-expand/src/lib.rs16
1 files changed, 14 insertions, 2 deletions
diff --git a/crates/hir-expand/src/lib.rs b/crates/hir-expand/src/lib.rs
index 4ab989bec2..83e92565f4 100644
--- a/crates/hir-expand/src/lib.rs
+++ b/crates/hir-expand/src/lib.rs
@@ -33,8 +33,8 @@ use std::{fmt, hash::Hash};
use base_db::{salsa::impl_intern_value_trivial, CrateId, FileId};
use either::Either;
use span::{
- Edition, ErasedFileAstId, FileRange, HirFileIdRepr, Span, SpanAnchor, SyntaxContextData,
- SyntaxContextId,
+ Edition, ErasedFileAstId, FileAstId, FileRange, HirFileIdRepr, Span, SpanAnchor,
+ SyntaxContextData, SyntaxContextId,
};
use syntax::{
ast::{self, AstNode},
@@ -546,6 +546,18 @@ impl MacroCallLoc {
}
}
+ pub fn to_node_item(&self, db: &dyn ExpandDatabase) -> InFile<ast::Item> {
+ match self.kind {
+ MacroCallKind::FnLike { ast_id, .. } => {
+ InFile::new(ast_id.file_id, ast_id.map(FileAstId::upcast).to_node(db))
+ }
+ MacroCallKind::Derive { ast_id, .. } => {
+ InFile::new(ast_id.file_id, ast_id.map(FileAstId::upcast).to_node(db))
+ }
+ MacroCallKind::Attr { ast_id, .. } => InFile::new(ast_id.file_id, ast_id.to_node(db)),
+ }
+ }
+
fn expand_to(&self) -> ExpandTo {
match self.kind {
MacroCallKind::FnLike { expand_to, .. } => expand_to,