From 2a442f9f8f9115a56b6a4c641c30848fc921b087 Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Thu, 19 Jan 2012 18:09:19 -0800 Subject: [PATCH] rustdoc: Add function signatures to the doc tree --- src/rustdoc/attr_pass.rs | 2 +- src/rustdoc/doc.rs | 2 +- src/rustdoc/extract.rs | 2 +- src/rustdoc/tystr_pass.rs | 30 +++++++++++++++++++++++++++--- 4 files changed, 30 insertions(+), 6 deletions(-) diff --git a/src/rustdoc/attr_pass.rs b/src/rustdoc/attr_pass.rs index 89c8f304e1a..3969bdd4032 100644 --- a/src/rustdoc/attr_pass.rs +++ b/src/rustdoc/attr_pass.rs @@ -135,7 +135,7 @@ fn fold_fn( desc: attrs.desc, args: merge_arg_attrs(doc.args, attrs.args), return: merge_ret_attrs(doc.return, attrs.return), - ty: none + sig: none }; } diff --git a/src/rustdoc/doc.rs b/src/rustdoc/doc.rs index ddc77f1ab85..4a3101bc716 100644 --- a/src/rustdoc/doc.rs +++ b/src/rustdoc/doc.rs @@ -23,7 +23,7 @@ type fndoc = ~{ desc: option, args: [argdoc], return: option, - ty: option + sig: option }; type argdoc = ~{ diff --git a/src/rustdoc/extract.rs b/src/rustdoc/extract.rs index eba2ba8d63f..ce6d7bdcbb4 100644 --- a/src/rustdoc/extract.rs +++ b/src/rustdoc/extract.rs @@ -81,7 +81,7 @@ fn fndoc_from_fn( desc: none, args: argdocs_from_args(decl.inputs), return: none, - ty: none + sig: none } } diff --git a/src/rustdoc/tystr_pass.rs b/src/rustdoc/tystr_pass.rs index fe3f0aafb10..29b55602cb6 100644 --- a/src/rustdoc/tystr_pass.rs +++ b/src/rustdoc/tystr_pass.rs @@ -30,12 +30,36 @@ fn fold_fn( let srv = fold.ctxt; ~{ + args: merge_arg_tys(srv, doc.id, doc.args), return: merge_ret_ty(srv, doc.id, doc.return), - args: merge_arg_tys(srv, doc.id, doc.args) + sig: get_fn_sig(srv, doc.id) with *doc } } +fn get_fn_sig(srv: astsrv::srv, fn_id: doc::ast_id) -> option { + astsrv::exec(srv) {|ctxt| + alt ctxt.map.get(fn_id) { + ast_map::node_item(@{ + ident: ident, + node: ast::item_fn(decl, _, blk), _ + }) { + some(pprust::fun_to_str(decl, ident, [])) + } + } + } +} + +#[test] +fn should_add_fn_sig() { + let source = "fn a() -> int { }"; + let srv = astsrv::mk_srv_from_str(source); + let doc = extract::from_srv(srv, ""); + let doc = run(srv, doc); + log(error, doc.topmod.fns[0].sig); + assert doc.topmod.fns[0].sig == some("fn a() -> int"); +} + fn merge_ret_ty( srv: astsrv::srv, fn_id: doc::ast_id, @@ -59,9 +83,9 @@ fn merge_ret_ty( } } -fn get_ret_ty(srv: astsrv::srv, id: doc::ast_id) -> option { +fn get_ret_ty(srv: astsrv::srv, fn_id: doc::ast_id) -> option { astsrv::exec(srv) {|ctxt| - alt ctxt.map.get(id) { + alt ctxt.map.get(fn_id) { ast_map::node_item(@{ node: ast::item_fn(decl, _, _), _ }) {