From a94a3063b74c6aabe7ad26b5e5bd803fd7fa65a9 Mon Sep 17 00:00:00 2001 From: Jake Hotson Date: Thu, 5 Feb 2026 16:45:48 +0000 Subject: [PATCH] [TASK] Extract method `Selector::parseComponents` This will allow the conversion of a selector string into an array of `Selector\Component` objects to also be used by the `setSelector()` method. Part of #1325. --- src/Property/Selector.php | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/Property/Selector.php b/src/Property/Selector.php index e5a8c9de..dcecf387 100644 --- a/src/Property/Selector.php +++ b/src/Property/Selector.php @@ -9,6 +9,7 @@ use Sabberworm\CSS\Parsing\ParserState; use Sabberworm\CSS\Parsing\UnexpectedTokenException; use Sabberworm\CSS\Property\Selector\Combinator; +use Sabberworm\CSS\Property\Selector\Component; use Sabberworm\CSS\Property\Selector\CompoundSelector; use Sabberworm\CSS\Property\Selector\SpecificityCalculator; use Sabberworm\CSS\Renderable; @@ -76,11 +77,11 @@ final public function __construct(string $selector) /** * @param list $comments * - * @throws UnexpectedTokenException + * @return list * - * @internal + * @throws UnexpectedTokenException */ - public static function parse(ParserState $parserState, array &$comments = []): self + private static function parseComponents(ParserState $parserState, array &$comments = []): array { // Whitespace is a descendent combinator, not allowed around a compound selector. // (It is allowed within, e.g. as part of a string or within a function like `:not()`.) @@ -109,6 +110,20 @@ public static function parse(ParserState $parserState, array &$comments = []): s } } + return $selectorParts; + } + + /** + * @param list $comments + * + * @throws UnexpectedTokenException + * + * @internal + */ + public static function parse(ParserState $parserState, array &$comments = []): self + { + $selectorParts = self::parseComponents($parserState, $comments); + // Check that the selector has been fully parsed: if (!\in_array($parserState->peek(), ['{', '}', ',', ''], true)) { throw new UnexpectedTokenException(