Update unstable ExpectationId
s in stored diagnostics
This commit is contained in:
parent
1b14fd3b10
commit
47f3f66240
2 changed files with 41 additions and 13 deletions
|
@ -5,7 +5,8 @@ use crate::Substitution;
|
||||||
use crate::SubstitutionPart;
|
use crate::SubstitutionPart;
|
||||||
use crate::SuggestionStyle;
|
use crate::SuggestionStyle;
|
||||||
use crate::ToolMetadata;
|
use crate::ToolMetadata;
|
||||||
use rustc_lint_defs::Applicability;
|
use rustc_data_structures::stable_map::FxHashMap;
|
||||||
|
use rustc_lint_defs::{Applicability, LintExpectationId};
|
||||||
use rustc_serialize::json::Json;
|
use rustc_serialize::json::Json;
|
||||||
use rustc_span::{MultiSpan, Span, DUMMY_SP};
|
use rustc_span::{MultiSpan, Span, DUMMY_SP};
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
|
@ -137,6 +138,28 @@ impl Diagnostic {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn update_unstable_expectation_id(
|
||||||
|
&mut self,
|
||||||
|
unstable_to_stable: &FxHashMap<LintExpectationId, LintExpectationId>,
|
||||||
|
) {
|
||||||
|
if let Level::Expect(expectation_id) = &mut self.level {
|
||||||
|
if expectation_id.is_stable() {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// The unstable to stable map only maps the unstable `AttrId` to a stable `HirId` with an attribute index.
|
||||||
|
// The lint index inside the attribute is manually transferred here.
|
||||||
|
let lint_index = expectation_id.get_lint_index();
|
||||||
|
expectation_id.set_lint_index(None);
|
||||||
|
let mut stable_id = *unstable_to_stable
|
||||||
|
.get(&expectation_id)
|
||||||
|
.expect("each unstable `LintExpectationId` must have a matching stable id");
|
||||||
|
|
||||||
|
stable_id.set_lint_index(lint_index);
|
||||||
|
*expectation_id = stable_id;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn has_future_breakage(&self) -> bool {
|
pub fn has_future_breakage(&self) -> bool {
|
||||||
match self.code {
|
match self.code {
|
||||||
Some(DiagnosticId::Lint { has_future_breakage, .. }) => has_future_breakage,
|
Some(DiagnosticId::Lint { has_future_breakage, .. }) => has_future_breakage,
|
||||||
|
|
|
@ -522,6 +522,11 @@ impl Drop for HandlerInner {
|
||||||
"no warnings or errors encountered even though `delayed_good_path_bugs` issued",
|
"no warnings or errors encountered even though `delayed_good_path_bugs` issued",
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
assert!(
|
||||||
|
self.unstable_expect_diagnostics.is_empty(),
|
||||||
|
"all diagnostics with unstable expectations should have been converted",
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -942,25 +947,25 @@ impl Handler {
|
||||||
|
|
||||||
let mut inner = self.inner.borrow_mut();
|
let mut inner = self.inner.borrow_mut();
|
||||||
for mut diag in diags.into_iter() {
|
for mut diag in diags.into_iter() {
|
||||||
let mut unstable_id = diag
|
diag.update_unstable_expectation_id(unstable_to_stable);
|
||||||
|
|
||||||
|
let stable_id = diag
|
||||||
.level
|
.level
|
||||||
.get_expectation_id()
|
.get_expectation_id()
|
||||||
.expect("all diagnostics inside `unstable_expect_diagnostics` must have a `LintExpectationId`");
|
.expect("all diagnostics inside `unstable_expect_diagnostics` must have a `LintExpectationId`");
|
||||||
|
|
||||||
// The unstable to stable map only maps the unstable `AttrId` to a stable `HirId` with an attribute index.
|
|
||||||
// The lint index inside the attribute is manually transferred here.
|
|
||||||
let lint_index = unstable_id.get_lint_index();
|
|
||||||
unstable_id.set_lint_index(None);
|
|
||||||
let mut stable_id = *unstable_to_stable
|
|
||||||
.get(&unstable_id)
|
|
||||||
.expect("each unstable `LintExpectationId` must have a matching stable id");
|
|
||||||
|
|
||||||
stable_id.set_lint_index(lint_index);
|
|
||||||
diag.level = Level::Expect(stable_id);
|
|
||||||
inner.fulfilled_expectations.insert(stable_id);
|
inner.fulfilled_expectations.insert(stable_id);
|
||||||
|
|
||||||
(*TRACK_DIAGNOSTICS)(&diag);
|
(*TRACK_DIAGNOSTICS)(&diag);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inner
|
||||||
|
.stashed_diagnostics
|
||||||
|
.values_mut()
|
||||||
|
.for_each(|diag| diag.update_unstable_expectation_id(unstable_to_stable));
|
||||||
|
inner
|
||||||
|
.future_breakage_diagnostics
|
||||||
|
.iter_mut()
|
||||||
|
.for_each(|diag| diag.update_unstable_expectation_id(unstable_to_stable));
|
||||||
}
|
}
|
||||||
|
|
||||||
/// This methods steals all [`LintExpectationId`]s that are stored inside
|
/// This methods steals all [`LintExpectationId`]s that are stored inside
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue