fix: mark nesting selectors of global parents as used (#13445)

fixes #13387
pull/13485/head
Simon H 11 months ago committed by GitHub
parent c716329806
commit 6c1e462927
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -114,6 +114,19 @@ const css_visitors = {
node.metadata.used ||= node.children.every( node.metadata.used ||= node.children.every(
({ metadata }) => metadata.is_global || metadata.is_global_like ({ metadata }) => metadata.is_global || metadata.is_global_like
); );
if (
node.metadata.rule?.metadata.parent_rule &&
node.children[0]?.selectors[0]?.type === 'NestingSelector'
) {
const parent_is_global = node.metadata.rule.metadata.parent_rule.prelude.children.some(
(child) => child.children.length === 1 && child.children[0].metadata.is_global
);
// mark `&:hover` in `:global(.foo) { &:hover { color: green }}` as used
if (parent_is_global) {
node.metadata.used = true;
}
}
}, },
RelativeSelector(node, context) { RelativeSelector(node, context) {
node.metadata.is_global = node.selectors.length >= 1 && is_global(node); node.metadata.is_global = node.selectors.length >= 1 && is_global(node);

@ -2,32 +2,46 @@ import { test } from '../../test';
export default test({ export default test({
warnings: [ warnings: [
{
code: 'css_unused_selector',
message: 'Unused CSS selector ".unused"',
start: {
line: 19,
column: 3,
character: 204
},
end: {
line: 19,
column: 10,
character: 211
}
},
{ {
code: 'css_unused_selector', code: 'css_unused_selector',
message: 'Unused CSS selector ".unused :global"', message: 'Unused CSS selector ".unused :global"',
start: { start: {
line: 25, line: 34,
column: 2, column: 2,
character: 229 character: 332
}, },
end: { end: {
line: 25, line: 34,
column: 17, column: 17,
character: 244 character: 347
} }
}, },
{ {
code: 'css_unused_selector', code: 'css_unused_selector',
message: 'Unused CSS selector ".unused :global(.z)"', message: 'Unused CSS selector ".unused :global(.z)"',
start: { start: {
line: 31, line: 40,
column: 2, column: 2,
character: 283 character: 386
}, },
end: { end: {
line: 31, line: 40,
column: 21, column: 21,
character: 302 character: 405
} }
} }
] ]

@ -8,6 +8,15 @@
.x { .x {
color: green; color: green;
&:hover {
color: green;
}
&div {
color: green;
}
/* (unused) .unused {
color: red;
}*/
} }
p:where(.svelte-xyz) { p:where(.svelte-xyz) {

@ -10,6 +10,15 @@
:global(.x) { :global(.x) {
color: green; color: green;
&:hover {
color: green;
}
&div {
color: green;
}
.unused {
color: red;
}
} }
p :global { p :global {

Loading…
Cancel
Save