From af7ebb043eac0e348b7b49b2abb0c0d8a75aa5d3 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Tue, 26 Nov 2024 09:32:31 -0500 Subject: [PATCH] tidy up --- .../phases/2-analyze/css/css-prune.js | 73 +++++++++---------- 1 file changed, 34 insertions(+), 39 deletions(-) diff --git a/packages/svelte/src/compiler/phases/2-analyze/css/css-prune.js b/packages/svelte/src/compiler/phases/2-analyze/css/css-prune.js index ea2e1b0a8c..2ab9dcf41b 100644 --- a/packages/svelte/src/compiler/phases/2-analyze/css/css-prune.js +++ b/packages/svelte/src/compiler/phases/2-analyze/css/css-prune.js @@ -55,38 +55,37 @@ const nesting_selector = { * @param {Compiler.AST.RegularElement | Compiler.AST.SvelteElement} element */ export function prune(stylesheet, element) { - walk(stylesheet, { element }, visitors); -} + const state = { element }; + + walk(/** @type {Compiler.Css.Node} */ (stylesheet), state, { + Rule(node, context) { + if (node.metadata.is_global_block) { + context.visit(node.prelude); + } else { + context.next(); + } + }, + ComplexSelector(node, context) { + const selectors = get_relative_selectors(node); + + if ( + apply_selector( + selectors, + /** @type {Compiler.Css.Rule} */ (node.metadata.rule), + context.state.element, + context.state + ) + ) { + mark(selectors[selectors.length - 1], context.state.element); + node.metadata.used = true; + } -/** @type {Visitors} */ -const visitors = { - Rule(node, context) { - if (node.metadata.is_global_block) { - context.visit(node.prelude); - } else { - context.next(); - } - }, - ComplexSelector(node, context) { - const selectors = get_relative_selectors(node); - - if ( - apply_selector( - selectors, - /** @type {Compiler.Css.Rule} */ (node.metadata.rule), - context.state.element, - context.state - ) - ) { - mark(selectors[selectors.length - 1], context.state.element); - node.metadata.used = true; + // note: we don't call context.next() here, we only recurse into + // selectors that don't belong to rules (i.e. inside `:is(...)` etc) + // when we encounter them below } - - // note: we don't call context.next() here, we only recurse into - // selectors that don't belong to rules (i.e. inside `:is(...)` etc) - // when we encounter them below - } -}; + }); +} /** * Retrieves the relative selectors (minus the trailing globals) from a complex selector. @@ -103,16 +102,12 @@ function get_relative_selectors(node) { // nesting could be inside pseudo classes like :is, :has or :where for (let selector of selectors) { - walk( - selector, - {}, - { - // @ts-ignore - NestingSelector() { - has_explicit_nesting_selector = true; - } + walk(selector, null, { + // @ts-ignore + NestingSelector() { + has_explicit_nesting_selector = true; } - ); + }); // if we found one we can break from the others if (has_explicit_nesting_selector) break; }