Skip to content

Commit 4f17dce

Browse files
committed
StripUnconfigured::in_cfg: simplify with slice patterns
1 parent 2e6eace commit 4f17dce

File tree

1 file changed

+16
-36
lines changed

1 file changed

+16
-36
lines changed

src/librustc_parse/config.rs

Lines changed: 16 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -347,7 +347,13 @@ impl<'a> StripUnconfigured<'a> {
347347
if !is_cfg(attr) {
348348
return true;
349349
}
350-
350+
let meta_item = match validate_attr::parse_meta(self.sess, attr) {
351+
Ok(meta_item) => meta_item,
352+
Err(mut err) => {
353+
err.emit();
354+
return true;
355+
}
356+
};
351357
let error = |span, msg, suggestion: &str| {
352358
let mut err = self.sess.span_diagnostic.struct_span_err(span, msg);
353359
if !suggestion.is_empty() {
@@ -361,41 +367,15 @@ impl<'a> StripUnconfigured<'a> {
361367
err.emit();
362368
true
363369
};
364-
365-
let meta_item = match validate_attr::parse_meta(self.sess, attr) {
366-
Ok(meta_item) => meta_item,
367-
Err(mut err) => {
368-
err.emit();
369-
return true;
370-
}
371-
};
372-
let nested_meta_items = if let Some(nested_meta_items) = meta_item.meta_item_list() {
373-
nested_meta_items
374-
} else {
375-
return error(
376-
meta_item.span,
377-
"`cfg` is not followed by parentheses",
378-
"cfg(/* predicate */)",
379-
);
380-
};
381-
382-
if nested_meta_items.is_empty() {
383-
return error(meta_item.span, "`cfg` predicate is not specified", "");
384-
} else if nested_meta_items.len() > 1 {
385-
return error(
386-
nested_meta_items.last().unwrap().span(),
387-
"multiple `cfg` predicates are specified",
388-
"",
389-
);
390-
}
391-
392-
match nested_meta_items[0].meta_item() {
393-
Some(meta_item) => attr::cfg_matches(meta_item, self.sess, self.features),
394-
None => error(
395-
nested_meta_items[0].span(),
396-
"`cfg` predicate key cannot be a literal",
397-
"",
398-
),
370+
let span = meta_item.span;
371+
match meta_item.meta_item_list() {
372+
None => error(span, "`cfg` is not followed by parentheses", "cfg(/* predicate */)"),
373+
Some([]) => error(span, "`cfg` predicate is not specified", ""),
374+
Some([_, .., l]) => error(l.span(), "multiple `cfg` predicates are specified", ""),
375+
Some([single]) => match single.meta_item() {
376+
Some(meta_item) => attr::cfg_matches(meta_item, self.sess, self.features),
377+
None => error(single.span(), "`cfg` predicate key cannot be a literal", ""),
378+
},
399379
}
400380
})
401381
}

0 commit comments

Comments
 (0)