Skip to content

Commit 4d1daf8

Browse files
committed
Simplify future incompatible reporting.
1 parent e9a387d commit 4d1daf8

File tree

7 files changed

+21
-48
lines changed

7 files changed

+21
-48
lines changed

compiler/rustc_errors/src/emitter.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
1010
use Destination::*;
1111

12-
use rustc_lint_defs::FutureBreakage;
1312
use rustc_span::source_map::SourceMap;
1413
use rustc_span::{MultiSpan, SourceFile, Span};
1514

@@ -193,7 +192,7 @@ pub trait Emitter {
193192
/// other formats can, and will, simply ignore it.
194193
fn emit_artifact_notification(&mut self, _path: &Path, _artifact_type: &str) {}
195194

196-
fn emit_future_breakage_report(&mut self, _diags: Vec<(FutureBreakage, Diagnostic)>) {}
195+
fn emit_future_breakage_report(&mut self, _diags: Vec<Diagnostic>) {}
197196

198197
/// Emit list of unused externs
199198
fn emit_unused_externs(&mut self, _lint_level: &str, _unused_externs: &[&str]) {}

compiler/rustc_errors/src/json.rs

+4-8
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use crate::registry::Registry;
1616
use crate::DiagnosticId;
1717
use crate::ToolMetadata;
1818
use crate::{CodeSuggestion, SubDiagnostic};
19-
use rustc_lint_defs::{Applicability, FutureBreakage};
19+
use rustc_lint_defs::Applicability;
2020

2121
use rustc_data_structures::sync::Lrc;
2222
use rustc_span::hygiene::ExpnData;
@@ -134,17 +134,14 @@ impl Emitter for JsonEmitter {
134134
}
135135
}
136136

137-
fn emit_future_breakage_report(&mut self, diags: Vec<(FutureBreakage, crate::Diagnostic)>) {
137+
fn emit_future_breakage_report(&mut self, diags: Vec<crate::Diagnostic>) {
138138
let data: Vec<FutureBreakageItem> = diags
139139
.into_iter()
140-
.map(|(breakage, mut diag)| {
140+
.map(|mut diag| {
141141
if diag.level == crate::Level::Allow {
142142
diag.level = crate::Level::Warning;
143143
}
144-
FutureBreakageItem {
145-
future_breakage_date: breakage.date,
146-
diagnostic: Diagnostic::from_errors_diagnostic(&diag, self),
147-
}
144+
FutureBreakageItem { diagnostic: Diagnostic::from_errors_diagnostic(&diag, self) }
148145
})
149146
.collect();
150147
let report = FutureIncompatReport { future_incompat_report: data };
@@ -326,7 +323,6 @@ struct ArtifactNotification<'a> {
326323

327324
#[derive(Encodable)]
328325
struct FutureBreakageItem {
329-
future_breakage_date: Option<&'static str>,
330326
diagnostic: Diagnostic,
331327
}
332328

compiler/rustc_errors/src/lib.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ use rustc_data_structures::fx::{FxHashSet, FxIndexMap};
2323
use rustc_data_structures::stable_hasher::StableHasher;
2424
use rustc_data_structures::sync::{self, Lock, Lrc};
2525
use rustc_data_structures::AtomicRef;
26-
use rustc_lint_defs::FutureBreakage;
2726
pub use rustc_lint_defs::{pluralize, Applicability};
2827
use rustc_serialize::json::Json;
2928
use rustc_serialize::{Decodable, Decoder, Encodable, Encoder};
@@ -790,7 +789,7 @@ impl Handler {
790789
self.inner.borrow_mut().emit_artifact_notification(path, artifact_type)
791790
}
792791

793-
pub fn emit_future_breakage_report(&self, diags: Vec<(FutureBreakage, Diagnostic)>) {
792+
pub fn emit_future_breakage_report(&self, diags: Vec<Diagnostic>) {
794793
self.inner.borrow_mut().emitter.emit_future_breakage_report(diags)
795794
}
796795

compiler/rustc_lint_defs/src/builtin.rs

+2-4
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
//! compiler code, rather than using their own custom pass. Those
77
//! lints are all available in `rustc_lint::builtin`.
88
9-
use crate::{declare_lint, declare_lint_pass, FutureBreakage, FutureIncompatibilityReason};
9+
use crate::{declare_lint, declare_lint_pass, FutureIncompatibilityReason};
1010
use rustc_span::edition::Edition;
1111

1212
declare_lint! {
@@ -3176,9 +3176,7 @@ declare_lint! {
31763176
"detects usage of old versions of certain proc-macro crates",
31773177
@future_incompatible = FutureIncompatibleInfo {
31783178
reference: "issue #83125 <https://github.com/rust-lang/rust/issues/83125>",
3179-
future_breakage: Some(FutureBreakage {
3180-
date: None
3181-
})
3179+
reason: FutureIncompatibilityReason::FutureReleaseErrorReportNow,
31823180
};
31833181
}
31843182

compiler/rustc_lint_defs/src/lib.rs

+3-10
Original file line numberDiff line numberDiff line change
@@ -152,10 +152,6 @@ pub struct FutureIncompatibleInfo {
152152
/// Set to false for lints that already include a more detailed
153153
/// explanation.
154154
pub explain_reason: bool,
155-
/// Information about a future breakage, which will
156-
/// be emitted in JSON messages to be displayed by Cargo
157-
/// for upstream deps
158-
pub future_breakage: Option<FutureBreakage>,
159155
}
160156

161157
/// The reason for future incompatibility
@@ -164,6 +160,9 @@ pub enum FutureIncompatibilityReason {
164160
/// This will be an error in a future release
165161
/// for all editions
166162
FutureReleaseError,
163+
/// This will be an error in a future release, and
164+
/// Cargo should create a report even for dependencies
165+
FutureReleaseErrorReportNow,
167166
/// Previously accepted code that will become an
168167
/// error in the provided edition
169168
EditionError(Edition),
@@ -182,18 +181,12 @@ impl FutureIncompatibilityReason {
182181
}
183182
}
184183

185-
#[derive(Copy, Clone, Debug)]
186-
pub struct FutureBreakage {
187-
pub date: Option<&'static str>,
188-
}
189-
190184
impl FutureIncompatibleInfo {
191185
pub const fn default_fields_for_macro() -> Self {
192186
FutureIncompatibleInfo {
193187
reference: "",
194188
reason: FutureIncompatibilityReason::FutureReleaseError,
195189
explain_reason: true,
196-
future_breakage: None,
197190
}
198191
}
199192
}

compiler/rustc_middle/src/lint.rs

+8-3
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use rustc_hir::HirId;
88
use rustc_index::vec::IndexVec;
99
use rustc_session::lint::{
1010
builtin::{self, FORBIDDEN_LINT_GROUPS},
11-
FutureIncompatibilityReason, Level, Lint, LintId,
11+
FutureIncompatibilityReason, FutureIncompatibleInfo, Level, Lint, LintId,
1212
};
1313
use rustc_session::{DiagnosticMessageId, Session};
1414
use rustc_span::hygiene::MacroKind;
@@ -223,8 +223,13 @@ pub fn struct_lint_level<'s, 'd>(
223223
let lint_id = LintId::of(lint);
224224
let future_incompatible = lint.future_incompatible;
225225

226-
let has_future_breakage =
227-
future_incompatible.map_or(false, |incompat| incompat.future_breakage.is_some());
226+
let has_future_breakage = matches!(
227+
future_incompatible,
228+
Some(FutureIncompatibleInfo {
229+
reason: FutureIncompatibilityReason::FutureReleaseErrorReportNow,
230+
..
231+
})
232+
);
228233

229234
let mut err = match (level, span) {
230235
(Level::Allow, span) => {

compiler/rustc_session/src/session.rs

+2-19
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@ use rustc_errors::annotate_snippet_emitter_writer::AnnotateSnippetEmitterWriter;
2020
use rustc_errors::emitter::{Emitter, EmitterWriter, HumanReadableErrorType};
2121
use rustc_errors::json::JsonEmitter;
2222
use rustc_errors::registry::Registry;
23-
use rustc_errors::{Diagnostic, DiagnosticBuilder, DiagnosticId, ErrorReported};
24-
use rustc_lint_defs::FutureBreakage;
23+
use rustc_errors::{DiagnosticBuilder, DiagnosticId, ErrorReported};
2524
use rustc_macros::HashStable_Generic;
2625
pub use rustc_span::def_id::StableCrateId;
2726
use rustc_span::source_map::{FileLoader, MultiSpan, RealFileLoader, SourceMap, Span};
@@ -317,23 +316,7 @@ impl Session {
317316
if diags.is_empty() {
318317
return;
319318
}
320-
// If any future-breakage lints were registered, this lint store
321-
// should be available
322-
let lint_store = self.lint_store.get().expect("`lint_store` not initialized!");
323-
let diags_and_breakage: Vec<(FutureBreakage, Diagnostic)> = diags
324-
.into_iter()
325-
.map(|diag| {
326-
let lint_name = match &diag.code {
327-
Some(DiagnosticId::Lint { name, has_future_breakage: true, .. }) => name,
328-
_ => panic!("Unexpected code in diagnostic {:?}", diag),
329-
};
330-
let lint = lint_store.name_to_lint(&lint_name);
331-
let future_breakage =
332-
lint.lint.future_incompatible.unwrap().future_breakage.unwrap();
333-
(future_breakage, diag)
334-
})
335-
.collect();
336-
self.parse_sess.span_diagnostic.emit_future_breakage_report(diags_and_breakage);
319+
self.parse_sess.span_diagnostic.emit_future_breakage_report(diags);
337320
}
338321

339322
pub fn local_stable_crate_id(&self) -> StableCrateId {

0 commit comments

Comments
 (0)