mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
style: Move some parsing-only attributes to use #[parse(..)] instead of #[css(..)].
I need to admit I'm ambivalent about this one :). Bug: 1466609 Reviewed-by: xidorn MozReview-Commit-ID: F1jlfnQKXwo
This commit is contained in:
parent
8821ad72f4
commit
2c0a19e517
8 changed files with 39 additions and 29 deletions
|
@ -4,10 +4,17 @@
|
|||
|
||||
use cg;
|
||||
use quote::Tokens;
|
||||
use syn::DeriveInput;
|
||||
use syn::{DeriveInput, Path};
|
||||
use synstructure;
|
||||
use to_css::CssVariantAttrs;
|
||||
|
||||
#[darling(attributes(parse), default)]
|
||||
#[derive(Default, FromVariant)]
|
||||
pub struct ParseVariantAttrs {
|
||||
pub aliases: Option<String>,
|
||||
pub condition: Option<Path>,
|
||||
}
|
||||
|
||||
pub fn derive(input: DeriveInput) -> Tokens {
|
||||
let name = &input.ident;
|
||||
let s = synstructure::Structure::new(&input);
|
||||
|
@ -20,18 +27,21 @@ pub fn derive(input: DeriveInput) -> Tokens {
|
|||
"Parse is only supported for single-variant enums for now"
|
||||
);
|
||||
|
||||
let variant_attrs = cg::parse_variant_attrs_from_ast::<CssVariantAttrs>(&variant.ast());
|
||||
if variant_attrs.skip {
|
||||
let css_variant_attrs =
|
||||
cg::parse_variant_attrs_from_ast::<CssVariantAttrs>(&variant.ast());
|
||||
let parse_attrs =
|
||||
cg::parse_variant_attrs_from_ast::<ParseVariantAttrs>(&variant.ast());
|
||||
if css_variant_attrs.skip {
|
||||
return match_body;
|
||||
}
|
||||
|
||||
let identifier = cg::to_css_identifier(
|
||||
&variant_attrs.keyword.unwrap_or(variant.ast().ident.as_ref().into()),
|
||||
&css_variant_attrs.keyword.unwrap_or(variant.ast().ident.as_ref().into()),
|
||||
);
|
||||
let ident = &variant.ast().ident;
|
||||
|
||||
saw_condition |= variant_attrs.parse_condition.is_some();
|
||||
let condition = match variant_attrs.parse_condition {
|
||||
saw_condition |= parse_attrs.condition.is_some();
|
||||
let condition = match parse_attrs.condition {
|
||||
Some(ref p) => quote! { if #p(context) },
|
||||
None => quote! { },
|
||||
};
|
||||
|
@ -41,7 +51,7 @@ pub fn derive(input: DeriveInput) -> Tokens {
|
|||
#identifier #condition => Ok(#name::#ident),
|
||||
};
|
||||
|
||||
let aliases = match variant_attrs.aliases {
|
||||
let aliases = match parse_attrs.aliases {
|
||||
Some(aliases) => aliases,
|
||||
None => return body,
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue