diff options
| author | Mazdak Farrokhzad <twingoow@gmail.com> | 2019-06-23 01:59:15 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-06-23 01:59:15 +0200 |
| commit | 869680736d98cb679c5056e3df3c8bb8b1c4272f (patch) | |
| tree | d375e09bf80ccdb993dac795e152c81218fe3f7f /src/libsyntax | |
| parent | de02101e6d949c4a9040211e9ce8c488a997497e (diff) | |
| parent | af710c9e79345497fdad53873f0acefa0e26fddf (diff) | |
| download | rust-869680736d98cb679c5056e3df3c8bb8b1c4272f.tar.gz rust-869680736d98cb679c5056e3df3c8bb8b1c4272f.zip | |
Rollup merge of #62047 - Centril:cfg-attr-empty-lint, r=estebank
Trigger `unused_attribute` lint on `#[cfg_attr($pred,)]` Lint on `#[cfg_attr($pred,)]` as decided in https://github.com/rust-lang/rust/issues/54881#issuecomment-441442173. Closes https://github.com/rust-lang/rust/issues/54881. r? @estebank
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/config.rs | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/src/libsyntax/config.rs b/src/libsyntax/config.rs index 3b42e1de614..1ab367f73c1 100644 --- a/src/libsyntax/config.rs +++ b/src/libsyntax/config.rs @@ -91,10 +91,10 @@ impl<'a> StripUnconfigured<'a> { /// is in the original source file. Gives a compiler error if the syntax of /// the attribute is incorrect. fn process_cfg_attr(&mut self, attr: ast::Attribute) -> Vec<ast::Attribute> { - if !attr.check_name(sym::cfg_attr) { + if attr.path != sym::cfg_attr { return vec![attr]; } - if attr.tokens.len() == 0 { + if attr.tokens.is_empty() { self.sess.span_diagnostic .struct_span_err( attr.span, @@ -108,7 +108,7 @@ impl<'a> StripUnconfigured<'a> { <https://doc.rust-lang.org/reference/conditional-compilation.html\ #the-cfg_attr-attribute>") .emit(); - return Vec::new(); + return vec![]; } let (cfg_predicate, expanded_attrs) = match attr.parse(self.sess, |parser| { @@ -133,17 +133,18 @@ impl<'a> StripUnconfigured<'a> { Ok(result) => result, Err(mut e) => { e.emit(); - return Vec::new(); + return vec![]; } }; - // Check feature gate and lint on zero attributes in source. Even if the feature is gated, - // we still compute as if it wasn't, since the emitted error will stop compilation further - // along the compilation. - if expanded_attrs.len() == 0 { - // FIXME: Emit unused attribute lint here. + // Lint on zero attributes in source. + if expanded_attrs.is_empty() { + return vec![attr]; } + // At this point we know the attribute is considered used. + attr::mark_used(&attr); + if attr::cfg_matches(&cfg_predicate, self.sess, self.features) { // We call `process_cfg_attr` recursively in case there's a // `cfg_attr` inside of another `cfg_attr`. E.g. @@ -159,7 +160,7 @@ impl<'a> StripUnconfigured<'a> { })) .collect() } else { - Vec::new() + vec![] } } |
