@@ -30,13 +30,16 @@ use rustc_span::Span;
30
30
use std:: any:: Any ;
31
31
use std:: cell:: Cell ;
32
32
33
- /// Extract the [`LintStore`] from [`Session`].
34
- ///
35
- /// This function exists because [`Session::lint_store`] is type-erased.
36
- pub fn unerased_lint_store ( sess : & Session ) -> & LintStore {
37
- let store: & Lrc < _ > = sess. lint_store . as_ref ( ) . unwrap ( ) ;
38
- let store: & dyn Any = & * * store;
39
- store. downcast_ref ( ) . unwrap ( )
33
+ pub trait SessionExt {
34
+ fn lint_store ( & self ) -> & LintStore ;
35
+ }
36
+
37
+ impl SessionExt for Session {
38
+ fn lint_store ( & self ) -> & LintStore {
39
+ let store: & Lrc < _ > = self . lint_store . as_ref ( ) . unwrap ( ) ;
40
+ let store: & dyn Any = & * * store;
41
+ store. downcast_ref ( ) . unwrap ( )
42
+ }
40
43
}
41
44
42
45
macro_rules! lint_callback { ( $cx: expr, $f: ident, $( $args: expr) ,* ) => ( {
@@ -364,11 +367,8 @@ pub fn late_lint_mod<'tcx, T: LateLintPass<'tcx> + 'tcx>(
364
367
// Note: `passes` is often empty. In that case, it's faster to run
365
368
// `builtin_lints` directly rather than bundling it up into the
366
369
// `RuntimeCombinedLateLintPass`.
367
- let mut passes: Vec < _ > = unerased_lint_store ( tcx. sess )
368
- . late_module_passes
369
- . iter ( )
370
- . map ( |mk_pass| ( mk_pass) ( tcx) )
371
- . collect ( ) ;
370
+ let mut passes: Vec < _ > =
371
+ tcx. sess . lint_store ( ) . late_module_passes . iter ( ) . map ( |mk_pass| ( mk_pass) ( tcx) ) . collect ( ) ;
372
372
if passes. is_empty ( ) {
373
373
late_lint_mod_inner ( tcx, module_def_id, context, builtin_lints) ;
374
374
} else {
@@ -405,7 +405,7 @@ fn late_lint_mod_inner<'tcx, T: LateLintPass<'tcx>>(
405
405
fn late_lint_crate < ' tcx > ( tcx : TyCtxt < ' tcx > ) {
406
406
// Note: `passes` is often empty.
407
407
let mut passes: Vec < _ > =
408
- unerased_lint_store ( tcx. sess ) . late_passes . iter ( ) . map ( |mk_pass| ( mk_pass) ( tcx) ) . collect ( ) ;
408
+ tcx. sess . lint_store ( ) . late_passes . iter ( ) . map ( |mk_pass| ( mk_pass) ( tcx) ) . collect ( ) ;
409
409
410
410
if passes. is_empty ( ) {
411
411
return ;
0 commit comments