From 3c75b1e38233bb5aeced0a54dab986369641550a Mon Sep 17 00:00:00 2001 From: Corey Richardson Date: Fri, 11 Jul 2014 11:59:18 -0700 Subject: [PATCH] rustdoc: support tuple and struct patterns in function arguments --- src/librustdoc/clean/mod.rs | 13 ++++++++++--- src/test/run-make/rustdoc-smoke/foo.rs | 4 ++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/librustdoc/clean/mod.rs b/src/librustdoc/clean/mod.rs index af0b6a1cb21d1..d6cfdb5fcc652 100644 --- a/src/librustdoc/clean/mod.rs +++ b/src/librustdoc/clean/mod.rs @@ -1948,9 +1948,16 @@ fn name_from_pat(p: &ast::Pat) -> String { PatWildMulti => "..".to_string(), PatIdent(_, ref p, _) => token::get_ident(p.node).get().to_string(), PatEnum(ref p, _) => path_to_string(p), - PatStruct(..) => fail!("tried to get argument name from pat_struct, \ - which is not allowed in function arguments"), - PatTup(..) => "(tuple arg NYI)".to_string(), + PatStruct(ref name, ref fields, etc) => { + format!("{} {{ {}{} }}", path_to_string(name), + fields.iter().map(|fp| + format!("{}: {}", fp.ident.as_str(), name_from_pat(&*fp.pat))) + .collect::>().connect(", "), + if etc { ", ..." } else { "" } + ) + }, + PatTup(ref elts) => format!("({})", elts.iter().map(|p| name_from_pat(&**p)) + .collect::>().connect(", ")), PatBox(p) => name_from_pat(&*p), PatRegion(p) => name_from_pat(&*p), PatLit(..) => { diff --git a/src/test/run-make/rustdoc-smoke/foo.rs b/src/test/run-make/rustdoc-smoke/foo.rs index dda66f051bc8e..b783dd39a061a 100644 --- a/src/test/run-make/rustdoc-smoke/foo.rs +++ b/src/test/run-make/rustdoc-smoke/foo.rs @@ -22,4 +22,8 @@ pub mod bar { /// *wow* pub trait Doge { } + + pub struct Foo { x: int, y: uint } + + pub fn prawns((a, b): (int, uint), Foo { x, y }: Foo) { } }