@@ -344,9 +344,9 @@ pub fn run_core(options: RustdocOptions) -> (clean::Crate, RenderInfo, RenderOpt
344344 } ;
345345
346346 interface:: run_compiler_in_existing_thread_pool ( config, |compiler| {
347- let sess = compiler. session ( ) ;
347+ compiler. enter ( |queries| {
348+ let sess = compiler. session ( ) ;
348349
349- let ( resolver, mut global_ctxt) = compiler. enter ( |queries| {
350350 // We need to hold on to the complete resolver, so we cause everything to be
351351 // cloned for the analysis passes to use. Suboptimal, but necessary in the
352352 // current architecture.
@@ -375,121 +375,119 @@ pub fn run_core(options: RustdocOptions) -> (clean::Crate, RenderInfo, RenderOpt
375375 sess. fatal ( "Compilation failed, aborting rustdoc" ) ;
376376 }
377377
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+ }
426427
427- if name == "no_default_passes" {
428- msg. help ( "you may want to use `#![doc(document_private_items)]`" ) ;
428+ msg. emit ( ) ;
429429 }
430430
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 ( ) ) ;
445460 }
446461 }
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- }
465462
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+ }
469467 }
470468 }
471- }
472469
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+ } ) ) ;
482479
483- info ! ( "Executing passes" ) ;
480+ info ! ( "Executing passes" ) ;
484481
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+ }
489486
490- ctxt. sess ( ) . abort_if_errors ( ) ;
487+ ctxt. sess ( ) . abort_if_errors ( ) ;
491488
492- ( krate, ctxt. renderinfo . into_inner ( ) , render_options)
489+ ( krate, ctxt. renderinfo . into_inner ( ) , render_options)
490+ } )
493491 } )
494492 } )
495493}
0 commit comments