lints_that_dont_need_to_run: never skip future-compat-reported lints

This commit is contained in:
Ralf Jung 2024-11-16 15:32:11 +01:00
parent 46e8d20301
commit df94818366
3 changed files with 27 additions and 16 deletions

View File

@ -123,17 +123,19 @@ fn lints_that_dont_need_to_run(tcx: TyCtxt<'_>, (): ()) -> FxIndexSet<LintId> {
let dont_need_to_run: FxIndexSet<LintId> = store let dont_need_to_run: FxIndexSet<LintId> = store
.get_lints() .get_lints()
.into_iter() .into_iter()
.filter(|lint| {
// Lints that show up in future-compat reports must always be run.
let has_future_breakage =
lint.future_incompatible.is_some_and(|fut| fut.reason.has_future_breakage());
!has_future_breakage && !lint.eval_always
})
.filter_map(|lint| { .filter_map(|lint| {
if !lint.eval_always { let lint_level = map.lint_level_id_at_node(tcx, LintId::of(lint), CRATE_HIR_ID);
let lint_level = map.lint_level_id_at_node(tcx, LintId::of(lint), CRATE_HIR_ID); if matches!(lint_level, (Level::Allow, ..))
if matches!(lint_level, (Level::Allow, ..)) || (matches!(lint_level, (.., LintLevelSource::Default)))
|| (matches!(lint_level, (.., LintLevelSource::Default))) && lint.default_level(tcx.sess.edition()) == Level::Allow
&& lint.default_level(tcx.sess.edition()) == Level::Allow {
{ Some(LintId::of(lint))
Some(LintId::of(lint))
} else {
None
}
} else { } else {
None None
} }

View File

@ -466,6 +466,20 @@ impl FutureIncompatibilityReason {
| FutureIncompatibilityReason::Custom(_) => None, | FutureIncompatibilityReason::Custom(_) => None,
} }
} }
pub fn has_future_breakage(self) -> bool {
match self {
FutureIncompatibilityReason::FutureReleaseErrorReportInDeps => true,
FutureIncompatibilityReason::FutureReleaseErrorDontReportInDeps
| FutureIncompatibilityReason::FutureReleaseSemanticsChange
| FutureIncompatibilityReason::EditionError(_)
| FutureIncompatibilityReason::EditionSemanticsChange(_)
| FutureIncompatibilityReason::EditionAndFutureReleaseError(_)
| FutureIncompatibilityReason::EditionAndFutureReleaseSemanticsChange(_)
| FutureIncompatibilityReason::Custom(_) => false,
}
}
} }
impl FutureIncompatibleInfo { impl FutureIncompatibleInfo {

View File

@ -290,12 +290,7 @@ pub fn lint_level(
let has_future_breakage = future_incompatible.map_or( let has_future_breakage = future_incompatible.map_or(
// Default allow lints trigger too often for testing. // Default allow lints trigger too often for testing.
sess.opts.unstable_opts.future_incompat_test && lint.default_level != Level::Allow, sess.opts.unstable_opts.future_incompat_test && lint.default_level != Level::Allow,
|incompat| { |incompat| incompat.reason.has_future_breakage(),
matches!(
incompat.reason,
FutureIncompatibilityReason::FutureReleaseErrorReportInDeps
)
},
); );
// Convert lint level to error level. // Convert lint level to error level.