Ease the transition to requiring features by just warning if there's no feature list
while we could make this change (it's all unstable after all), there are crates.io crates that use the feature and that the compiler depends upon. We can instead roll out this feature while still supporting the old way.
This commit is contained in:
parent
d3c212c552
commit
33bf81eec0
3 changed files with 20 additions and 10 deletions
|
@ -379,14 +379,20 @@ pub fn compile(
|
||||||
let allow_internal_unstable = attr::find_by_name(&def.attrs, "allow_internal_unstable")
|
let allow_internal_unstable = attr::find_by_name(&def.attrs, "allow_internal_unstable")
|
||||||
.map_or(Vec::new(), |attr| attr
|
.map_or(Vec::new(), |attr| attr
|
||||||
.meta_item_list()
|
.meta_item_list()
|
||||||
.unwrap_or_else(|| sess.span_diagnostic.span_bug(
|
.map(|list| list.iter()
|
||||||
attr.span, "allow_internal_unstable expects list of feature names",
|
|
||||||
))
|
|
||||||
.iter()
|
|
||||||
.map(|it| it.name().unwrap_or_else(|| sess.span_diagnostic.span_bug(
|
.map(|it| it.name().unwrap_or_else(|| sess.span_diagnostic.span_bug(
|
||||||
it.span, "allow internal unstable expects feature names",
|
it.span, "allow internal unstable expects feature names",
|
||||||
)))
|
)))
|
||||||
.collect()
|
.collect()
|
||||||
|
)
|
||||||
|
.unwrap_or_else(|| {
|
||||||
|
sess.span_diagnostic.span_warn(
|
||||||
|
attr.span, "allow_internal_unstable expects list of feature names. In the \
|
||||||
|
future this will become a hard error. Please use `allow_internal_unstable(\
|
||||||
|
foo, bar)` to only allow the `foo` and `bar` features",
|
||||||
|
);
|
||||||
|
vec![Symbol::intern("allow_internal_unstable_backcompat_hack")]
|
||||||
|
})
|
||||||
);
|
);
|
||||||
let allow_internal_unsafe = attr::contains_name(&def.attrs, "allow_internal_unsafe");
|
let allow_internal_unsafe = attr::contains_name(&def.attrs, "allow_internal_unsafe");
|
||||||
let mut local_inner_macros = false;
|
let mut local_inner_macros = false;
|
||||||
|
|
|
@ -1091,7 +1091,8 @@ pub const BUILTIN_ATTRIBUTES: &[(&str, AttributeType, AttributeTemplate, Attribu
|
||||||
stable",
|
stable",
|
||||||
cfg_fn!(profiler_runtime))),
|
cfg_fn!(profiler_runtime))),
|
||||||
|
|
||||||
("allow_internal_unstable", Normal, template!(List: "feat1, feat2"), Gated(Stability::Unstable,
|
("allow_internal_unstable", Normal, template!(Word, List: "feat1, feat2"),
|
||||||
|
Gated(Stability::Unstable,
|
||||||
"allow_internal_unstable",
|
"allow_internal_unstable",
|
||||||
EXPLAIN_ALLOW_INTERNAL_UNSTABLE,
|
EXPLAIN_ALLOW_INTERNAL_UNSTABLE,
|
||||||
cfg_fn!(allow_internal_unstable))),
|
cfg_fn!(allow_internal_unstable))),
|
||||||
|
|
|
@ -387,7 +387,10 @@ impl Span {
|
||||||
/// `#[allow_internal_unstable]`).
|
/// `#[allow_internal_unstable]`).
|
||||||
pub fn allows_unstable(&self, feature: &str) -> bool {
|
pub fn allows_unstable(&self, feature: &str) -> bool {
|
||||||
match self.ctxt().outer().expn_info() {
|
match self.ctxt().outer().expn_info() {
|
||||||
Some(info) => info.allow_internal_unstable.iter().any(|&f| f == feature),
|
Some(info) => info
|
||||||
|
.allow_internal_unstable
|
||||||
|
.iter()
|
||||||
|
.any(|&f| f == feature || f == "allow_internal_unstable_backcompat_hack"),
|
||||||
None => false,
|
None => false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue