Bug 1468846: Qualifier::parse. r?xidorn draft
authorEmilio Cobos Álvarez <emilio@crisal.io>
Thu, 14 Jun 2018 13:38:47 -0700
changeset 807545 2977b2c194690648e569c2d04ba26641e049b118
parent 807544 e92f5e6a811e5b43997dbd7747793328aede2bdf
child 807546 7d909a1b1529e29036420e197f1a25db0b90ccc0
push id113143
push userbmo:emilio@crisal.io
push dateThu, 14 Jun 2018 21:16:25 +0000
reviewersxidorn
bugs1468846
milestone62.0a1
Bug 1468846: Qualifier::parse. r?xidorn MozReview-Commit-ID: 4IOJpaS9ijI
servo/components/style/media_queries/mod.rs
--- a/servo/components/style/media_queries/mod.rs
+++ b/servo/components/style/media_queries/mod.rs
@@ -19,17 +19,17 @@ mod media_list;
 
 pub use self::media_list::MediaList;
 #[cfg(feature = "servo")]
 pub use servo::media_queries::{Device, Expression};
 #[cfg(feature = "gecko")]
 pub use gecko::media_queries::{Device, Expression};
 
 /// <https://drafts.csswg.org/mediaqueries/#mq-prefix>
-#[derive(Clone, Copy, Debug, Eq, MallocSizeOf, PartialEq, ToCss)]
+#[derive(Clone, Copy, Debug, Eq, MallocSizeOf, PartialEq, Parse, ToCss)]
 pub enum Qualifier {
     /// Hide a media query from legacy UAs:
     /// <https://drafts.csswg.org/mediaqueries/#mq-only>
     Only,
     /// Negate a media query:
     /// <https://drafts.csswg.org/mediaqueries/#mq-not>
     Not,
 }
@@ -163,30 +163,17 @@ impl MediaQuery {
     ///
     /// Returns an error if any of the expressions is unknown.
     pub fn parse<'i, 't>(
         context: &ParserContext,
         input: &mut Parser<'i, 't>,
     ) -> Result<MediaQuery, ParseError<'i>> {
         let mut expressions = vec![];
 
-        let qualifier = if input
-            .try(|input| input.expect_ident_matching("only"))
-            .is_ok()
-        {
-            Some(Qualifier::Only)
-        } else if input
-            .try(|input| input.expect_ident_matching("not"))
-            .is_ok()
-        {
-            Some(Qualifier::Not)
-        } else {
-            None
-        };
-
+        let qualifier = input.try(Qualifier::parse).ok();
         let media_type = match input.try(|i| i.expect_ident_cloned()) {
             Ok(ident) => MediaQueryType::parse(&*ident).map_err(|()| {
                 input.new_custom_error(SelectorParseErrorKind::UnexpectedIdent(ident.clone()))
             })?,
             Err(_) => {
                 // Media type is only optional if qualifier is not specified.
                 if qualifier.is_some() {
                     return Err(input.new_custom_error(StyleParseErrorKind::UnspecifiedError));