Skip to content

Commit 4ded7ee

Browse files
committed
rustc_lint: replace free function with extension trait
This is a bit more discoverable.
1 parent aed3f44 commit 4ded7ee

File tree

5 files changed

+22
-22
lines changed

5 files changed

+22
-22
lines changed

compiler/rustc_driver_impl/src/lib.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ use rustc_feature::find_gated_cfg;
3333
use rustc_fluent_macro::fluent_messages;
3434
use rustc_interface::util::{self, collect_crate_types, get_codegen_backend};
3535
use rustc_interface::{interface, Queries};
36-
use rustc_lint::unerased_lint_store;
36+
use rustc_lint::SessionExt;
3737
use rustc_metadata::locator;
3838
use rustc_session::config::{nightly_options, CG_OPTIONS, Z_OPTIONS};
3939
use rustc_session::config::{ErrorOutputType, Input, OutFileName, OutputType, TrimmedDefPaths};
@@ -979,7 +979,7 @@ Available lint options:
979979
lints
980980
}
981981

982-
let lint_store = unerased_lint_store(sess);
982+
let lint_store = sess.lint_store();
983983
let (loaded, builtin): (Vec<_>, _) =
984984
lint_store.get_lints().iter().cloned().partition(|&lint| lint.is_loaded);
985985
let loaded = sort_lints(sess, loaded);

compiler/rustc_interface/src/passes.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use rustc_expand::base::{ExtCtxt, LintStoreExpand};
1414
use rustc_feature::Features;
1515
use rustc_fs_util::try_canonicalize;
1616
use rustc_hir::def_id::{StableCrateId, LOCAL_CRATE};
17-
use rustc_lint::{unerased_lint_store, BufferedEarlyLint, EarlyCheckNode, LintStore};
17+
use rustc_lint::{BufferedEarlyLint, EarlyCheckNode, LintStore, SessionExt};
1818
use rustc_metadata::creader::CStore;
1919
use rustc_middle::arena::Arena;
2020
use rustc_middle::dep_graph::DepGraph;
@@ -127,7 +127,7 @@ fn configure_and_expand(
127127
let tcx = resolver.tcx();
128128
let sess = tcx.sess;
129129
let features = tcx.features();
130-
let lint_store = unerased_lint_store(tcx.sess);
130+
let lint_store = tcx.sess.lint_store();
131131
let crate_name = tcx.crate_name(LOCAL_CRATE);
132132
let lint_check_node = (&krate, pre_configured_attrs);
133133
pre_expansion_lint(
@@ -319,7 +319,7 @@ fn early_lint_checks(tcx: TyCtxt<'_>, (): ()) {
319319
}
320320
});
321321

322-
let lint_store = unerased_lint_store(tcx.sess);
322+
let lint_store = tcx.sess.lint_store();
323323
rustc_lint::check_ast_node(
324324
sess,
325325
tcx.features(),

compiler/rustc_lint/src/late.rs

+13-13
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,16 @@ use rustc_span::Span;
3030
use std::any::Any;
3131
use std::cell::Cell;
3232

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+
}
4043
}
4144

4245
macro_rules! lint_callback { ($cx:expr, $f:ident, $($args:expr),*) => ({
@@ -364,11 +367,8 @@ pub fn late_lint_mod<'tcx, T: LateLintPass<'tcx> + 'tcx>(
364367
// Note: `passes` is often empty. In that case, it's faster to run
365368
// `builtin_lints` directly rather than bundling it up into the
366369
// `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();
372372
if passes.is_empty() {
373373
late_lint_mod_inner(tcx, module_def_id, context, builtin_lints);
374374
} else {
@@ -405,7 +405,7 @@ fn late_lint_mod_inner<'tcx, T: LateLintPass<'tcx>>(
405405
fn late_lint_crate<'tcx>(tcx: TyCtxt<'tcx>) {
406406
// Note: `passes` is often empty.
407407
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();
409409

410410
if passes.is_empty() {
411411
return;

compiler/rustc_lint/src/levels.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use crate::{
77
builtin::MISSING_DOCS,
88
context::{CheckLintNameResult, LintStore},
99
fluent_generated as fluent,
10-
late::unerased_lint_store,
10+
late::SessionExt,
1111
lints::{
1212
DeprecatedLintName, IgnoredUnlessCrateSpecified, OverruledAttributeLint, RemovedLint,
1313
RenamedLint, RenamedLintSuggestion, UnknownLint, UnknownLintSuggestion,
@@ -122,7 +122,7 @@ impl LintLevelSets {
122122
}
123123

124124
fn lint_expectations(tcx: TyCtxt<'_>, (): ()) -> Vec<(LintExpectationId, LintExpectation)> {
125-
let store = unerased_lint_store(tcx.sess);
125+
let store = tcx.sess.lint_store();
126126

127127
let mut builder = LintLevelsBuilder {
128128
sess: tcx.sess,
@@ -151,7 +151,7 @@ fn lint_expectations(tcx: TyCtxt<'_>, (): ()) -> Vec<(LintExpectationId, LintExp
151151

152152
#[instrument(level = "trace", skip(tcx), ret)]
153153
fn shallow_lint_levels_on(tcx: TyCtxt<'_>, owner: hir::OwnerId) -> ShallowLintLevelMap {
154-
let store = unerased_lint_store(tcx.sess);
154+
let store = tcx.sess.lint_store();
155155
let attrs = tcx.hir_attrs(owner);
156156

157157
let mut levels = LintLevelsBuilder {

compiler/rustc_lint/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ pub use builtin::{MissingDoc, SoftLints};
131131
pub use context::{CheckLintNameResult, FindLintError, LintStore};
132132
pub use context::{EarlyContext, LateContext, LintContext};
133133
pub use early::{check_ast_node, EarlyCheckNode};
134-
pub use late::{check_crate, late_lint_mod, unerased_lint_store};
134+
pub use late::{check_crate, late_lint_mod, SessionExt};
135135
pub use passes::{EarlyLintPass, LateLintPass};
136136
pub use rustc_session::lint::Level::{self, *};
137137
pub use rustc_session::lint::{BufferedEarlyLint, FutureIncompatibleInfo, Lint, LintId};

0 commit comments

Comments
 (0)