Store version of deprecated
attribute in structured form
This commit is contained in:
parent
5c7cf83739
commit
2fe7d17bd9
7 changed files with 85 additions and 105 deletions
|
@ -3,8 +3,8 @@
|
|||
|
||||
use crate::errors;
|
||||
use rustc_attr::{
|
||||
self as attr, ConstStability, Stability, StabilityLevel, StableSince, Unstable, UnstableReason,
|
||||
VERSION_PLACEHOLDER,
|
||||
self as attr, ConstStability, DeprecatedSince, Stability, StabilityLevel, StableSince,
|
||||
Unstable, UnstableReason, VERSION_PLACEHOLDER,
|
||||
};
|
||||
use rustc_data_structures::fx::{FxHashMap, FxHashSet, FxIndexMap};
|
||||
use rustc_hir as hir;
|
||||
|
@ -24,8 +24,6 @@ use rustc_span::symbol::{sym, Symbol};
|
|||
use rustc_span::Span;
|
||||
use rustc_target::spec::abi::Abi;
|
||||
|
||||
use std::cmp::Ordering;
|
||||
use std::iter;
|
||||
use std::mem::replace;
|
||||
use std::num::NonZeroU32;
|
||||
|
||||
|
@ -198,7 +196,11 @@ impl<'a, 'tcx> Annotator<'a, 'tcx> {
|
|||
}
|
||||
}
|
||||
|
||||
if let Some((rustc_attr::Deprecation { is_since_rustc_version: true, .. }, span)) = &depr {
|
||||
if let Some((
|
||||
rustc_attr::Deprecation { since: Some(DeprecatedSince::RustcVersion(_)), .. },
|
||||
span,
|
||||
)) = &depr
|
||||
{
|
||||
if stab.is_none() {
|
||||
self.tcx.sess.emit_err(errors::DeprecatedAttribute { span: *span });
|
||||
}
|
||||
|
@ -223,41 +225,20 @@ impl<'a, 'tcx> Annotator<'a, 'tcx> {
|
|||
|
||||
// Check if deprecated_since < stable_since. If it is,
|
||||
// this is *almost surely* an accident.
|
||||
if let (&Some(dep_since), &attr::Stable { since: stab_since, .. }) =
|
||||
(&depr.as_ref().and_then(|(d, _)| d.since), &stab.level)
|
||||
if let (
|
||||
&Some(DeprecatedSince::RustcVersion(dep_since)),
|
||||
&attr::Stable { since: stab_since, .. },
|
||||
) = (&depr.as_ref().and_then(|(d, _)| d.since), &stab.level)
|
||||
{
|
||||
match stab_since {
|
||||
StableSince::Current => {
|
||||
self.tcx.sess.emit_err(errors::CannotStabilizeDeprecated { span, item_sp });
|
||||
}
|
||||
StableSince::Version(stab_since) => {
|
||||
// Explicit version of iter::order::lt to handle parse errors properly
|
||||
for (dep_v, stab_v) in iter::zip(
|
||||
dep_since.as_str().split('.'),
|
||||
[stab_since.major, stab_since.minor, stab_since.patch],
|
||||
) {
|
||||
match dep_v.parse::<u64>() {
|
||||
Ok(dep_vp) => match dep_vp.cmp(&u64::from(stab_v)) {
|
||||
Ordering::Less => {
|
||||
self.tcx.sess.emit_err(errors::CannotStabilizeDeprecated {
|
||||
span,
|
||||
item_sp,
|
||||
});
|
||||
break;
|
||||
}
|
||||
Ordering::Equal => continue,
|
||||
Ordering::Greater => break,
|
||||
},
|
||||
Err(_) => {
|
||||
if dep_v != "TBD" {
|
||||
self.tcx.sess.emit_err(errors::InvalidDeprecationVersion {
|
||||
span,
|
||||
item_sp,
|
||||
});
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
if dep_since < stab_since {
|
||||
self.tcx
|
||||
.sess
|
||||
.emit_err(errors::CannotStabilizeDeprecated { span, item_sp });
|
||||
}
|
||||
}
|
||||
StableSince::Err => {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue