StripUnconfigured::in_cfg: simplify with slice patterns
This commit is contained in:
parent
2e6eaceede
commit
4f17dce4dc
1 changed files with 16 additions and 36 deletions
|
@ -347,7 +347,13 @@ impl<'a> StripUnconfigured<'a> {
|
||||||
if !is_cfg(attr) {
|
if !is_cfg(attr) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
let meta_item = match validate_attr::parse_meta(self.sess, attr) {
|
||||||
|
Ok(meta_item) => meta_item,
|
||||||
|
Err(mut err) => {
|
||||||
|
err.emit();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
let error = |span, msg, suggestion: &str| {
|
let error = |span, msg, suggestion: &str| {
|
||||||
let mut err = self.sess.span_diagnostic.struct_span_err(span, msg);
|
let mut err = self.sess.span_diagnostic.struct_span_err(span, msg);
|
||||||
if !suggestion.is_empty() {
|
if !suggestion.is_empty() {
|
||||||
|
@ -361,41 +367,15 @@ impl<'a> StripUnconfigured<'a> {
|
||||||
err.emit();
|
err.emit();
|
||||||
true
|
true
|
||||||
};
|
};
|
||||||
|
let span = meta_item.span;
|
||||||
let meta_item = match validate_attr::parse_meta(self.sess, attr) {
|
match meta_item.meta_item_list() {
|
||||||
Ok(meta_item) => meta_item,
|
None => error(span, "`cfg` is not followed by parentheses", "cfg(/* predicate */)"),
|
||||||
Err(mut err) => {
|
Some([]) => error(span, "`cfg` predicate is not specified", ""),
|
||||||
err.emit();
|
Some([_, .., l]) => error(l.span(), "multiple `cfg` predicates are specified", ""),
|
||||||
return true;
|
Some([single]) => match single.meta_item() {
|
||||||
}
|
Some(meta_item) => attr::cfg_matches(meta_item, self.sess, self.features),
|
||||||
};
|
None => error(single.span(), "`cfg` predicate key cannot be a literal", ""),
|
||||||
let nested_meta_items = if let Some(nested_meta_items) = meta_item.meta_item_list() {
|
},
|
||||||
nested_meta_items
|
|
||||||
} else {
|
|
||||||
return error(
|
|
||||||
meta_item.span,
|
|
||||||
"`cfg` is not followed by parentheses",
|
|
||||||
"cfg(/* predicate */)",
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
if nested_meta_items.is_empty() {
|
|
||||||
return error(meta_item.span, "`cfg` predicate is not specified", "");
|
|
||||||
} else if nested_meta_items.len() > 1 {
|
|
||||||
return error(
|
|
||||||
nested_meta_items.last().unwrap().span(),
|
|
||||||
"multiple `cfg` predicates are specified",
|
|
||||||
"",
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
match nested_meta_items[0].meta_item() {
|
|
||||||
Some(meta_item) => attr::cfg_matches(meta_item, self.sess, self.features),
|
|
||||||
None => error(
|
|
||||||
nested_meta_items[0].span(),
|
|
||||||
"`cfg` predicate key cannot be a literal",
|
|
||||||
"",
|
|
||||||
),
|
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue