Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/hir-def/src/nameres/proc_macro.rs')
-rw-r--r--crates/hir-def/src/nameres/proc_macro.rs24
1 files changed, 9 insertions, 15 deletions
diff --git a/crates/hir-def/src/nameres/proc_macro.rs b/crates/hir-def/src/nameres/proc_macro.rs
index cd8882183b..cd45afe57d 100644
--- a/crates/hir-def/src/nameres/proc_macro.rs
+++ b/crates/hir-def/src/nameres/proc_macro.rs
@@ -3,8 +3,10 @@
use hir_expand::name::{AsName, Name};
use intern::sym;
-use crate::attr::Attrs;
-use crate::tt::{Leaf, TokenTree, TopSubtree, TtElement};
+use crate::{
+ item_tree::Attrs,
+ tt::{Leaf, TokenTree, TopSubtree, TtElement},
+};
#[derive(Debug, PartialEq, Eq)]
pub struct ProcMacroDef {
@@ -29,8 +31,8 @@ impl ProcMacroKind {
}
}
-impl Attrs {
- pub fn parse_proc_macro_decl(&self, func_name: &Name) -> Option<ProcMacroDef> {
+impl Attrs<'_> {
+ pub(crate) fn parse_proc_macro_decl(&self, func_name: &Name) -> Option<ProcMacroDef> {
if self.is_proc_macro() {
Some(ProcMacroDef { name: func_name.clone(), kind: ProcMacroKind::Bang })
} else if self.is_proc_macro_attribute() {
@@ -51,15 +53,10 @@ impl Attrs {
}
}
- pub fn parse_proc_macro_derive(&self) -> Option<(Name, Box<[Name]>)> {
+ pub(crate) fn parse_proc_macro_derive(&self) -> Option<(Name, Box<[Name]>)> {
let derive = self.by_key(sym::proc_macro_derive).tt_values().next()?;
parse_macro_name_and_helper_attrs(derive)
}
-
- pub fn parse_rustc_builtin_macro(&self) -> Option<(Name, Box<[Name]>)> {
- let derive = self.by_key(sym::rustc_builtin_macro).tt_values().next()?;
- parse_macro_name_and_helper_attrs(derive)
- }
}
// This fn is intended for `#[proc_macro_derive(..)]` and `#[rustc_builtin_macro(..)]`, which have
@@ -84,14 +81,11 @@ pub(crate) fn parse_macro_name_and_helper_attrs(tt: &TopSubtree) -> Option<(Name
let helpers = tt::TokenTreesView::new(&tt.token_trees().flat_tokens()[3..]).try_into_subtree()?;
let helpers = helpers
.iter()
- .filter(
- |tt| !matches!(tt, TtElement::Leaf(Leaf::Punct(comma)) if comma.char == ','),
- )
- .map(|tt| match tt {
+ .filter_map(|tt| match tt {
TtElement::Leaf(Leaf::Ident(helper)) => Some(helper.as_name()),
_ => None,
})
- .collect::<Option<Box<[_]>>>()?;
+ .collect::<Box<[_]>>();
Some((trait_name.as_name(), helpers))
}