1
1
import std:: io;
2
2
import std:: io:: writer_util;
3
- import rustc:: syntax:: ast;
4
- import rustc:: syntax:: print:: pprust;
5
3
6
4
export write_markdown;
7
5
8
6
type ctxt = {
9
- ps : pprust:: ps ,
10
7
w : io:: writer
11
8
} ;
12
9
13
10
fn write_markdown (
14
11
doc : doc:: cratedoc ,
15
- crate : @ast:: crate ,
16
12
writer : io:: writer
17
13
) {
18
14
let ctxt = {
19
- ps: pprust:: rust_printer ( writer) ,
20
15
w: writer
21
16
} ;
22
17
23
18
write_header ( ctxt, doc. topmod . name ) ;
24
- write_top_module ( ctxt, crate , doc. topmod ) ;
19
+ write_top_module ( ctxt, doc. topmod ) ;
25
20
}
26
21
27
22
fn write_top_module (
28
23
ctxt : ctxt ,
29
- crate : @ast:: crate ,
30
24
moddoc : doc:: moddoc
31
25
) {
32
- write_mod_contents ( ctxt, crate , moddoc) ;
26
+ write_mod_contents ( ctxt, moddoc) ;
33
27
}
34
28
35
29
fn write_mod (
36
30
ctxt : ctxt ,
37
- crate : @ast:: crate ,
38
31
moddoc : doc:: moddoc
39
32
) {
40
- write_mod_contents ( ctxt, crate , moddoc) ;
33
+ write_mod_contents ( ctxt, moddoc) ;
41
34
}
42
35
43
36
fn write_mod_contents (
44
37
ctxt : ctxt ,
45
- crate : @ast:: crate ,
46
38
moddoc : doc:: moddoc
47
39
) {
48
40
for fndoc in * moddoc. fns {
49
- write_fn ( ctxt, crate , fndoc) ;
41
+ write_fn ( ctxt, fndoc) ;
50
42
}
51
43
52
44
for moddoc in * moddoc. mods {
53
- write_mod ( ctxt, crate , moddoc) ;
45
+ write_mod ( ctxt, moddoc) ;
54
46
}
55
47
}
56
48
57
49
fn write_fn (
58
50
ctxt : ctxt ,
59
- crate : @ast:: crate ,
60
51
fndoc : doc:: fndoc
61
52
) {
62
- import rustc:: middle:: ast_map;
63
-
64
- let map = ast_map:: map_crate ( * crate ) ;
65
- let decl = alt map. get ( fndoc. id ) {
66
- ast_map:: node_item ( @{
67
- node: ast:: item_fn ( decl, _, _) , _
68
- } ) { decl }
69
- } ;
70
-
71
- write_fndoc ( ctxt, fndoc. name , fndoc, decl) ;
53
+ write_fndoc ( ctxt, fndoc. name , fndoc) ;
72
54
}
73
55
74
56
#[ doc(
@@ -87,7 +69,7 @@ fn write_header(ctxt: ctxt, name: str) {
87
69
doc = "Function docs extracted from attributes" ,
88
70
_fn = "AST object representing this function" )
89
71
) ]
90
- fn write_fndoc ( ctxt : ctxt , ident : str , doc : doc:: fndoc , decl : ast :: fn_decl ) {
72
+ fn write_fndoc ( ctxt : ctxt , ident : str , doc : doc:: fndoc ) {
91
73
ctxt. w . write_line ( "## Function `" + ident + "`" ) ;
92
74
ctxt. w . write_line ( doc. brief ) ;
93
75
alt doc. desc {
@@ -102,22 +84,33 @@ fn write_fndoc(ctxt: ctxt, ident: str, doc: doc::fndoc, decl: ast::fn_decl) {
102
84
ctxt. w . write_str ( "### Argument `" + arg + "`: " ) ;
103
85
ctxt. w . write_str ( desc)
104
86
}
105
- ctxt. w . write_line ( "### Returns `" + pprust:: ty_to_str ( decl. output ) + "`" ) ;
106
87
alt doc. return {
107
- some ( { desc: some ( d) , _} ) { ctxt. w . write_line ( d) ; }
108
- _ { }
88
+ some ( doc) {
89
+ alt doc. ty {
90
+ some ( ty) {
91
+ ctxt. w . write_line ( "### Returns `" + ty + "`" ) ;
92
+ alt doc. desc {
93
+ some ( d) {
94
+ ctxt. w . write_line ( d) ;
95
+ }
96
+ none. { }
97
+ }
98
+ }
99
+ none. { fail "unimplemented" ; }
100
+ }
101
+ }
102
+ none. { }
109
103
}
110
104
}
111
105
112
106
#[ cfg( test) ]
113
107
mod tests {
114
108
fn write_markdown_str (
115
- doc : doc:: cratedoc ,
116
- crate : @ast:: crate
109
+ doc : doc:: cratedoc
117
110
) -> str {
118
111
let buffer = io:: mk_mem_buffer ( ) ;
119
112
let writer = io:: mem_buffer_writer ( buffer) ;
120
- write_markdown ( doc, crate , writer) ;
113
+ write_markdown ( doc, writer) ;
121
114
ret io:: mem_buffer_str ( buffer) ;
122
115
}
123
116
@@ -126,7 +119,7 @@ mod tests {
126
119
let source = "" ;
127
120
let ast = parse:: from_str ( source) ;
128
121
let doc = extract:: extract ( ast, "belch" ) ;
129
- let markdown = write_markdown_str ( doc, ast ) ;
122
+ let markdown = write_markdown_str ( doc) ;
130
123
assert str:: contains ( markdown, "# Crate belch\n " ) ;
131
124
}
132
125
@@ -135,7 +128,7 @@ mod tests {
135
128
let source = "fn func() { }" ;
136
129
let ast = parse:: from_str ( source) ;
137
130
let doc = extract:: extract ( ast, "" ) ;
138
- let markdown = write_markdown_str ( doc, ast ) ;
131
+ let markdown = write_markdown_str ( doc) ;
139
132
assert str:: contains ( markdown, "## Function `func`" ) ;
140
133
}
141
134
}
0 commit comments