rustfmt_config_proc_macro/
attrs.rs1pub fn find_doc_hint(attrs: &[syn::Attribute]) -> Option<String> {
12 attrs.iter().filter_map(doc_hint).next()
13}
14
15pub fn is_doc_hint(attr: &syn::Attribute) -> bool {
17 is_attr_name_value(attr, "doc_hint")
18}
19
20pub fn doc_hint(attr: &syn::Attribute) -> Option<String> {
23 get_name_value_str_lit(attr, "doc_hint")
24}
25
26pub fn find_config_value(attrs: &[syn::Attribute]) -> Option<String> {
29 attrs.iter().filter_map(config_value).next()
30}
31
32pub fn any_unstable_variant(attrs: &[syn::Attribute]) -> bool {
34 attrs.iter().any(is_unstable_variant)
35}
36
37pub fn config_value(attr: &syn::Attribute) -> Option<String> {
40 get_name_value_str_lit(attr, "value")
41}
42
43pub fn is_config_value(attr: &syn::Attribute) -> bool {
45 is_attr_name_value(attr, "value")
46}
47
48pub fn is_unstable_variant(attr: &syn::Attribute) -> bool {
50 is_attr_path(attr, "unstable_variant")
51}
52
53fn is_attr_name_value(attr: &syn::Attribute, name: &str) -> bool {
54 match &attr.meta {
55 syn::Meta::NameValue(syn::MetaNameValue { path, .. }) if path.is_ident(name) => true,
56 _ => false,
57 }
58}
59
60fn is_attr_path(attr: &syn::Attribute, name: &str) -> bool {
61 match &attr.meta {
62 syn::Meta::Path(path) if path.is_ident(name) => true,
63 _ => false,
64 }
65}
66
67fn get_name_value_str_lit(attr: &syn::Attribute, name: &str) -> Option<String> {
68 match &attr.meta {
69 syn::Meta::NameValue(syn::MetaNameValue {
70 path,
71 value:
72 syn::Expr::Lit(syn::ExprLit {
73 lit: syn::Lit::Str(lit_str),
74 ..
75 }),
76 ..
77 }) if path.is_ident(name) => Some(lit_str.value()),
78 _ => None,
79 }
80}