@@ -5,7 +5,7 @@ type ctxt = {
5
5
6
6
fn write_markdown (
7
7
doc : doc:: cratedoc ,
8
- _crate : @ast:: crate ,
8
+ crate : @ast:: crate ,
9
9
writer : io:: writer
10
10
) {
11
11
let ctxt = {
@@ -14,6 +14,54 @@ fn write_markdown(
14
14
} ;
15
15
16
16
write_header ( ctxt, doc. topmod . name ) ;
17
+ write_top_module ( ctxt, crate , doc. topmod ) ;
18
+ }
19
+
20
+ fn write_top_module (
21
+ ctxt : ctxt ,
22
+ crate : @ast:: crate ,
23
+ moddoc : doc:: moddoc
24
+ ) {
25
+ write_mod_contents ( ctxt, crate , moddoc) ;
26
+ }
27
+
28
+ fn write_mod (
29
+ ctxt : ctxt ,
30
+ crate : @ast:: crate ,
31
+ moddoc : doc:: moddoc
32
+ ) {
33
+ write_mod_contents ( ctxt, crate , moddoc) ;
34
+ }
35
+
36
+ fn write_mod_contents (
37
+ ctxt : ctxt ,
38
+ crate : @ast:: crate ,
39
+ moddoc : doc:: moddoc
40
+ ) {
41
+ for fndoc in * moddoc. fns {
42
+ write_fn ( ctxt, crate , fndoc) ;
43
+ }
44
+
45
+ for moddoc in * moddoc. mods {
46
+ write_mod ( ctxt, crate , moddoc) ;
47
+ }
48
+ }
49
+
50
+ fn write_fn (
51
+ ctxt : ctxt ,
52
+ crate : @ast:: crate ,
53
+ fndoc : doc:: fndoc
54
+ ) {
55
+ import rustc:: middle:: ast_map;
56
+
57
+ let map = ast_map:: map_crate ( * crate ) ;
58
+ let decl = alt map. get ( fndoc. id ) {
59
+ ast_map:: node_item ( @{
60
+ node: ast:: item_fn ( decl, _, _) , _
61
+ } ) { decl }
62
+ } ;
63
+
64
+ write_fndoc ( ctxt, fndoc. name , fndoc, decl) ;
17
65
}
18
66
19
67
#[ doc(
@@ -80,4 +128,13 @@ mod tests {
80
128
let markdown = write_markdown_str ( doc, ast) ;
81
129
assert str:: contains ( markdown, "# Crate belch\n " ) ;
82
130
}
131
+
132
+ #[ test]
133
+ fn write_markdown_should_write_function_header ( ) {
134
+ let source = "fn func() { }" ;
135
+ let ast = parse:: from_str ( source) ;
136
+ let doc = extract:: extract ( ast, "" ) ;
137
+ let markdown = write_markdown_str ( doc, ast) ;
138
+ assert str:: contains ( markdown, "## Function `func`" ) ;
139
+ }
83
140
}
0 commit comments