Extract common logic for iterating over features
Two places doing the same thing is enough to motivate me to extract this to a method :)
This commit is contained in:
parent
5c7ae0c7ed
commit
a5c9030271
3 changed files with 13 additions and 11 deletions
|
|
@ -622,11 +622,7 @@ fn maybe_stage_features(sess: &Session, features: &Features, krate: &ast::Crate)
|
|||
}
|
||||
|
||||
fn check_incompatible_features(sess: &Session, features: &Features) {
|
||||
let enabled_lang_features =
|
||||
features.enabled_lang_features().iter().map(|feat| (feat.gate_name, feat.attr_sp));
|
||||
let enabled_lib_features =
|
||||
features.enabled_lib_features().iter().map(|feat| (feat.gate_name, feat.attr_sp));
|
||||
let enabled_features = enabled_lang_features.chain(enabled_lib_features);
|
||||
let enabled_features = features.enabled_features_iter_stable_order();
|
||||
|
||||
for (f1, f2) in rustc_feature::INCOMPATIBLE_FEATURES
|
||||
.iter()
|
||||
|
|
|
|||
|
|
@ -93,6 +93,16 @@ impl Features {
|
|||
&self.enabled_features
|
||||
}
|
||||
|
||||
/// Returns a iterator of enabled features in stable order.
|
||||
pub fn enabled_features_iter_stable_order(
|
||||
&self,
|
||||
) -> impl Iterator<Item = (Symbol, Span)> + Clone {
|
||||
self.enabled_lang_features
|
||||
.iter()
|
||||
.map(|feat| (feat.gate_name, feat.attr_sp))
|
||||
.chain(self.enabled_lib_features.iter().map(|feat| (feat.gate_name, feat.attr_sp)))
|
||||
}
|
||||
|
||||
/// Is the given feature enabled (via `#[feature(...)]`)?
|
||||
pub fn enabled(&self, feature: Symbol) -> bool {
|
||||
self.enabled_features.contains(&feature)
|
||||
|
|
|
|||
|
|
@ -2331,13 +2331,9 @@ declare_lint_pass!(
|
|||
impl EarlyLintPass for IncompleteInternalFeatures {
|
||||
fn check_crate(&mut self, cx: &EarlyContext<'_>, _: &ast::Crate) {
|
||||
let features = cx.builder.features();
|
||||
let lang_features =
|
||||
features.enabled_lang_features().iter().map(|feat| (feat.gate_name, feat.attr_sp));
|
||||
let lib_features =
|
||||
features.enabled_lib_features().iter().map(|feat| (feat.gate_name, feat.attr_sp));
|
||||
|
||||
lang_features
|
||||
.chain(lib_features)
|
||||
features
|
||||
.enabled_features_iter_stable_order()
|
||||
.filter(|(name, _)| features.incomplete(*name) || features.internal(*name))
|
||||
.for_each(|(name, span)| {
|
||||
if features.incomplete(name) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue