Remove doctree::Macro

This commit is contained in:
Rune Tynan 2020-11-26 18:36:59 -05:00
parent fd6b5376b7
commit ccb9cc1200
No known key found for this signature in database
GPG Key ID: 7ECC932F8B2C731E
3 changed files with 17 additions and 36 deletions

View File

@ -2313,21 +2313,28 @@ impl Clean<Item> for (&hir::ForeignItem<'_>, Option<Ident>) {
}
}
impl Clean<Item> for doctree::Macro {
impl Clean<Item> for (&hir::MacroDef<'_>, Option<Ident>) {
fn clean(&self, cx: &DocContext<'_>) -> Item {
let (item, renamed) = self;
let name = renamed.unwrap_or(item.ident).name;
let tts = item.ast.body.inner_tokens().trees().collect::<Vec<_>>();
// Extract the spans of all matchers. They represent the "interface" of the macro.
let matchers = tts.chunks(4).map(|arm| arm[0].span()).collect::<Vec<_>>();
Item::from_def_id_and_parts(
self.def_id,
Some(self.name.clean(cx)),
cx.tcx.hir().local_def_id(item.hir_id).to_def_id(),
Some(name.clean(cx)),
MacroItem(Macro {
// FIXME(#76761): Make this respect `macro_rules!` vs `pub macro`
source: format!(
"macro_rules! {} {{\n{}}}",
self.name,
self.matchers
name,
matchers
.iter()
.map(|span| { format!(" {} => {{ ... }};\n", span.to_src(cx)) })
.collect::<String>()
.collect::<String>(),
),
imported_from: self.imported_from.clean(cx),
imported_from: None,
}),
cx,
)

View File

@ -18,7 +18,7 @@ crate struct Module<'hir> {
// (item, renamed)
crate items: Vec<(&'hir hir::Item<'hir>, Option<Ident>)>,
crate foreigns: Vec<(&'hir hir::ForeignItem<'hir>, Option<Ident>)>,
crate macros: Vec<Macro>,
crate macros: Vec<(&'hir hir::MacroDef<'hir>, Option<Ident>)>,
crate is_crate: bool,
}
@ -56,15 +56,6 @@ crate struct Variant<'hir> {
crate def: &'hir hir::VariantData<'hir>,
}
// For Macro we store the DefId instead of the NodeId, since we also create
// these imported macro_rules (which only have a DUMMY_NODE_ID).
crate struct Macro {
crate name: Symbol,
crate def_id: hir::def_id::DefId,
crate matchers: Vec<Span>,
crate imported_from: Option<Symbol>,
}
#[derive(Debug)]
crate struct Import<'hir> {
crate name: Symbol,

View File

@ -71,9 +71,7 @@ impl<'a, 'tcx> RustdocVisitor<'a, 'tcx> {
None,
);
// Attach the crate's exported macros to the top-level module:
module
.macros
.extend(krate.exported_macros.iter().map(|def| self.visit_local_macro(def, None)));
module.macros.extend(krate.exported_macros.iter().map(|def| (def, None)));
module.is_crate = true;
self.cx.renderinfo.get_mut().exact_paths = self.exact_paths;
@ -216,7 +214,7 @@ impl<'a, 'tcx> RustdocVisitor<'a, 'tcx> {
true
}
Node::MacroDef(def) if !glob => {
om.macros.push(self.visit_local_macro(def, renamed.map(|i| i.name)));
om.macros.push((def, renamed));
true
}
_ => false,
@ -339,19 +337,4 @@ impl<'a, 'tcx> RustdocVisitor<'a, 'tcx> {
om.foreigns.push((item, renamed));
}
}
// Convert each `exported_macro` into a doc item.
fn visit_local_macro(&self, def: &'tcx hir::MacroDef<'_>, renamed: Option<Symbol>) -> Macro {
debug!("visit_local_macro: {}", def.ident);
let tts = def.ast.body.inner_tokens().trees().collect::<Vec<_>>();
// Extract the spans of all matchers. They represent the "interface" of the macro.
let matchers = tts.chunks(4).map(|arm| arm[0].span()).collect();
Macro {
def_id: self.cx.tcx.hir().local_def_id(def.hir_id).to_def_id(),
name: renamed.unwrap_or(def.ident.name),
matchers,
imported_from: None,
}
}
}