1
- //! Some utility interfaces
2
-
3
1
use doc:: ItemUtils ;
4
2
use doc:: Item ;
5
- use doc:: util;
6
-
7
- /// A single operation on the document model
8
- type Pass = {
9
- name : ~str ,
10
- f : fn ~( srv : astsrv:: Srv , doc : doc:: Doc ) -> doc:: Doc
11
- } ;
12
-
13
- fn run_passes (
14
- srv : astsrv:: Srv ,
15
- doc : doc:: Doc ,
16
- passes : ~[ Pass ]
17
- ) -> doc:: Doc {
18
- let mut passno = 0 ;
19
- do vec:: foldl ( doc, passes) |doc, pass| {
20
- log ( debug, fmt ! ( "pass #%d" , passno) ) ;
21
- passno += 1 ;
22
- log ( debug, doc) ;
23
- do time( pass. name ) {
24
- pass. f ( srv, doc)
25
- }
26
- }
27
- }
28
-
29
- #[ test]
30
- fn test_run_passes ( ) {
31
- fn pass1 (
32
- _srv : astsrv:: Srv ,
33
- doc : doc:: Doc
34
- ) -> doc:: Doc {
35
- doc:: Doc_ ( {
36
- pages: ~[
37
- doc:: CratePage ( {
38
- topmod: doc:: ModDoc_ ( {
39
- item : {
40
- name : doc. cratemod ( ) . name ( ) + ~"two",
41
- .. doc. cratemod ( ) . item
42
- } ,
43
- items: ~[ ] ,
44
- index: None
45
- } )
46
- } )
47
- ]
48
- } )
49
- }
50
- fn pass2 (
51
- _srv : astsrv:: Srv ,
52
- doc : doc:: Doc
53
- ) -> doc:: Doc {
54
- doc:: Doc_ ( {
55
- pages: ~[
56
- doc:: CratePage ( {
57
- topmod: doc:: ModDoc_ ( {
58
- item : {
59
- name : doc. cratemod ( ) . name ( ) + ~"three",
60
- .. doc. cratemod ( ) . item
61
- } ,
62
- items: ~[ ] ,
63
- index: None
64
- } )
65
- } )
66
- ]
67
- } )
68
- }
69
- let source = ~"";
70
- do astsrv:: from_str ( source) |srv| {
71
- let passes = ~[
72
- {
73
- name: ~"",
74
- f: pass1
75
- } ,
76
- {
77
- name: ~"",
78
- f: pass2
79
- }
80
- ] ;
81
- let doc = extract:: from_srv ( srv, ~"one") ;
82
- let doc = run_passes ( srv, doc, passes) ;
83
- assert doc. cratemod ( ) . name ( ) == ~"onetwothree";
84
- }
85
- }
3
+ use pass:: Pass ;
4
+ use config:: Config ;
86
5
87
6
fn main ( args : ~[ ~str ] ) {
88
7
@@ -92,8 +11,8 @@ fn main(args: ~[~str]) {
92
11
}
93
12
94
13
let config = match config:: parse_config ( args) {
95
- result :: Ok ( config) => config,
96
- result :: Err ( err) => {
14
+ Ok ( config) => config,
15
+ Err ( err) => {
97
16
io:: println ( fmt ! ( "error: %s" , err) ) ;
98
17
return ;
99
18
}
@@ -102,43 +21,67 @@ fn main(args: ~[~str]) {
102
21
run ( config) ;
103
22
}
104
23
105
- fn time < T > ( what : ~str , f : fn ( ) -> T ) -> T {
106
- let start = std:: time:: precise_time_s ( ) ;
107
- let rv = f ( ) ;
108
- let end = std:: time:: precise_time_s ( ) ;
109
- info ! ( "time: %3.3f s %s" , end - start, what) ;
110
- return rv;
111
- }
112
-
113
24
/// Runs rustdoc over the given file
114
- fn run ( config : config :: Config ) {
25
+ fn run ( config : Config ) {
115
26
116
27
let source_file = config. input_crate ;
28
+
29
+ // Create an AST service from the source code
117
30
do astsrv:: from_file ( source_file. to_str ( ) ) |srv| {
31
+
32
+ // Just time how long it takes for the AST to become available
118
33
do time ( ~"wait_ast") {
119
34
do astsrv:: exec ( srv) |_ctxt| { }
120
35
} ;
36
+
37
+ // Extract the initial doc tree from the AST. This contains
38
+ // just names and node ids.
121
39
let doc = time ( ~"extract", || {
122
40
let default_name = source_file;
123
41
extract:: from_srv ( srv, default_name. to_str ( ) )
124
42
} ) ;
125
- run_passes ( srv, doc, ~[
43
+
44
+ // Refine and publish the document
45
+ pass:: run_passes ( srv, doc, ~[
46
+ // Generate type and signature strings
126
47
tystr_pass:: mk_pass ( ) ,
48
+ // Record the full paths to various nodes
127
49
path_pass:: mk_pass ( ) ,
50
+ // Extract the docs attributes and attach them to doc nodes
128
51
attr_pass:: mk_pass ( ) ,
52
+ // Perform various text escaping
129
53
escape_pass:: mk_pass ( ) ,
54
+ // Remove things marked doc(hidden)
130
55
prune_hidden_pass:: mk_pass ( ) ,
56
+ // Extract brief documentation from the full descriptions
131
57
desc_to_brief_pass:: mk_pass ( ) ,
58
+ // Massage the text to remove extra indentation
132
59
unindent_pass:: mk_pass ( ) ,
60
+ // Split text into multiple sections according to headers
133
61
sectionalize_pass:: mk_pass ( ) ,
62
+ // Trim extra spaces from text
134
63
trim_pass:: mk_pass ( ) ,
64
+ // Sort items by name
135
65
sort_item_name_pass:: mk_pass ( ) ,
66
+ // Sort items again by kind
136
67
sort_item_type_pass:: mk_pass ( ) ,
68
+ // Create indexes appropriate for markdown
137
69
markdown_index_pass:: mk_pass ( config) ,
70
+ // Break the document into pages if required by the
71
+ // output format
138
72
page_pass:: mk_pass ( config. output_style ) ,
73
+ // Render
139
74
markdown_pass:: mk_pass (
140
75
markdown_writer:: make_writer_factory ( config)
141
76
)
142
77
] ) ;
143
78
}
144
79
}
80
+
81
+ fn time < T > ( what : ~str , f : fn ( ) -> T ) -> T {
82
+ let start = std:: time:: precise_time_s ( ) ;
83
+ let rv = f ( ) ;
84
+ let end = std:: time:: precise_time_s ( ) ;
85
+ info ! ( "time: %3.3f s %s" , end - start, what) ;
86
+ return rv;
87
+ }
0 commit comments