@@ -7,7 +7,7 @@ use crate::config::{RenderInfo, RenderOptions};
7
7
use crate :: error:: Error ;
8
8
use crate :: formats:: cache:: { Cache , CACHE_KEY } ;
9
9
10
- /// Allows for different backends to rustdoc to be used with the `Renderer::run ()` function. Each
10
+ /// Allows for different backends to rustdoc to be used with the `run_format ()` function. Each
11
11
/// backend renderer has hooks for initialization, documenting an item, entering and exiting a
12
12
/// module, and cleanup/finalizing output.
13
13
pub trait FormatRenderer : Clone {
@@ -42,75 +42,65 @@ pub trait FormatRenderer: Clone {
42
42
fn after_run ( & mut self , diag : & rustc_errors:: Handler ) -> Result < ( ) , Error > ;
43
43
}
44
44
45
- #[ derive( Clone ) ]
46
- pub struct Renderer ;
47
-
48
- impl Renderer {
49
- pub fn new ( ) -> Renderer {
50
- Renderer
51
- }
45
+ /// Main method for rendering a crate.
46
+ pub fn run_format < T : FormatRenderer > (
47
+ krate : clean:: Crate ,
48
+ options : RenderOptions ,
49
+ render_info : RenderInfo ,
50
+ diag : & rustc_errors:: Handler ,
51
+ edition : Edition ,
52
+ ) -> Result < ( ) , Error > {
53
+ let ( krate, mut cache) = Cache :: from_krate (
54
+ render_info. clone ( ) ,
55
+ options. document_private ,
56
+ & options. extern_html_root_urls ,
57
+ & options. output ,
58
+ krate,
59
+ ) ;
60
+
61
+ let ( mut format_renderer, mut krate) =
62
+ T :: init ( krate, options, render_info, edition, & mut cache) ?;
63
+
64
+ let cache = Arc :: new ( cache) ;
65
+ // Freeze the cache now that the index has been built. Put an Arc into TLS for future
66
+ // parallelization opportunities
67
+ CACHE_KEY . with ( |v| * v. borrow_mut ( ) = cache. clone ( ) ) ;
68
+
69
+ let mut item = match krate. module . take ( ) {
70
+ Some ( i) => i,
71
+ None => return Ok ( ( ) ) ,
72
+ } ;
73
+
74
+ item. name = Some ( krate. name . clone ( ) ) ;
75
+
76
+ // Render the crate documentation
77
+ let mut work = vec ! [ ( format_renderer. clone( ) , item) ] ;
78
+
79
+ while let Some ( ( mut cx, item) ) = work. pop ( ) {
80
+ if item. is_mod ( ) {
81
+ // modules are special because they add a namespace. We also need to
82
+ // recurse into the items of the module as well.
83
+ let name = item. name . as_ref ( ) . unwrap ( ) . to_string ( ) ;
84
+ if name. is_empty ( ) {
85
+ panic ! ( "Unexpected module with empty name" ) ;
86
+ }
52
87
53
- /// Main method for rendering a crate.
54
- pub fn run < T : FormatRenderer + Clone > (
55
- self ,
56
- krate : clean:: Crate ,
57
- options : RenderOptions ,
58
- render_info : RenderInfo ,
59
- diag : & rustc_errors:: Handler ,
60
- edition : Edition ,
61
- ) -> Result < ( ) , Error > {
62
- let ( krate, mut cache) = Cache :: from_krate (
63
- render_info. clone ( ) ,
64
- options. document_private ,
65
- & options. extern_html_root_urls ,
66
- & options. output ,
67
- krate,
68
- ) ;
69
-
70
- let ( mut format_renderer, mut krate) =
71
- T :: init ( krate, options, render_info, edition, & mut cache) ?;
72
-
73
- let cache = Arc :: new ( cache) ;
74
- // Freeze the cache now that the index has been built. Put an Arc into TLS for future
75
- // parallelization opportunities
76
- CACHE_KEY . with ( |v| * v. borrow_mut ( ) = cache. clone ( ) ) ;
77
-
78
- let mut item = match krate. module . take ( ) {
79
- Some ( i) => i,
80
- None => return Ok ( ( ) ) ,
81
- } ;
82
-
83
- item. name = Some ( krate. name . clone ( ) ) ;
84
-
85
- // Render the crate documentation
86
- let mut work = vec ! [ ( format_renderer. clone( ) , item) ] ;
87
-
88
- while let Some ( ( mut cx, item) ) = work. pop ( ) {
89
- if item. is_mod ( ) {
90
- // modules are special because they add a namespace. We also need to
91
- // recurse into the items of the module as well.
92
- let name = item. name . as_ref ( ) . unwrap ( ) . to_string ( ) ;
93
- if name. is_empty ( ) {
94
- panic ! ( "Unexpected module with empty name" ) ;
95
- }
96
-
97
- cx. mod_item_in ( & item, & name, & cache) ?;
98
- let module = match item. inner {
99
- clean:: StrippedItem ( box clean:: ModuleItem ( m) ) | clean:: ModuleItem ( m) => m,
100
- _ => unreachable ! ( ) ,
101
- } ;
102
- for it in module. items {
103
- debug ! ( "Adding {:?} to worklist" , it. name) ;
104
- work. push ( ( cx. clone ( ) , it) ) ;
105
- }
106
-
107
- cx. mod_item_out ( & name) ?;
108
- } else if item. name . is_some ( ) {
109
- cx. item ( item, & cache) ?;
88
+ cx. mod_item_in ( & item, & name, & cache) ?;
89
+ let module = match item. inner {
90
+ clean:: StrippedItem ( box clean:: ModuleItem ( m) ) | clean:: ModuleItem ( m) => m,
91
+ _ => unreachable ! ( ) ,
92
+ } ;
93
+ for it in module. items {
94
+ debug ! ( "Adding {:?} to worklist" , it. name) ;
95
+ work. push ( ( cx. clone ( ) , it) ) ;
110
96
}
111
- }
112
97
113
- format_renderer. after_krate ( & krate, & cache) ?;
114
- format_renderer. after_run ( diag)
98
+ cx. mod_item_out ( & name) ?;
99
+ } else if item. name . is_some ( ) {
100
+ cx. item ( item, & cache) ?;
101
+ }
115
102
}
103
+
104
+ format_renderer. after_krate ( & krate, & cache) ?;
105
+ format_renderer. after_run ( diag)
116
106
}
0 commit comments