diff options
| author | Jonas Schievink <jonas@schievink.net> | 2015-11-26 19:14:36 +0100 |
|---|---|---|
| committer | Jonas Schievink <jonas@schievink.net> | 2015-11-26 19:14:36 +0100 |
| commit | ce97479a159c4185b48269c321b72bde03592ea5 (patch) | |
| tree | 27ce6d6e826b20bb13f3b972549f8cf5beaef78c | |
| parent | 1b9a13e6ba83a5619b628c1534b1c6d566157f62 (diff) | |
rustdoc: only show macro arm's lhs
| -rw-r--r-- | src/librustdoc/clean/mod.rs | 7 | ||||
| -rw-r--r-- | src/librustdoc/doctree.rs | 1 | ||||
| -rw-r--r-- | src/librustdoc/visit_ast.rs | 4 |
3 files changed, 10 insertions, 2 deletions
diff --git a/src/librustdoc/clean/mod.rs b/src/librustdoc/clean/mod.rs index c88b2dcdb74..2bab5679187 100644 --- a/src/librustdoc/clean/mod.rs +++ b/src/librustdoc/clean/mod.rs @@ -2665,15 +2665,18 @@ pub struct Macro { impl Clean<Item> for doctree::Macro { fn clean(&self, cx: &DocContext) -> Item { + let name = format!("{}!", self.name.clean(cx)); Item { - name: Some(format!("{}!", self.name.clean(cx))), + name: Some(name.clone()), attrs: self.attrs.clean(cx), source: self.whence.clean(cx), visibility: hir::Public.clean(cx), stability: self.stab.clean(cx), def_id: cx.map.local_def_id(self.id), inner: MacroItem(Macro { - source: self.whence.to_src(cx), + source: format!("macro_rules! {} {{\n{}}}", + name.trim_right_matches('!'), self.matchers.iter().map(|span| + format!(" {} => {{ ... }}\n", span.to_src(cx))).collect::<String>()), imported_from: self.imported_from.clean(cx), }), } diff --git a/src/librustdoc/doctree.rs b/src/librustdoc/doctree.rs index 9550109fe9f..91da906f56d 100644 --- a/src/librustdoc/doctree.rs +++ b/src/librustdoc/doctree.rs @@ -213,6 +213,7 @@ pub struct Macro { pub id: ast::NodeId, pub attrs: Vec<ast::Attribute>, pub whence: Span, + pub matchers: Vec<Span>, pub stab: Option<attr::Stability>, pub imported_from: Option<Name>, } diff --git a/src/librustdoc/visit_ast.rs b/src/librustdoc/visit_ast.rs index 150464404a2..17291233e11 100644 --- a/src/librustdoc/visit_ast.rs +++ b/src/librustdoc/visit_ast.rs @@ -400,11 +400,15 @@ impl<'a, 'tcx> RustdocVisitor<'a, 'tcx> { // convert each exported_macro into a doc item fn visit_macro(&self, def: &hir::MacroDef) -> Macro { + // Extract the spans of all matchers. They represent the "interface" of the macro. + let matchers = def.body.chunks(4).map(|arm| arm[0].get_span()).collect(); + Macro { id: def.id, attrs: def.attrs.clone(), name: def.name, whence: def.span, + matchers: matchers, stab: self.stability(def.id), imported_from: def.imported_from, } |
