From 78df10020fbc1b4844358277cd1b15dca0e08cca Mon Sep 17 00:00:00 2001 From: Robin Malfait Date: Sun, 16 Aug 2020 14:39:35 +0200 Subject: [PATCH] hoist the selector parser No need to re-create the selector parser in the loop for each selector. --- src/flagged/applyComplexClasses.js | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-) diff --git a/src/flagged/applyComplexClasses.js b/src/flagged/applyComplexClasses.js index e2fbfd758..11cb3237a 100644 --- a/src/flagged/applyComplexClasses.js +++ b/src/flagged/applyComplexClasses.js @@ -25,24 +25,20 @@ const tailwindApplyPlaceholder = selectorParser.attribute({ }) function generateRulesFromApply({ rule, utilityName: className, classPosition }, replaceWith) { - const processedSelectors = rule.selectors.map(selector => { - const processor = selectorParser(selectors => { - let i = 0 - selectors.walkClasses(c => { - if (classPosition === i++ && c.value === className) { - c.replaceWith(tailwindApplyPlaceholder) - } - }) + const processor = selectorParser(selectors => { + let i = 0 + selectors.walkClasses(c => { + if (classPosition === i++ && c.value === className) { + c.replaceWith(tailwindApplyPlaceholder) + } }) + }) + const processedSelectors = rule.selectors.map(selector => { // You could argue we should make this replacement at the AST level, but if we believe // the placeholder string is safe from collisions then it is safe to do this is a simple // string replacement, and much, much faster. - const processedSelector = processor - .processSync(selector) - .replace('[__TAILWIND-APPLY-PLACEHOLDER__]', replaceWith) - - return processedSelector + return processor.processSync(selector).replace('[__TAILWIND-APPLY-PLACEHOLDER__]', replaceWith) }) const cloned = rule.clone()