summaryrefslogtreecommitdiffstats
path: root/compiler/rustc_macros/src/hash_stable.rs
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/rustc_macros/src/hash_stable.rs')
-rw-r--r--compiler/rustc_macros/src/hash_stable.rs45
1 files changed, 21 insertions, 24 deletions
diff --git a/compiler/rustc_macros/src/hash_stable.rs b/compiler/rustc_macros/src/hash_stable.rs
index 63bdcea87..75a2f7009 100644
--- a/compiler/rustc_macros/src/hash_stable.rs
+++ b/compiler/rustc_macros/src/hash_stable.rs
@@ -1,6 +1,6 @@
use proc_macro2::{self, Ident};
use quote::quote;
-use syn::{self, parse_quote, Meta, NestedMeta};
+use syn::{self, parse_quote};
struct Attributes {
ignore: bool,
@@ -10,32 +10,29 @@ struct Attributes {
fn parse_attributes(field: &syn::Field) -> Attributes {
let mut attrs = Attributes { ignore: false, project: None };
for attr in &field.attrs {
- if let Ok(meta) = attr.parse_meta() {
- if !meta.path().is_ident("stable_hasher") {
- continue;
+ let meta = &attr.meta;
+ if !meta.path().is_ident("stable_hasher") {
+ continue;
+ }
+ let mut any_attr = false;
+ let _ = attr.parse_nested_meta(|nested| {
+ if nested.path.is_ident("ignore") {
+ attrs.ignore = true;
+ any_attr = true;
}
- let mut any_attr = false;
- if let Meta::List(list) = meta {
- for nested in list.nested.iter() {
- if let NestedMeta::Meta(meta) = nested {
- if meta.path().is_ident("ignore") {
- attrs.ignore = true;
- any_attr = true;
- }
- if meta.path().is_ident("project") {
- if let Meta::List(list) = meta {
- if let Some(NestedMeta::Meta(meta)) = list.nested.iter().next() {
- attrs.project = meta.path().get_ident().cloned();
- any_attr = true;
- }
- }
- }
+ if nested.path.is_ident("project") {
+ let _ = nested.parse_nested_meta(|meta| {
+ if attrs.project.is_none() {
+ attrs.project = meta.path.get_ident().cloned();
}
- }
- }
- if !any_attr {
- panic!("error parsing stable_hasher");
+ any_attr = true;
+ Ok(())
+ });
}
+ Ok(())
+ });
+ if !any_attr {
+ panic!("error parsing stable_hasher");
}
}
attrs