Skip to content

Commit 45ce4c2

Browse files
committed
fix parsing order
1 parent 643357c commit 45ce4c2

File tree

1 file changed

+9
-8
lines changed
  • packages/svelte/src/compiler/phases/1-parse/read

1 file changed

+9
-8
lines changed

packages/svelte/src/compiler/phases/1-parse/read/style.js

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ const REGEX_COMBINATOR_WHITESPACE = /^\s*(\+|~|>|\|\|)\s*/;
77
const REGEX_COMBINATOR = /^(\+|~|>|\|\|)/;
88
const REGEX_PERCENTAGE = /^\d+(\.\d+)?%/;
99
const REGEX_NTH_OF =
10-
/^\s*(even|odd|(\d+|\+?\d*n(\s*[+-]\s*\d+)?)|-\d*n(\s*\+\s*\d+))(\s*(?=[,)])|\s+of\s+)/;
10+
/^\s*(even|odd|\+?(\d+|\d*n(\s*[+-]\s*\d+)?)|-\d*n(\s*\+\s*\d+))(\s*(?=[,)])|\s+of\s+)/;
1111
const REGEX_WHITESPACE_OR_COLON = /[\s:]/;
1212
const REGEX_BRACE_OR_SEMICOLON = /[{;]/;
1313
const 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('|')) {

0 commit comments

Comments
 (0)