mirror of
https://github.com/servo/servo.git
synced 2025-08-06 06:00:15 +01:00
style: Augment CSS errors with the CSS selector.
Differential Revision: https://phabricator.services.mozilla.com/D24894
This commit is contained in:
parent
4fbbcdddbe
commit
5a55978478
3 changed files with 13 additions and 7 deletions
|
@ -10,12 +10,14 @@ use crate::stylesheets::UrlExtraData;
|
||||||
use cssparser::{BasicParseErrorKind, ParseErrorKind, SourceLocation, Token};
|
use cssparser::{BasicParseErrorKind, ParseErrorKind, SourceLocation, Token};
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
use style_traits::ParseError;
|
use style_traits::ParseError;
|
||||||
|
use crate::selector_parser::{SelectorImpl};
|
||||||
|
use selectors::SelectorList;
|
||||||
|
|
||||||
/// Errors that can be encountered while parsing CSS.
|
/// Errors that can be encountered while parsing CSS.
|
||||||
#[derive(Debug)]
|
#[derive(Debug)]
|
||||||
pub enum ContextualParseError<'a> {
|
pub enum ContextualParseError<'a> {
|
||||||
/// A property declaration was not recognized.
|
/// A property declaration was not recognized.
|
||||||
UnsupportedPropertyDeclaration(&'a str, ParseError<'a>),
|
UnsupportedPropertyDeclaration(&'a str, ParseError<'a>, Option<&'a SelectorList<SelectorImpl>>),
|
||||||
/// A font face descriptor was not recognized.
|
/// A font face descriptor was not recognized.
|
||||||
UnsupportedFontFaceDescriptor(&'a str, ParseError<'a>),
|
UnsupportedFontFaceDescriptor(&'a str, ParseError<'a>),
|
||||||
/// A font feature values descriptor was not recognized.
|
/// A font feature values descriptor was not recognized.
|
||||||
|
@ -121,7 +123,7 @@ impl<'a> fmt::Display for ContextualParseError<'a> {
|
||||||
}
|
}
|
||||||
|
|
||||||
match *self {
|
match *self {
|
||||||
ContextualParseError::UnsupportedPropertyDeclaration(decl, ref err) => {
|
ContextualParseError::UnsupportedPropertyDeclaration(decl, ref err, _selectors) => {
|
||||||
write!(f, "Unsupported property declaration: '{}', ", decl)?;
|
write!(f, "Unsupported property declaration: '{}', ", decl)?;
|
||||||
parse_error_to_str(err, f)
|
parse_error_to_str(err, f)
|
||||||
},
|
},
|
||||||
|
|
|
@ -25,6 +25,8 @@ use style_traits::{CssWriter, ParseError, ParsingMode, StyleParseErrorKind, ToCs
|
||||||
use crate::stylesheets::{CssRuleType, Origin, UrlExtraData};
|
use crate::stylesheets::{CssRuleType, Origin, UrlExtraData};
|
||||||
use super::*;
|
use super::*;
|
||||||
use crate::values::computed::Context;
|
use crate::values::computed::Context;
|
||||||
|
use crate::selector_parser::{SelectorImpl};
|
||||||
|
use selectors::SelectorList;
|
||||||
|
|
||||||
/// The animation rules.
|
/// The animation rules.
|
||||||
///
|
///
|
||||||
|
@ -1211,7 +1213,7 @@ pub fn parse_style_attribute(
|
||||||
);
|
);
|
||||||
|
|
||||||
let mut input = ParserInput::new(input);
|
let mut input = ParserInput::new(input);
|
||||||
parse_property_declaration_list(&context, &mut Parser::new(&mut input))
|
parse_property_declaration_list(&context, &mut Parser::new(&mut input), None)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Parse a given property declaration. Can result in multiple
|
/// Parse a given property declaration. Can result in multiple
|
||||||
|
@ -1248,6 +1250,7 @@ pub fn parse_one_declaration_into(
|
||||||
let error = ContextualParseError::UnsupportedPropertyDeclaration(
|
let error = ContextualParseError::UnsupportedPropertyDeclaration(
|
||||||
parser.slice_from(start_position),
|
parser.slice_from(start_position),
|
||||||
err,
|
err,
|
||||||
|
None
|
||||||
);
|
);
|
||||||
context.log_css_error(location, error);
|
context.log_css_error(location, error);
|
||||||
})
|
})
|
||||||
|
@ -1312,6 +1315,7 @@ impl<'a, 'b, 'i> DeclarationParser<'i> for PropertyDeclarationParser<'a, 'b> {
|
||||||
pub fn parse_property_declaration_list(
|
pub fn parse_property_declaration_list(
|
||||||
context: &ParserContext,
|
context: &ParserContext,
|
||||||
input: &mut Parser,
|
input: &mut Parser,
|
||||||
|
selectors: Option<&SelectorList<SelectorImpl>>
|
||||||
) -> PropertyDeclarationBlock {
|
) -> PropertyDeclarationBlock {
|
||||||
let mut declarations = SourcePropertyDeclaration::new();
|
let mut declarations = SourcePropertyDeclaration::new();
|
||||||
let mut block = PropertyDeclarationBlock::new();
|
let mut block = PropertyDeclarationBlock::new();
|
||||||
|
@ -1338,7 +1342,7 @@ pub fn parse_property_declaration_list(
|
||||||
}
|
}
|
||||||
|
|
||||||
let location = error.location;
|
let location = error.location;
|
||||||
let error = ContextualParseError::UnsupportedPropertyDeclaration(slice, error);
|
let error = ContextualParseError::UnsupportedPropertyDeclaration(slice, error, selectors);
|
||||||
context.log_css_error(location, error);
|
context.log_css_error(location, error);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,7 +9,7 @@ use crate::error_reporting::ContextualParseError;
|
||||||
use crate::font_face::parse_font_face_block;
|
use crate::font_face::parse_font_face_block;
|
||||||
use crate::media_queries::MediaList;
|
use crate::media_queries::MediaList;
|
||||||
use crate::parser::{Parse, ParserContext};
|
use crate::parser::{Parse, ParserContext};
|
||||||
use crate::properties::parse_property_declaration_list;
|
use crate::properties::{parse_property_declaration_list};
|
||||||
use crate::selector_parser::{SelectorImpl, SelectorParser};
|
use crate::selector_parser::{SelectorImpl, SelectorParser};
|
||||||
use crate::shared_lock::{Locked, SharedRwLock};
|
use crate::shared_lock::{Locked, SharedRwLock};
|
||||||
use crate::str::starts_with_ignore_ascii_case;
|
use crate::str::starts_with_ignore_ascii_case;
|
||||||
|
@ -548,7 +548,7 @@ impl<'a, 'b, 'i> AtRuleParser<'i> for NestedRuleParser<'a, 'b> {
|
||||||
self.namespaces,
|
self.namespaces,
|
||||||
);
|
);
|
||||||
|
|
||||||
let declarations = parse_property_declaration_list(&context, input);
|
let declarations = parse_property_declaration_list(&context, input, None);
|
||||||
Ok(CssRule::Page(Arc::new(self.shared_lock.wrap(PageRule {
|
Ok(CssRule::Page(Arc::new(self.shared_lock.wrap(PageRule {
|
||||||
block: Arc::new(self.shared_lock.wrap(declarations)),
|
block: Arc::new(self.shared_lock.wrap(declarations)),
|
||||||
source_location,
|
source_location,
|
||||||
|
@ -596,7 +596,7 @@ impl<'a, 'b, 'i> QualifiedRuleParser<'i> for NestedRuleParser<'a, 'b> {
|
||||||
let context =
|
let context =
|
||||||
ParserContext::new_with_rule_type(self.context, CssRuleType::Style, self.namespaces);
|
ParserContext::new_with_rule_type(self.context, CssRuleType::Style, self.namespaces);
|
||||||
|
|
||||||
let declarations = parse_property_declaration_list(&context, input);
|
let declarations = parse_property_declaration_list(&context, input, Some(&selectors));
|
||||||
let block = Arc::new(self.shared_lock.wrap(declarations));
|
let block = Arc::new(self.shared_lock.wrap(declarations));
|
||||||
Ok(CssRule::Style(Arc::new(self.shared_lock.wrap(StyleRule {
|
Ok(CssRule::Style(Arc::new(self.shared_lock.wrap(StyleRule {
|
||||||
selectors,
|
selectors,
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue