rustdoc: Ignore nil-typed return values

This commit is contained in:
Brian Anderson
2012-01-18 21:50:35 -08:00
parent a02a943cec
commit e9ddfbe3fd
2 changed files with 46 additions and 21 deletions

View File

@@ -204,6 +204,27 @@ fn write_return(
}
}
#[test]
fn should_write_return_type_on_new_line() {
let markdown = test::render("fn a() -> int { }");
assert str::contains(markdown, "\nReturns `int`");
}
#[test]
fn should_write_blank_line_between_return_type_and_next_header() {
let markdown = test::render(
"fn a() -> int { } \
fn b() -> int { }"
);
assert str::contains(markdown, "Returns `int`\n\n##");
}
#[test]
fn should_not_write_return_type_when_there_is_none() {
let markdown = test::render("fn a() { }");
assert !str::contains(markdown, "Returns");
}
#[cfg(test)]
mod test {
fn render(source: str) -> str {
@@ -272,18 +293,4 @@ mod test {
assert str::contains(markdown, "brief\n\ndesc");
}
#[test]
fn should_write_return_type_on_new_line() {
let markdown = render("fn a() -> int { }");
assert str::contains(markdown, "\nReturns `int`");
}
#[test]
fn should_write_blank_line_between_return_type_and_next_header() {
let markdown = render(
"fn a() -> int { } \
fn b() -> int { }"
);
assert str::contains(markdown, "Returns `int`\n\n##");
}
}

View File

@@ -46,27 +46,36 @@ fn merge_ret_ty(
fn_id: doc::ast_id,
doc: option<doc::retdoc>
) -> option<doc::retdoc> {
let ty = get_ret_ty(srv, fn_id);
alt doc {
some(doc) {
fail "unimplemented";
}
none. {
some({
desc: none,
ty: some(ty)
})
alt get_ret_ty(srv, fn_id) {
some(ty) {
some({
desc: none,
ty: some(ty)
})
}
none. { none }
}
}
}
}
fn get_ret_ty(srv: astsrv::srv, id: doc::ast_id) -> str {
fn get_ret_ty(srv: astsrv::srv, id: doc::ast_id) -> option<str> {
astsrv::exec(srv) {|ctxt|
alt ctxt.map.get(id) {
ast_map::node_item(@{
node: ast::item_fn(decl, _, _), _
}) {
pprust::ty_to_str(decl.output)
if decl.output.node != ast::ty_nil {
some(pprust::ty_to_str(decl.output))
} else {
// Nil-typed return values are not interesting
none
}
}
}
}
@@ -81,6 +90,15 @@ fn should_add_fn_ret_types() {
assert option::get(doc.topmod.fns[0].return).ty == some("int");
}
#[test]
fn should_not_add_nil_ret_type() {
let source = "fn a() { }";
let srv = astsrv::mk_srv_from_str(source);
let doc = extract::from_srv(srv, "");
let doc = run(srv, doc);
assert doc.topmod.fns[0].return == none;
}
fn merge_arg_tys(
srv: astsrv::srv,
fn_id: doc::ast_id,