@@ -106,25 +106,27 @@ crate fn run(options: Options) -> Result<(), ErrorReported> {
106106
107107 let tests = interface:: run_compiler ( config, |compiler| {
108108 compiler. enter ( |queries| {
109- let lower_to_hir = queries. lower_to_hir ( ) ?;
110-
111- let mut opts = scrape_test_config ( lower_to_hir. peek ( ) . 0 ) ;
112- opts. display_warnings |= options. display_warnings ;
113- let enable_per_target_ignores = options. enable_per_target_ignores ;
114- let mut collector = Collector :: new (
115- queries. crate_name ( ) ?. peek ( ) . to_string ( ) ,
116- options,
117- false ,
118- opts,
119- Some ( compiler. session ( ) . parse_sess . clone_source_map ( ) ) ,
120- None ,
121- enable_per_target_ignores,
122- ) ;
109+ let _lower_to_hir = queries. lower_to_hir ( ) ?;
123110
111+ let crate_name = queries. crate_name ( ) ?. peek ( ) . to_string ( ) ;
124112 let mut global_ctxt = queries. global_ctxt ( ) ?. take ( ) ;
125113
126- global_ctxt. enter ( |tcx| {
114+ let collector = global_ctxt. enter ( |tcx| {
127115 let krate = tcx. hir ( ) . krate ( ) ;
116+ let crate_attrs = tcx. hir ( ) . attrs ( CRATE_HIR_ID ) ;
117+
118+ let mut opts = scrape_test_config ( crate_attrs) ;
119+ opts. display_warnings |= options. display_warnings ;
120+ let enable_per_target_ignores = options. enable_per_target_ignores ;
121+ let mut collector = Collector :: new (
122+ crate_name,
123+ options,
124+ false ,
125+ opts,
126+ Some ( compiler. session ( ) . parse_sess . clone_source_map ( ) ) ,
127+ None ,
128+ enable_per_target_ignores,
129+ ) ;
128130
129131 let mut hir_collector = HirCollector {
130132 sess : compiler. session ( ) ,
@@ -143,6 +145,8 @@ crate fn run(options: Options) -> Result<(), ErrorReported> {
143145 intravisit:: walk_crate ( this, krate) ;
144146 } ,
145147 ) ;
148+
149+ collector
146150 } ) ;
147151 compiler. session ( ) . abort_if_errors ( ) ;
148152
@@ -167,15 +171,13 @@ crate fn run(options: Options) -> Result<(), ErrorReported> {
167171}
168172
169173// Look for `#![doc(test(no_crate_inject))]`, used by crates in the std facade.
170- fn scrape_test_config ( krate : & :: rustc_hir :: Crate < ' _ > ) -> TestOptions {
174+ fn scrape_test_config ( attrs : & [ ast :: Attribute ] ) -> TestOptions {
171175 use rustc_ast_pretty:: pprust;
172176
173177 let mut opts =
174178 TestOptions { no_crate_inject : false , display_warnings : false , attrs : Vec :: new ( ) } ;
175179
176- let test_attrs: Vec < _ > = krate
177- . item
178- . attrs
180+ let test_attrs: Vec < _ > = attrs
179181 . iter ( )
180182 . filter ( |a| a. has_name ( sym:: doc) )
181183 . flat_map ( |a| a. meta_item_list ( ) . unwrap_or_else ( Vec :: new) )
0 commit comments