diff options
| author | Mazdak Farrokhzad <twingoow@gmail.com> | 2019-12-31 07:15:43 +0100 |
|---|---|---|
| committer | Mazdak Farrokhzad <twingoow@gmail.com> | 2020-02-13 10:44:44 +0100 |
| commit | 4f17dce4dc722e56d5d5069e7317feb17c1de5cc (patch) | |
| tree | 5c06c2df01c3116a1c07edce2dca7651d8ade946 | |
| parent | 2e6eaceedeeda764056eb0e2134735793533770d (diff) | |
| download | rust-4f17dce4dc722e56d5d5069e7317feb17c1de5cc.tar.gz rust-4f17dce4dc722e56d5d5069e7317feb17c1de5cc.zip | |
StripUnconfigured::in_cfg: simplify with slice patterns
| -rw-r--r-- | src/librustc_parse/config.rs | 52 |
1 files changed, 16 insertions, 36 deletions
diff --git a/src/librustc_parse/config.rs b/src/librustc_parse/config.rs index 8dec64c579e..3c37501be41 100644 --- a/src/librustc_parse/config.rs +++ b/src/librustc_parse/config.rs @@ -347,7 +347,13 @@ impl<'a> StripUnconfigured<'a> { if !is_cfg(attr) { 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 mut err = self.sess.span_diagnostic.struct_span_err(span, msg); if !suggestion.is_empty() { @@ -361,41 +367,15 @@ impl<'a> StripUnconfigured<'a> { err.emit(); 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 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", - "", - ), + let span = meta_item.span; + match meta_item.meta_item_list() { + None => error(span, "`cfg` is not followed by parentheses", "cfg(/* predicate */)"), + Some([]) => error(span, "`cfg` predicate is not specified", ""), + Some([_, .., l]) => error(l.span(), "multiple `cfg` predicates are specified", ""), + 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", ""), + }, } }) } |
