diff --git a/src/shady-css/parser.ts b/src/shady-css/parser.ts index 9310b80..037da4d 100644 --- a/src/shady-css/parser.ts +++ b/src/shady-css/parser.ts @@ -131,7 +131,7 @@ class Parser { } while (tokenizer.currentToken && - tokenizer.currentToken.is(TokenType.boundary)) { + tokenizer.currentToken.is(TokenType.semicolon)) { end = tokenizer.advance(); } diff --git a/src/test/fixtures.ts b/src/test/fixtures.ts index db841f1..41e7696 100644 --- a/src/test/fixtures.ts +++ b/src/test/fixtures.ts @@ -68,6 +68,8 @@ div { export const minifiedRuleset = '.foo{bar:baz}div .qux{vim:fet;}'; +export const minifiedRulesetWithExtraSemicolons = '.foo{bar:baz;;}div .qux{vim:fet;}'; + export const psuedoRuleset = '.foo:bar:not(#rif){baz:qux}'; export const dataUriRuleset = '.foo{bar:url(qux;gib)}'; diff --git a/src/test/parser-test.ts b/src/test/parser-test.ts index aded6c0..ca45cfe 100644 --- a/src/test/parser-test.ts +++ b/src/test/parser-test.ts @@ -183,6 +183,18 @@ describe('Parser', () => { ])) ])); }); + + it('can parse minified rulelists with extra semicolons', () => { + expect(parser.parse(fixtures.minifiedRulesetWithExtraSemicolons)) + .to.containSubset(nodeFactory.stylesheet([ + nodeFactory.ruleset( + '.foo', nodeFactory.rulelist([nodeFactory.declaration( + 'bar', nodeFactory.expression('baz'))])), + nodeFactory.ruleset( + 'div .qux', nodeFactory.rulelist([nodeFactory.declaration( + 'vim', nodeFactory.expression('fet'))])) + ])); + }); }); describe('when extracting ranges', () => {