зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1538101 - Don't report errors for properties for which we've parsed another value in the same declaration block. r=jdm
I thought a bit about how to test it and it's not particularly great. test_css_parse_error_smoketest.html is great to assert that something _gets_ reported, but not that it doesn't :) Differential Revision: https://phabricator.services.mozilla.com/D30201 --HG-- extra : moz-landing-system : lando
This commit is contained in:
Родитель
c8d19bedcd
Коммит
1b7101750d
|
@ -1328,7 +1328,7 @@ type SmallParseErrorVec<'i> = SmallVec<[(ParseError<'i>, &'i str, Option<Propert
|
|||
#[cold]
|
||||
fn report_one_css_error<'i>(
|
||||
context: &ParserContext,
|
||||
_block: Option<&PropertyDeclarationBlock>,
|
||||
block: Option<&PropertyDeclarationBlock>,
|
||||
selectors: Option<&SelectorList<SelectorImpl>>,
|
||||
mut error: ParseError<'i>,
|
||||
slice: &str,
|
||||
|
@ -1336,6 +1336,21 @@ fn report_one_css_error<'i>(
|
|||
) {
|
||||
debug_assert!(context.error_reporting_enabled());
|
||||
|
||||
fn all_properties_in_block(block: &PropertyDeclarationBlock, property: &PropertyId) -> bool {
|
||||
match *property {
|
||||
PropertyId::LonghandAlias(id, _) |
|
||||
PropertyId::Longhand(id) => block.contains(id),
|
||||
PropertyId::ShorthandAlias(id, _) |
|
||||
PropertyId::Shorthand(id) => {
|
||||
id.longhands().all(|longhand| block.contains(longhand))
|
||||
},
|
||||
// NOTE(emilio): We could do this, but it seems of limited utility,
|
||||
// and it's linear on the size of the declaration block, so let's
|
||||
// not.
|
||||
PropertyId::Custom(..) => false,
|
||||
}
|
||||
}
|
||||
|
||||
// If the unrecognized property looks like a vendor-specific property,
|
||||
// silently ignore it instead of polluting the error output.
|
||||
if let ParseErrorKind::Custom(StyleParseErrorKind::UnknownVendorProperty) = error.kind {
|
||||
|
@ -1343,6 +1358,11 @@ fn report_one_css_error<'i>(
|
|||
}
|
||||
|
||||
if let Some(ref property) = property {
|
||||
if let Some(block) = block {
|
||||
if all_properties_in_block(block, property) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
error = match *property {
|
||||
PropertyId::Custom(ref c) => StyleParseErrorKind::new_invalid(format!("--{}", c), error),
|
||||
_ => StyleParseErrorKind::new_invalid(property.non_custom_id().unwrap().name(), error),
|
||||
|
|
Загрузка…
Ссылка в новой задаче