From a9725113de6e815594f749c736294ee6beb6c0fd Mon Sep 17 00:00:00 2001 From: Jakub Pawlowicz Date: Thu, 22 Dec 2016 08:59:41 +0100 Subject: [PATCH] Fixes tokenizer edge case. If there is a semicolon marker after a property then the property ends and its reference should be discarded. Otherwise next tokens may get appended to the property. --- lib/tokenizer/tokenize.js | 1 + test/tokenizer/tokenize-test.js | 60 +++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) diff --git a/lib/tokenizer/tokenize.js b/lib/tokenizer/tokenize.js index a88ee38b..6ecad7f5 100644 --- a/lib/tokenizer/tokenize.js +++ b/lib/tokenizer/tokenize.js @@ -236,6 +236,7 @@ function intoTokens(source, externalContext, internalContext, isNested) { serializedBuffer = buffer.join('').trim(); propertyToken.push([Token.PROPERTY_VALUE, serializedBuffer, [originalMetadata(metadata, serializedBuffer, externalContext)]]); + propertyToken = null; seekingValue = false; buffer = []; } else if (character == Marker.SEMICOLON && level == Level.RULE && propertyToken && buffer.length === 0) { diff --git a/test/tokenizer/tokenize-test.js b/test/tokenizer/tokenize-test.js index 9bac5a3c..bd92ab92 100644 --- a/test/tokenizer/tokenize-test.js +++ b/test/tokenizer/tokenize-test.js @@ -1455,6 +1455,66 @@ vows.describe(tokenize) ] ] ], + '@apply - between properties': [ + 'a{display:block;@apply(--rule);color:red}', + [ + [ + 'rule', + [ + [ + 'rule-scope', + 'a', + [ + [1, 0, undefined] + ] + ] + ], + [ + [ + 'property', + [ + 'property-name', + 'display', + [ + [1, 2, undefined] + ] + ], + [ + 'property-value', + 'block', + [ + [1, 10, undefined] + ] + ] + ], + [ + 'at-rule', + '@apply(--rule)', + [ + [1, 16, undefined] + ] + ], + [ + 'property', + [ + 'property-name', + 'color', + [ + [1, 31, undefined] + ] + ], + [ + 'property-value', + 'red', + [ + [1, 37, undefined] + ] + ] + ] + ] + ] + ] + ], '@apply within a variable': [ ':root{--layout-horizontal:{@apply(--layout)};}', [ -- 2.34.1