File tree Expand file tree Collapse file tree 1 file changed +9
-8
lines changed
packages/svelte/src/compiler/phases/1-parse/read Expand file tree Collapse file tree 1 file changed +9
-8
lines changed Original file line number Diff line number Diff line change @@ -7,7 +7,7 @@ const REGEX_COMBINATOR_WHITESPACE = /^\s*(\+|~|>|\|\|)\s*/;
77const REGEX_COMBINATOR = / ^ ( \+ | ~ | > | \| \| ) / ;
88const REGEX_PERCENTAGE = / ^ \d + ( \. \d + ) ? % / ;
99const REGEX_NTH_OF =
10- / ^ \s * ( e v e n | o d d | ( \d + | \+ ? \d * n ( \s * [ + - ] \s * \d + ) ? ) | - \d * n ( \s * \+ \s * \d + ) ) ( \s * (? = [ , ) ] ) | \s + o f \s + ) / ;
10+ / ^ \s * ( e v e n | o d d | \+ ? ( \d + | \d * n ( \s * [ + - ] \s * \d + ) ? ) | - \d * n ( \s * \+ \s * \d + ) ) ( \s * (? = [ , ) ] ) | \s + o f \s + ) / ;
1111const REGEX_WHITESPACE_OR_COLON = / [ \s : ] / ;
1212const REGEX_BRACE_OR_SEMICOLON = / [ { ; ] / ;
1313const REGEX_LEADING_HYPHEN_OR_DIGIT = / - ? \d / ;
@@ -278,6 +278,14 @@ function read_selector(parser, inside_pseudo_class = false) {
278278 value,
279279 flags
280280 } ) ;
281+ } else if ( inside_pseudo_class && parser . match_regex ( REGEX_NTH_OF ) ) {
282+ // nth of matcher must come before combinator matcher to prevent collision else the '+' in '+2n-1' would be parsed as a combinator
283+ children . push ( {
284+ type : 'Nth' ,
285+ value : /** @type {string } */ ( parser . read ( REGEX_NTH_OF ) ) ,
286+ start,
287+ end : parser . index
288+ } ) ;
281289 } else if ( parser . match_regex ( REGEX_COMBINATOR_WHITESPACE ) ) {
282290 parser . allow_whitespace ( ) ;
283291 const start = parser . index ;
@@ -295,13 +303,6 @@ function read_selector(parser, inside_pseudo_class = false) {
295303 start,
296304 end : parser . index
297305 } ) ;
298- } else if ( inside_pseudo_class && parser . match_regex ( REGEX_NTH_OF ) ) {
299- children . push ( {
300- type : 'Nth' ,
301- value : /** @type {string } */ ( parser . read ( REGEX_NTH_OF ) ) ,
302- start,
303- end : parser . index
304- } ) ;
305306 } else {
306307 let name = read_identifier ( parser ) ;
307308 if ( parser . match ( '|' ) ) {
You can’t perform that action at this time.
0 commit comments