@@ -344,9 +344,9 @@ pub fn run_core(options: RustdocOptions) -> (clean::Crate, RenderInfo, RenderOpt
344
344
} ;
345
345
346
346
interface:: run_compiler_in_existing_thread_pool ( config, |compiler| {
347
- let sess = compiler. session ( ) ;
347
+ compiler. enter ( |queries| {
348
+ let sess = compiler. session ( ) ;
348
349
349
- let ( resolver, mut global_ctxt) = compiler. enter ( |queries| {
350
350
// We need to hold on to the complete resolver, so we cause everything to be
351
351
// cloned for the analysis passes to use. Suboptimal, but necessary in the
352
352
// current architecture.
@@ -375,121 +375,119 @@ pub fn run_core(options: RustdocOptions) -> (clean::Crate, RenderInfo, RenderOpt
375
375
sess. fatal ( "Compilation failed, aborting rustdoc" ) ;
376
376
}
377
377
378
- let global_ctxt = abort_on_err ( queries. global_ctxt ( ) , sess) . take ( ) ;
379
-
380
- ( resolver, global_ctxt)
381
- } ) ;
382
-
383
- global_ctxt. enter ( |tcx| {
384
- tcx. analysis ( LOCAL_CRATE ) . ok ( ) ;
385
-
386
- // Abort if there were any errors so far
387
- sess. abort_if_errors ( ) ;
388
-
389
- let access_levels = tcx. privacy_access_levels ( LOCAL_CRATE ) ;
390
- // Convert from a HirId set to a DefId set since we don't always have easy access
391
- // to the map from defid -> hirid
392
- let access_levels = AccessLevels {
393
- map : access_levels. map . iter ( )
394
- . map ( |( & k, & v) | ( tcx. hir ( ) . local_def_id ( k) , v) )
395
- . collect ( )
396
- } ;
397
-
398
- let mut renderinfo = RenderInfo :: default ( ) ;
399
- renderinfo. access_levels = access_levels;
400
-
401
- let mut ctxt = DocContext {
402
- tcx,
403
- resolver,
404
- external_traits : Default :: default ( ) ,
405
- active_extern_traits : Default :: default ( ) ,
406
- renderinfo : RefCell :: new ( renderinfo) ,
407
- ty_substs : Default :: default ( ) ,
408
- lt_substs : Default :: default ( ) ,
409
- ct_substs : Default :: default ( ) ,
410
- impl_trait_bounds : Default :: default ( ) ,
411
- fake_def_ids : Default :: default ( ) ,
412
- all_fake_def_ids : Default :: default ( ) ,
413
- generated_synthetics : Default :: default ( ) ,
414
- auto_traits : tcx. all_traits ( LOCAL_CRATE ) . iter ( ) . cloned ( ) . filter ( |trait_def_id| {
415
- tcx. trait_is_auto ( * trait_def_id)
416
- } ) . collect ( ) ,
417
- } ;
418
- debug ! ( "crate: {:?}" , tcx. hir( ) . krate( ) ) ;
419
-
420
- let mut krate = clean:: krate ( & mut ctxt) ;
421
-
422
- fn report_deprecated_attr ( name : & str , diag : & errors:: Handler ) {
423
- let mut msg = diag. struct_warn ( & format ! ( "the `#![doc({})]` attribute is \
424
- considered deprecated", name) ) ;
425
- msg. warn ( "please see https://github.com/rust-lang/rust/issues/44136" ) ;
378
+ let mut global_ctxt = abort_on_err ( queries. global_ctxt ( ) , sess) . take ( ) ;
379
+
380
+ global_ctxt. enter ( |tcx| {
381
+ tcx. analysis ( LOCAL_CRATE ) . ok ( ) ;
382
+
383
+ // Abort if there were any errors so far
384
+ sess. abort_if_errors ( ) ;
385
+
386
+ let access_levels = tcx. privacy_access_levels ( LOCAL_CRATE ) ;
387
+ // Convert from a HirId set to a DefId set since we don't always have easy access
388
+ // to the map from defid -> hirid
389
+ let access_levels = AccessLevels {
390
+ map : access_levels. map . iter ( )
391
+ . map ( |( & k, & v) | ( tcx. hir ( ) . local_def_id ( k) , v) )
392
+ . collect ( )
393
+ } ;
394
+
395
+ let mut renderinfo = RenderInfo :: default ( ) ;
396
+ renderinfo. access_levels = access_levels;
397
+
398
+ let mut ctxt = DocContext {
399
+ tcx,
400
+ resolver,
401
+ external_traits : Default :: default ( ) ,
402
+ active_extern_traits : Default :: default ( ) ,
403
+ renderinfo : RefCell :: new ( renderinfo) ,
404
+ ty_substs : Default :: default ( ) ,
405
+ lt_substs : Default :: default ( ) ,
406
+ ct_substs : Default :: default ( ) ,
407
+ impl_trait_bounds : Default :: default ( ) ,
408
+ fake_def_ids : Default :: default ( ) ,
409
+ all_fake_def_ids : Default :: default ( ) ,
410
+ generated_synthetics : Default :: default ( ) ,
411
+ auto_traits : tcx. all_traits ( LOCAL_CRATE ) . iter ( ) . cloned ( ) . filter ( |trait_def_id| {
412
+ tcx. trait_is_auto ( * trait_def_id)
413
+ } ) . collect ( ) ,
414
+ } ;
415
+ debug ! ( "crate: {:?}" , tcx. hir( ) . krate( ) ) ;
416
+
417
+ let mut krate = clean:: krate ( & mut ctxt) ;
418
+
419
+ fn report_deprecated_attr ( name : & str , diag : & errors:: Handler ) {
420
+ let mut msg = diag. struct_warn ( & format ! ( "the `#![doc({})]` attribute is \
421
+ considered deprecated", name) ) ;
422
+ msg. warn ( "please see https://github.com/rust-lang/rust/issues/44136" ) ;
423
+
424
+ if name == "no_default_passes" {
425
+ msg. help ( "you may want to use `#![doc(document_private_items)]`" ) ;
426
+ }
426
427
427
- if name == "no_default_passes" {
428
- msg. help ( "you may want to use `#![doc(document_private_items)]`" ) ;
428
+ msg. emit ( ) ;
429
429
}
430
430
431
- msg. emit ( ) ;
432
- }
433
-
434
- // Process all of the crate attributes, extracting plugin metadata along
435
- // with the passes which we are supposed to run.
436
- for attr in krate. module . as_ref ( ) . unwrap ( ) . attrs . lists ( sym:: doc) {
437
- let diag = ctxt. sess ( ) . diagnostic ( ) ;
438
-
439
- let name = attr. name_or_empty ( ) ;
440
- if attr. is_word ( ) {
441
- if name == sym:: no_default_passes {
442
- report_deprecated_attr ( "no_default_passes" , diag) ;
443
- if default_passes == passes:: DefaultPassOption :: Default {
444
- default_passes = passes:: DefaultPassOption :: None ;
431
+ // Process all of the crate attributes, extracting plugin metadata along
432
+ // with the passes which we are supposed to run.
433
+ for attr in krate. module . as_ref ( ) . unwrap ( ) . attrs . lists ( sym:: doc) {
434
+ let diag = ctxt. sess ( ) . diagnostic ( ) ;
435
+
436
+ let name = attr. name_or_empty ( ) ;
437
+ if attr. is_word ( ) {
438
+ if name == sym:: no_default_passes {
439
+ report_deprecated_attr ( "no_default_passes" , diag) ;
440
+ if default_passes == passes:: DefaultPassOption :: Default {
441
+ default_passes = passes:: DefaultPassOption :: None ;
442
+ }
443
+ }
444
+ } else if let Some ( value) = attr. value_str ( ) {
445
+ let sink = match name {
446
+ sym:: passes => {
447
+ report_deprecated_attr ( "passes = \" ...\" " , diag) ;
448
+ & mut manual_passes
449
+ } ,
450
+ sym:: plugins => {
451
+ report_deprecated_attr ( "plugins = \" ...\" " , diag) ;
452
+ eprintln ! ( "WARNING: `#![doc(plugins = \" ...\" )]` \
453
+ no longer functions; see CVE-2018-1000622") ;
454
+ continue
455
+ } ,
456
+ _ => continue ,
457
+ } ;
458
+ for name in value. as_str ( ) . split_whitespace ( ) {
459
+ sink. push ( name. to_string ( ) ) ;
445
460
}
446
461
}
447
- } else if let Some ( value) = attr. value_str ( ) {
448
- let sink = match name {
449
- sym:: passes => {
450
- report_deprecated_attr ( "passes = \" ...\" " , diag) ;
451
- & mut manual_passes
452
- } ,
453
- sym:: plugins => {
454
- report_deprecated_attr ( "plugins = \" ...\" " , diag) ;
455
- eprintln ! ( "WARNING: `#![doc(plugins = \" ...\" )]` no longer functions; \
456
- see CVE-2018-1000622") ;
457
- continue
458
- } ,
459
- _ => continue ,
460
- } ;
461
- for name in value. as_str ( ) . split_whitespace ( ) {
462
- sink. push ( name. to_string ( ) ) ;
463
- }
464
- }
465
462
466
- if attr. is_word ( ) && name == sym:: document_private_items {
467
- if default_passes == passes:: DefaultPassOption :: Default {
468
- default_passes = passes:: DefaultPassOption :: Private ;
463
+ if attr. is_word ( ) && name == sym:: document_private_items {
464
+ if default_passes == passes:: DefaultPassOption :: Default {
465
+ default_passes = passes:: DefaultPassOption :: Private ;
466
+ }
469
467
}
470
468
}
471
- }
472
469
473
- let passes = passes:: defaults ( default_passes) . iter ( ) . chain ( manual_passes. into_iter ( )
474
- . flat_map ( |name| {
475
- if let Some ( pass) = passes:: find_pass ( & name) {
476
- Some ( pass)
477
- } else {
478
- error ! ( "unknown pass {}, skipping" , name) ;
479
- None
480
- }
481
- } ) ) ;
470
+ let passes = passes:: defaults ( default_passes) . iter ( ) . chain ( manual_passes. into_iter ( )
471
+ . flat_map ( |name| {
472
+ if let Some ( pass) = passes:: find_pass ( & name) {
473
+ Some ( pass)
474
+ } else {
475
+ error ! ( "unknown pass {}, skipping" , name) ;
476
+ None
477
+ }
478
+ } ) ) ;
482
479
483
- info ! ( "Executing passes" ) ;
480
+ info ! ( "Executing passes" ) ;
484
481
485
- for pass in passes {
486
- debug ! ( "running pass {}" , pass. name) ;
487
- krate = ( pass. pass ) ( krate, & ctxt) ;
488
- }
482
+ for pass in passes {
483
+ debug ! ( "running pass {}" , pass. name) ;
484
+ krate = ( pass. pass ) ( krate, & ctxt) ;
485
+ }
489
486
490
- ctxt. sess ( ) . abort_if_errors ( ) ;
487
+ ctxt. sess ( ) . abort_if_errors ( ) ;
491
488
492
- ( krate, ctxt. renderinfo . into_inner ( ) , render_options)
489
+ ( krate, ctxt. renderinfo . into_inner ( ) , render_options)
490
+ } )
493
491
} )
494
492
} )
495
493
}
0 commit comments