From 40cbc89b6fc8c1d0c61689b9b0507d534a576d9d Mon Sep 17 00:00:00 2001 From: Brian Anderson Date: Sat, 28 Jan 2012 14:36:35 -0800 Subject: [PATCH] rustdoc: Move resource docs into the item tag --- src/rustdoc/attr_pass.rs | 4 ++-- src/rustdoc/desc_pass.rs | 6 ++--- src/rustdoc/desc_to_brief_pass.rs | 4 ++-- src/rustdoc/doc.rs | 15 +++++++++--- src/rustdoc/extract.rs | 30 +++++++++++------------ src/rustdoc/fold.rs | 31 +++++++++--------------- src/rustdoc/markdown_pass.rs | 10 ++++---- src/rustdoc/prune_undoc_pass.rs | 40 +++++++++++++++---------------- src/rustdoc/rustdoc.rs | 8 +++---- src/rustdoc/tystr_pass.rs | 4 ++-- 10 files changed, 77 insertions(+), 75 deletions(-) diff --git a/src/rustdoc/attr_pass.rs b/src/rustdoc/attr_pass.rs index 9ee4f8ec78c..9b13c1e7fcd 100644 --- a/src/rustdoc/attr_pass.rs +++ b/src/rustdoc/attr_pass.rs @@ -344,7 +344,7 @@ fn fold_res_should_extract_docs() { let srv = astsrv::mk_srv_from_str(source); let doc = extract::from_srv(srv, ""); let fold = fold::default_seq_fold(srv); - let doc = fold_res(fold, doc.topmod.resources[0]); + let doc = fold_res(fold, doc.topmod.resources()[0]); assert doc.brief == some("a"); assert doc.desc == some("b"); } @@ -356,7 +356,7 @@ fn fold_res_should_extract_arg_docs() { let srv = astsrv::mk_srv_from_str(source); let doc = extract::from_srv(srv, ""); let fold = fold::default_seq_fold(srv); - let doc = fold_res(fold, doc.topmod.resources[0]); + let doc = fold_res(fold, doc.topmod.resources()[0]); assert doc.args[0].name == "a"; assert doc.args[0].desc == some("b"); } \ No newline at end of file diff --git a/src/rustdoc/desc_pass.rs b/src/rustdoc/desc_pass.rs index 7168a0b4d87..23c7eb92bf1 100644 --- a/src/rustdoc/desc_pass.rs +++ b/src/rustdoc/desc_pass.rs @@ -136,7 +136,7 @@ fn should_execute_op_on_resource_brief() { let doc = extract::from_srv(srv, ""); let doc = attr_pass::mk_pass()(srv, doc); let doc = mk_pass(str::trim)(srv, doc); - assert doc.topmod.resources[0].brief == some("a"); + assert doc.topmod.resources()[0].brief == some("a"); } #[test] @@ -146,7 +146,7 @@ fn should_execute_op_on_resource_desc() { let doc = extract::from_srv(srv, ""); let doc = attr_pass::mk_pass()(srv, doc); let doc = mk_pass(str::trim)(srv, doc); - assert doc.topmod.resources[0].desc == some("a"); + assert doc.topmod.resources()[0].desc == some("a"); } #[test] @@ -156,5 +156,5 @@ fn should_execute_op_on_resource_args() { let doc = extract::from_srv(srv, ""); let doc = attr_pass::mk_pass()(srv, doc); let doc = mk_pass(str::trim)(srv, doc); - assert doc.topmod.resources[0].args[0].desc == some("a"); + assert doc.topmod.resources()[0].args[0].desc == some("a"); } \ No newline at end of file diff --git a/src/rustdoc/desc_to_brief_pass.rs b/src/rustdoc/desc_to_brief_pass.rs index 3c2cc46dad1..82c1e8b27ce 100644 --- a/src/rustdoc/desc_to_brief_pass.rs +++ b/src/rustdoc/desc_to_brief_pass.rs @@ -134,8 +134,8 @@ fn should_promote_resource_desc() { let doc = extract::from_srv(srv, ""); let doc = attr_pass::mk_pass()(srv, doc); let doc = run(srv, doc); - assert doc.topmod.resources[0].brief == some("desc"); - assert doc.topmod.resources[0].desc == none; + assert doc.topmod.resources()[0].brief == some("desc"); + assert doc.topmod.resources()[0].desc == none; } fn modify( diff --git a/src/rustdoc/doc.rs b/src/rustdoc/doc.rs index 2620771348a..9e3698116f2 100644 --- a/src/rustdoc/doc.rs +++ b/src/rustdoc/doc.rs @@ -24,8 +24,7 @@ type moddoc = ~{ mods: modlist, fns: fnlist, consts: constlist, - enums: enumlist, - resources: reslist + enums: enumlist }; type constdoc = ~{ @@ -86,4 +85,14 @@ enum modlist = [moddoc]; enum constlist = [constdoc]; enum fnlist = [fndoc]; enum enumlist = [enumdoc]; -enum reslist = [resdoc]; + +impl util for moddoc { + fn resources() -> [resdoc] { + vec::filter_map(self.items) {|itemtag| + alt itemtag { + restag(resdoc) { some(resdoc) } + _ { none } + } + } + } +} \ No newline at end of file diff --git a/src/rustdoc/extract.rs b/src/rustdoc/extract.rs index 947faa42e6a..82e862da6c3 100644 --- a/src/rustdoc/extract.rs +++ b/src/rustdoc/extract.rs @@ -43,7 +43,18 @@ fn moddoc_from_mod( path: [], brief: none, desc: none, - items: [], + items: vec::filter_map(module.items) {|item| + alt item.node { + ast::item_res(decl, _, _, _, _) { + some(doc::restag( + resdoc_from_resource(decl, item.ident, item.id) + )) + } + _ { + none + } + } + }, mods: doc::modlist( vec::filter_map(module.items) {|item| alt item.node { @@ -88,17 +99,6 @@ fn moddoc_from_mod( none } } - }), - resources: doc::reslist( - vec::filter_map(module.items) {|item| - alt item.node { - ast::item_res(decl, _, _, _, _) { - some(resdoc_from_resource(decl, item.ident, item.id)) - } - _ { - none - } - } }) } } @@ -232,8 +232,8 @@ fn should_extract_resources() { let source = "resource r(b: bool) { }"; let ast = parse::from_str(source); let doc = extract(ast, ""); - assert doc.topmod.resources[0].id != 0; - assert doc.topmod.resources[0].name == "r"; + assert doc.topmod.resources()[0].id != 0; + assert doc.topmod.resources()[0].name == "r"; } #[test] @@ -241,7 +241,7 @@ fn should_extract_resource_args() { let source = "resource r(b: bool) { }"; let ast = parse::from_str(source); let doc = extract(ast, ""); - assert doc.topmod.resources[0].args[0].name == "b"; + assert doc.topmod.resources()[0].args[0].name == "b"; } #[cfg(test)] diff --git a/src/rustdoc/fold.rs b/src/rustdoc/fold.rs index 6f20870691e..1d2e992b800 100644 --- a/src/rustdoc/fold.rs +++ b/src/rustdoc/fold.rs @@ -26,8 +26,6 @@ type fold_constlist = fn~( fold: fold, list: doc::constlist) -> doc::constlist; type fold_enumlist = fn~( fold: fold, list: doc::enumlist) -> doc::enumlist; -type fold_reslist = fn~( - fold: fold, list: doc::reslist) -> doc::reslist; type t = { ctxt: T, @@ -41,7 +39,6 @@ type t = { fold_fnlist: fold_fnlist, fold_constlist: fold_constlist, fold_enumlist: fold_enumlist, - fold_reslist: fold_reslist }; @@ -58,8 +55,7 @@ fn mk_fold( fold_modlist: fold_modlist, fold_fnlist: fold_fnlist, fold_constlist: fold_constlist, - fold_enumlist: fold_enumlist, - fold_reslist: fold_reslist + fold_enumlist: fold_enumlist ) -> fold { fold({ ctxt: ctxt, @@ -72,8 +68,7 @@ fn mk_fold( fold_modlist: fold_modlist, fold_fnlist: fold_fnlist, fold_constlist: fold_constlist, - fold_enumlist: fold_enumlist, - fold_reslist: fold_reslist + fold_enumlist: fold_enumlist }) } @@ -89,8 +84,7 @@ fn default_seq_fold(ctxt: T) -> fold { {|f, d| default_seq_fold_modlist(f, d)}, {|f, d| default_seq_fold_fnlist(f, d)}, {|f, d| default_seq_fold_constlist(f, d)}, - {|f, d| default_seq_fold_enumlist(f, d)}, - {|f, d| default_seq_fold_reslist(f, d)} + {|f, d| default_seq_fold_enumlist(f, d)} ) } @@ -108,11 +102,17 @@ fn default_seq_fold_mod( doc: doc::moddoc ) -> doc::moddoc { ~{ + items: vec::map(doc.items) {|itemtag| + alt itemtag { + doc::restag(resdoc) { + doc::restag(fold.fold_res(fold, resdoc)) + } + } + }, mods: fold.fold_modlist(fold, doc.mods), fns: fold.fold_fnlist(fold, doc.fns), consts: fold.fold_constlist(fold, doc.consts), - enums: fold.fold_enumlist(fold, doc.enums), - resources: fold.fold_reslist(fold, doc.resources) + enums: fold.fold_enumlist(fold, doc.enums) with *doc } } @@ -181,15 +181,6 @@ fn default_seq_fold_enumlist( }) } -fn default_seq_fold_reslist( - fold: fold, - list: doc::reslist -) -> doc::reslist { - doc::reslist(vec::map(*list) {|doc| - fold.fold_res(fold, doc) - }) -} - #[test] fn default_fold_should_produce_same_doc() { let source = "mod a { fn b() { } mod c { fn d() { } } }"; diff --git a/src/rustdoc/markdown_pass.rs b/src/rustdoc/markdown_pass.rs index 4082d969b5e..2777a3ff196 100644 --- a/src/rustdoc/markdown_pass.rs +++ b/src/rustdoc/markdown_pass.rs @@ -93,13 +93,15 @@ fn write_mod_contents( write_fn(ctxt, fndoc); } - for resdoc in *doc.resources { - write_res(ctxt, resdoc); - } - for moddoc in *doc.mods { write_mod(ctxt, moddoc); } + + for itemtag in doc.items { + alt itemtag { + doc::restag(resdoc) { write_res(ctxt, resdoc) } + } + } } #[test] diff --git a/src/rustdoc/prune_undoc_pass.rs b/src/rustdoc/prune_undoc_pass.rs index 11be00eea85..a4141962986 100644 --- a/src/rustdoc/prune_undoc_pass.rs +++ b/src/rustdoc/prune_undoc_pass.rs @@ -26,8 +26,7 @@ fn run( fold_modlist: fold_modlist, fold_fnlist: fold_fnlist, fold_constlist: fold_constlist, - fold_enumlist: fold_enumlist, - fold_reslist: fold_reslist + fold_enumlist: fold_enumlist with *fold::default_seq_fold(ctxt) }); fold.fold_crate(fold, doc) @@ -37,7 +36,22 @@ fn fold_mod( fold: fold::fold, doc: doc::moddoc ) -> doc::moddoc { - let doc = fold::default_seq_fold_mod(fold, doc); + let doc = ~{ + items: vec::filter_map(doc.items) {|itemtag| + alt itemtag { + doc::restag(resdoc) { + let doc = fold.fold_res(fold, resdoc); + if fold.ctxt.have_docs { + some(doc::restag(doc)) + } else { + none + } + } + _ { some(itemtag) } + } + } + with *fold::default_seq_fold_mod(fold, doc) + }; fold.ctxt.have_docs = doc.brief != none || doc.desc != none @@ -301,27 +315,13 @@ fn fold_res(fold: fold::fold, doc: doc::resdoc) -> doc::resdoc { ret doc; } -fn fold_reslist( - fold: fold::fold, - list: doc::reslist -) -> doc::reslist { - doc::reslist(vec::filter_map(*list) {|doc| - let doc = fold.fold_res(fold, doc); - if fold.ctxt.have_docs { - some(doc) - } else { - none - } - }) -} - #[test] fn should_elide_undocumented_resources() { let source = "resource r(a: bool) { }"; let srv = astsrv::mk_srv_from_str(source); let doc = extract::from_srv(srv, ""); let doc = run(srv, doc); - assert vec::is_empty(*doc.topmod.resources); + assert vec::is_empty(doc.topmod.resources()); } #[test] @@ -332,7 +332,7 @@ fn should_elide_undocumented_resource_args() { let doc = extract::from_srv(srv, ""); let doc = attr_pass::mk_pass()(srv, doc); let doc = run(srv, doc); - assert vec::is_empty(doc.topmod.resources[0].args); + assert vec::is_empty(doc.topmod.resources()[0].args); } #[test] @@ -343,5 +343,5 @@ fn should_not_elide_resources_with_documented_args() { let doc = extract::from_srv(srv, ""); let doc = attr_pass::mk_pass()(srv, doc); let doc = run(srv, doc); - assert vec::is_not_empty(*doc.topmod.resources); + assert vec::is_not_empty(doc.topmod.resources()); } diff --git a/src/rustdoc/rustdoc.rs b/src/rustdoc/rustdoc.rs index 55cd74c3a7a..1c258858e83 100755 --- a/src/rustdoc/rustdoc.rs +++ b/src/rustdoc/rustdoc.rs @@ -2,6 +2,8 @@ * Copyright 2011 Google Inc. */ +import doc::util; + #[doc = "A single operation on the document model"] type pass = fn~(srv: astsrv::srv, doc: doc::cratedoc) -> doc::cratedoc; @@ -53,8 +55,7 @@ fn test_run_passes() { mods: doc::modlist([]), fns: doc::fnlist([]), consts: doc::constlist([]), - enums: doc::enumlist([]), - resources: doc::reslist([]) + enums: doc::enumlist([]) } } } @@ -73,8 +74,7 @@ fn test_run_passes() { mods: doc::modlist([]), fns: doc::fnlist([]), consts: doc::constlist([]), - enums: doc::enumlist([]), - resources: doc::reslist([]) + enums: doc::enumlist([]) } } } diff --git a/src/rustdoc/tystr_pass.rs b/src/rustdoc/tystr_pass.rs index 12a1e68b42b..e223944b9fb 100644 --- a/src/rustdoc/tystr_pass.rs +++ b/src/rustdoc/tystr_pass.rs @@ -254,7 +254,7 @@ fn should_add_resource_sigs() { let srv = astsrv::mk_srv_from_str(source); let doc = extract::from_srv(srv, ""); let doc = run(srv, doc); - assert doc.topmod.resources[0].sig == some("resource r(b: bool)"); + assert doc.topmod.resources()[0].sig == some("resource r(b: bool)"); } #[test] @@ -263,5 +263,5 @@ fn should_add_resource_arg_tys() { let srv = astsrv::mk_srv_from_str(source); let doc = extract::from_srv(srv, ""); let doc = run(srv, doc); - assert doc.topmod.resources[0].args[0].ty == some("bool"); + assert doc.topmod.resources()[0].args[0].ty == some("bool"); } \ No newline at end of file