Skip to content

Commit e888d47

Browse files
committed
give FutureIncompatibilityReason variants more explicit names
1 parent b757318 commit e888d47

File tree

4 files changed

+34
-19
lines changed

4 files changed

+34
-19
lines changed

compiler/rustc_errors/src/diagnostic.rs

+7-1
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,12 @@ impl fmt::Display for DiagnosticLocation {
151151
#[derive(Clone, Debug, PartialEq, Eq, Hash, Encodable, Decodable)]
152152
pub enum DiagnosticId {
153153
Error(String),
154-
Lint { name: String, has_future_breakage: bool, is_force_warn: bool },
154+
Lint {
155+
name: String,
156+
/// Indicates whether this lint should show up in cargo's future breakage report.
157+
has_future_breakage: bool,
158+
is_force_warn: bool,
159+
},
155160
}
156161

157162
/// A "sub"-diagnostic attached to a parent diagnostic.
@@ -301,6 +306,7 @@ impl Diagnostic {
301306
}
302307
}
303308

309+
/// Indicates whether this diagnostic should show up in cargo's future breakage report.
304310
pub fn has_future_breakage(&self) -> bool {
305311
match self.code {
306312
Some(DiagnosticId::Lint { has_future_breakage, .. }) => has_future_breakage,

compiler/rustc_lint_defs/src/builtin.rs

+10-10
Original file line numberDiff line numberDiff line change
@@ -1017,7 +1017,7 @@ declare_lint! {
10171017
"raw pointers must be aligned before dereferencing",
10181018
@future_incompatible = FutureIncompatibleInfo {
10191019
reference: "issue #68585 <https://github.com/rust-lang/rust/issues/104616>",
1020-
reason: FutureIncompatibilityReason::FutureReleaseErrorReportNow,
1020+
reason: FutureIncompatibilityReason::FutureReleaseErrorReportInDeps,
10211021
};
10221022
}
10231023

@@ -1387,7 +1387,7 @@ declare_lint! {
13871387
"trait-object types were treated as different depending on marker-trait order",
13881388
@future_incompatible = FutureIncompatibleInfo {
13891389
reference: "issue #56484 <https://github.com/rust-lang/rust/issues/56484>",
1390-
reason: FutureIncompatibilityReason::FutureReleaseErrorReportNow,
1390+
reason: FutureIncompatibilityReason::FutureReleaseErrorReportInDeps,
13911391
};
13921392
}
13931393

@@ -2006,7 +2006,7 @@ declare_lint! {
20062006
"detects proc macro derives using inaccessible names from parent modules",
20072007
@future_incompatible = FutureIncompatibleInfo {
20082008
reference: "issue #83583 <https://github.com/rust-lang/rust/issues/83583>",
2009-
reason: FutureIncompatibilityReason::FutureReleaseErrorReportNow,
2009+
reason: FutureIncompatibilityReason::FutureReleaseErrorReportInDeps,
20102010
};
20112011
}
20122012

@@ -2618,7 +2618,7 @@ declare_lint! {
26182618
"a C-like enum implementing Drop is cast",
26192619
@future_incompatible = FutureIncompatibleInfo {
26202620
reference: "issue #73333 <https://github.com/rust-lang/rust/issues/73333>",
2621-
reason: FutureIncompatibilityReason::FutureReleaseErrorReportNow,
2621+
reason: FutureIncompatibilityReason::FutureReleaseErrorReportInDeps,
26222622
};
26232623
}
26242624

@@ -2976,7 +2976,7 @@ declare_lint! {
29762976
"trailing semicolon in macro body used as expression",
29772977
@future_incompatible = FutureIncompatibleInfo {
29782978
reference: "issue #79813 <https://github.com/rust-lang/rust/issues/79813>",
2979-
reason: FutureIncompatibilityReason::FutureReleaseErrorReportNow,
2979+
reason: FutureIncompatibilityReason::FutureReleaseErrorReportInDeps,
29802980
};
29812981
}
29822982

@@ -3709,7 +3709,7 @@ declare_lint! {
37093709
"detects usage of old versions of certain proc-macro crates",
37103710
@future_incompatible = FutureIncompatibleInfo {
37113711
reference: "issue #83125 <https://github.com/rust-lang/rust/issues/83125>",
3712-
reason: FutureIncompatibilityReason::FutureReleaseErrorReportNow,
3712+
reason: FutureIncompatibilityReason::FutureReleaseErrorReportInDeps,
37133713
};
37143714
}
37153715

@@ -4222,7 +4222,7 @@ declare_lint! {
42224222
"impl method assumes more implied bounds than its corresponding trait method",
42234223
@future_incompatible = FutureIncompatibleInfo {
42244224
reference: "issue #105572 <https://github.com/rust-lang/rust/issues/105572>",
4225-
reason: FutureIncompatibilityReason::FutureReleaseErrorReportNow,
4225+
reason: FutureIncompatibilityReason::FutureReleaseErrorReportInDeps,
42264226
};
42274227
}
42284228

@@ -4254,7 +4254,7 @@ declare_lint! {
42544254
"`[u8]` or `str` used in a packed struct with `derive`",
42554255
@future_incompatible = FutureIncompatibleInfo {
42564256
reference: "issue #107457 <https://github.com/rust-lang/rust/issues/107457>",
4257-
reason: FutureIncompatibilityReason::FutureReleaseErrorReportNow,
4257+
reason: FutureIncompatibilityReason::FutureReleaseErrorReportInDeps,
42584258
};
42594259
report_in_external_macro
42604260
}
@@ -4483,7 +4483,7 @@ declare_lint! {
44834483
Warn,
44844484
"detects certain glob imports that require reporting an ambiguity error",
44854485
@future_incompatible = FutureIncompatibleInfo {
4486-
reason: FutureIncompatibilityReason::FutureReleaseError,
4486+
reason: FutureIncompatibilityReason::FutureReleaseErrorDontReportInDeps,
44874487
reference: "issue #114095 <https://github.com/rust-lang/rust/issues/114095>",
44884488
};
44894489
}
@@ -4568,7 +4568,7 @@ declare_lint! {
45684568
Warn,
45694569
"elided lifetimes cannot be used in associated constants in impls",
45704570
@future_incompatible = FutureIncompatibleInfo {
4571-
reason: FutureIncompatibilityReason::FutureReleaseError,
4571+
reason: FutureIncompatibilityReason::FutureReleaseErrorDontReportInDeps,
45724572
reference: "issue #115010 <https://github.com/rust-lang/rust/issues/115010>",
45734573
};
45744574
}

compiler/rustc_lint_defs/src/lib.rs

+11-5
Original file line numberDiff line numberDiff line change
@@ -347,12 +347,18 @@ pub struct FutureIncompatibleInfo {
347347
/// The reason for future incompatibility
348348
#[derive(Copy, Clone, Debug)]
349349
pub enum FutureIncompatibilityReason {
350-
/// This will be an error in a future release
351-
/// for all editions
352-
FutureReleaseError,
350+
/// This will be an error in a future release for all editions
351+
///
352+
/// This will *not* show up in cargo's future breakage report.
353+
/// The warning will hence only be seen in local crates, not in dependencies.
354+
FutureReleaseErrorDontReportInDeps,
353355
/// This will be an error in a future release, and
354356
/// Cargo should create a report even for dependencies
355-
FutureReleaseErrorReportNow,
357+
///
358+
/// This is the *only* reason that will make future incompatibility warnings show up in cargo's
359+
/// reports. All other future incompatibility warnings are not visible when they occur in a
360+
/// dependency.
361+
FutureReleaseErrorReportInDeps,
356362
/// Code that changes meaning in some way in a
357363
/// future release.
358364
FutureReleaseSemanticsChange,
@@ -380,7 +386,7 @@ impl FutureIncompatibleInfo {
380386
pub const fn default_fields_for_macro() -> Self {
381387
FutureIncompatibleInfo {
382388
reference: "",
383-
reason: FutureIncompatibilityReason::FutureReleaseError,
389+
reason: FutureIncompatibilityReason::FutureReleaseErrorDontReportInDeps,
384390
explain_reason: true,
385391
}
386392
}

compiler/rustc_middle/src/lint.rs

+6-3
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,10 @@ pub fn struct_lint_level(
314314
// Default allow lints trigger too often for testing.
315315
sess.opts.unstable_opts.future_incompat_test && lint.default_level != Level::Allow,
316316
|incompat| {
317-
matches!(incompat.reason, FutureIncompatibilityReason::FutureReleaseErrorReportNow)
317+
matches!(
318+
incompat.reason,
319+
FutureIncompatibilityReason::FutureReleaseErrorReportInDeps
320+
)
318321
},
319322
);
320323

@@ -404,8 +407,8 @@ pub fn struct_lint_level(
404407

405408
if let Some(future_incompatible) = future_incompatible {
406409
let explanation = match future_incompatible.reason {
407-
FutureIncompatibilityReason::FutureReleaseError
408-
| FutureIncompatibilityReason::FutureReleaseErrorReportNow => {
410+
FutureIncompatibilityReason::FutureReleaseErrorDontReportInDeps
411+
| FutureIncompatibilityReason::FutureReleaseErrorReportInDeps => {
409412
"this was previously accepted by the compiler but is being phased out; \
410413
it will become a hard error in a future release!"
411414
.to_owned()

0 commit comments

Comments
 (0)