Skip to content

Commit 85e54e0

Browse files
committed
fix: mark pseudo classes nested inside :not as used
fixes the css bug part of #14299
1 parent 312dd51 commit 85e54e0

File tree

5 files changed

+21
-2
lines changed

5 files changed

+21
-2
lines changed

.changeset/chatty-singers-sin.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'svelte': patch
3+
---
4+
5+
fix: mark pseudo classes nested inside `:not` as used

packages/svelte/src/compiler/phases/2-analyze/css/css-analyze.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,8 +150,9 @@ const css_visitors = {
150150
// So that nested selectors like `:root:not(.x)` are not marked as unused
151151
for (const child of node.selectors) {
152152
walk(/** @type {Css.Node} */ (child), null, {
153-
ComplexSelector(node) {
153+
ComplexSelector(node, context) {
154154
node.metadata.used = true;
155+
context.next();
155156
}
156157
});
157158
}

packages/svelte/src/compiler/phases/2-analyze/css/css-prune.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -531,7 +531,12 @@ function relative_selector_might_apply_to_node(relative_selector, rule, element,
531531
// with descendants, in which case we scope them all.
532532
if (name === 'not' && selector.args) {
533533
for (const complex_selector of selector.args.children) {
534-
complex_selector.metadata.used = true;
534+
walk(complex_selector, null, {
535+
ComplexSelector(node, context) {
536+
node.metadata.used = true;
537+
context.next();
538+
}
539+
});
535540
const relative = truncate(complex_selector);
536541

537542
if (complex_selector.children.length > 1) {

packages/svelte/tests/css/samples/not-selector/expected.css

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,7 @@
2929
span.svelte-xyz:not(:focus) {
3030
color: green;
3131
}
32+
33+
p.svelte-xyz:not(:has(span)) {
34+
color: green;
35+
}

packages/svelte/tests/css/samples/not-selector/input.svelte

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,8 @@
3636
span:not(:focus) {
3737
color: green;
3838
}
39+
40+
p:not(:has(span)) {
41+
color: green;
42+
}
3943
</style>

0 commit comments

Comments
 (0)