Skip to content

Commit 55c4474

Browse files
committed
Define context more precisely to validate a pseudo function
1 parent 2d5460b commit 55c4474

File tree

2 files changed

+4
-2
lines changed

2 files changed

+4
-2
lines changed

lib/parse/postprocess.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1214,7 +1214,7 @@ function isValidPseudoClass(key, node) {
12141214
return true
12151215
}
12161216
// :has() nested in :has()
1217-
if (key === 'has' && findContext('function', node, node => node.input.current?.name === 'has')) {
1217+
if (key === 'has' && findContext('function', node, node => node.definition.name === 'has')) {
12181218
return false
12191219
}
12201220
// Pseudo-class qualifying pseudo-element
@@ -1256,6 +1256,7 @@ function postParsePseudoClassSelector(selector, node, parser) {
12561256
name = name.toLowerCase()
12571257
const definition = pseudos.classes.functions[name]
12581258
if (definition && isValidPseudoClass(name, node)) {
1259+
node = { ...node, definition: { name, type: 'function', value: definition } }
12591260
value = parser.parseCSSGrammar(input.current.value, definition, { ...context, function: node })
12601261
if (value) {
12611262
const fn = { ...pseudo, name, value }
@@ -1324,6 +1325,7 @@ function postParsePseudoElementSelector(selector, node, parser) {
13241325
name = name.toLowerCase()
13251326
const definition = pseudos.elements.functions[name]
13261327
if (definition && isValidPseudoElement(name, node)) {
1328+
node = { ...node, definition: { name, type: 'function', value: definition } }
13271329
value = parser.parseCSSGrammar(input.current.value, definition.value, { ...context, function: node })
13281330
if (value) {
13291331
const fn = { ...pseudo, name, value }

lib/parse/preprocess.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ function preParseCompoundSelector(node) {
191191
next
192192
&& !isColon(next)
193193
&& findContext('function', node, node =>
194-
pseudos.logical[node.input.current?.name.toLowerCase()]
194+
pseudos.logical[node.definition.name]
195195
// ::part(name):not(type) must be valid (but match nothing)
196196
&& node.input.prev(1, 1)?.name?.toLowerCase() !== 'part'
197197
&& findParent(

0 commit comments

Comments
 (0)