error early on invalid nesting selector

pull/10491/head
Rich Harris 3 years ago
parent c682dab290
commit 59604ed6c9

@ -107,7 +107,8 @@ const css = {
'invalid-css-global-selector-list': () =>
`:global(...) must not contain type or universal selectors when used in a compound selector`,
'invalid-css-selector': () => `Invalid selector`,
'invalid-css-identifier': () => 'Expected a valid CSS identifier'
'invalid-css-identifier': () => 'Expected a valid CSS identifier',
'invalid-nesting-selector': () => `Nesting selectors can only be used inside a rule`
};
/** @satisfies {Errors} */

@ -132,6 +132,12 @@ const validation_visitors = {
}
}
}
},
NestingSelector(node, context) {
const rule = /** @type {import('#compiler').Css.Rule} */ (context.state.rule);
if (!rule.metadata.parent_rule) {
error(node, 'invalid-nesting-selector');
}
}
};

@ -353,8 +353,7 @@ function relative_selector_might_apply_to_node(relative_selector, rule, node, st
case 'NestingSelector': {
let matched = false;
const parent = rule.metadata.parent_rule;
if (!parent) error(selector, 'TODO', 'invalid nesting selector'); // TODO error sooner
const parent = /** @type {import('#compiler').Css.Rule} */ (rule.metadata.parent_rule);
for (const complex_selector of parent.prelude.children) {
if (apply_selector(truncate(complex_selector), parent, node, stylesheet)) {

Loading…
Cancel
Save