Skip to content

Commit b3e34dc

Browse files
committed
Fix false positives/negatives in selector-pseudo-class-no-unknown
add ::cue, ::target-text, :unresolved, :picture-in-picture, :window-inactive, :fullscreen-ancestor, etc. remove :focus-ring, :drop typo ::-webkit-resizer https://hg.mozilla.org/mozilla-central/file/tip/layout/style/test/test_non_content_accessible_pseudos.html#l8 https://hg.mozilla.org/mozilla-central/file/tip/layout/style/test/test_selectors.html#l1102 https://trac.webkit.org/changeset/252330/webkit/ keywords: datetime, meter, search, validation, any, drag
1 parent cbdc783 commit b3e34dc

File tree

2 files changed

+95
-32
lines changed

2 files changed

+95
-32
lines changed

lib/reference/keywordSets.js

Lines changed: 91 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -157,29 +157,33 @@ keywordSets.levelOneAndTwoPseudoElements = new Set([
157157
'first-letter',
158158
]);
159159

160-
// These are the ones that require double-colon notation
161160
keywordSets.levelThreeAndUpPseudoElements = new Set([
162161
'before',
163162
'after',
164163
'first-line',
165164
'first-letter',
166-
'selection',
167-
'spelling-error',
168-
'grammar-error',
165+
// These are the ones that require double-colon notation
169166
'backdrop',
167+
'content',
168+
'cue',
169+
'file-selector-button',
170+
'grammar-error',
170171
'marker',
171172
'placeholder',
173+
'selection',
172174
'shadow',
175+
'spelling-error',
173176
'slotted',
174-
'content',
175-
'file-selector-button',
177+
'target-text',
176178
]);
177179

178180
keywordSets.shadowTreePseudoElements = new Set(['part']);
179181

180182
keywordSets.vendorSpecificPseudoElements = new Set([
181183
'-moz-focus-inner',
182184
'-moz-focus-outer',
185+
'-moz-list-bullet',
186+
'-moz-meter-bar',
183187
'-moz-placeholder',
184188
'-moz-progress-bar',
185189
'-moz-range-progress',
@@ -199,11 +203,60 @@ keywordSets.vendorSpecificPseudoElements = new Set([
199203
'-ms-tooltip',
200204
'-ms-track',
201205
'-ms-value',
206+
'-webkit-color-swatch',
207+
'-webkit-color-swatch-wrapper',
208+
'-webkit-calendar-picker-indicator',
209+
'-webkit-clear-button',
210+
'-webkit-date-and-time-value',
211+
'-webkit-datetime-edit',
212+
'-webkit-datetime-edit-ampm-field',
213+
'-webkit-datetime-edit-day-field',
214+
'-webkit-datetime-edit-fields-wrapper',
215+
'-webkit-datetime-edit-hour-field',
216+
'-webkit-datetime-edit-millisecond-field',
217+
'-webkit-datetime-edit-minute-field',
218+
'-webkit-datetime-edit-month-field',
219+
'-webkit-datetime-edit-second-field',
220+
'-webkit-datetime-edit-text',
221+
'-webkit-datetime-edit-week-field',
222+
'-webkit-datetime-edit-year-field',
223+
'-webkit-details-marker',
224+
'-webkit-distributed',
225+
'-webkit-file-upload-button',
202226
'-webkit-input-placeholder',
227+
'-webkit-keygen-select',
228+
'-webkit-meter-bar',
229+
'-webkit-meter-even-less-good-value',
230+
'-webkit-meter-inner-element',
231+
'-webkit-meter-optimum-value',
232+
'-webkit-meter-suboptimum-value',
203233
'-webkit-progress-bar',
234+
'-webkit-progress-inner-element',
204235
'-webkit-progress-value',
236+
'-webkit-search-cancel-button',
237+
'-webkit-search-decoration',
238+
'-webkit-search-results-button',
239+
'-webkit-search-results-decoration',
205240
'-webkit-slider-runnable-track',
206241
'-webkit-slider-thumb',
242+
'-webkit-textfield-decoration-container',
243+
'-webkit-validation-bubble',
244+
'-webkit-validation-bubble-arrow',
245+
'-webkit-validation-bubble-arrow-clipper',
246+
'-webkit-validation-bubble-heading',
247+
'-webkit-validation-bubble-message',
248+
'-webkit-validation-bubble-text-block',
249+
...keywordSets.webkitScrollbarPseudoElements,
250+
]);
251+
252+
keywordSets.webkitScrollbarPseudoElements = new Set([
253+
'-webkit-resizer',
254+
'-webkit-scrollbar',
255+
'-webkit-scrollbar-button',
256+
'-webkit-scrollbar-corner',
257+
'-webkit-scrollbar-thumb',
258+
'-webkit-scrollbar-track',
259+
'-webkit-scrollbar-track-piece',
207260
]);
208261

209262
keywordSets.pseudoElements = uniteSets(
@@ -238,22 +291,22 @@ keywordSets.otherPseudoClasses = new Set([
238291
'default',
239292
'defined',
240293
'disabled',
241-
'drop',
242294
'empty',
243295
'enabled',
244296
'first-child',
245297
'first-of-type',
246298
'focus',
247-
'focus-ring',
248299
'focus-within',
249300
'focus-visible',
250301
'fullscreen',
302+
'fullscreen-ancestor',
251303
'future',
252304
'host',
253305
'host-context',
254306
'hover',
255307
'indeterminate',
256308
'in-range',
309+
'invalid',
257310
'last-child',
258311
'last-of-type',
259312
'link',
@@ -264,6 +317,7 @@ keywordSets.otherPseudoClasses = new Set([
264317
'past',
265318
'placeholder-shown',
266319
'playing',
320+
'picture-in-picture',
267321
'paused',
268322
'read-only',
269323
'read-write',
@@ -272,35 +326,48 @@ keywordSets.otherPseudoClasses = new Set([
272326
'scope',
273327
'state',
274328
'target',
329+
'unresolved',
275330
'user-invalid',
276331
'user-valid',
277-
'invalid',
278332
'valid',
279333
'visited',
334+
'window-inactive', // for ::selection (chrome)
280335
]);
281336

282337
keywordSets.vendorSpecificPseudoClasses = new Set([
338+
'-khtml-drag',
339+
'-moz-any',
340+
'-moz-any-link',
341+
'-moz-broken',
342+
'-moz-drag-over',
343+
'-moz-first-node',
344+
'-moz-focusring',
345+
'-moz-full-screen',
346+
'-moz-full-screen-ancestor',
347+
'-moz-last-node',
348+
'-moz-loading',
349+
'-moz-meter-optimum',
350+
'-moz-meter-sub-optimum',
351+
'-moz-meter-sub-sub-optimum',
283352
'-moz-placeholder',
353+
'-moz-submit-invalid',
354+
'-moz-suppressed',
284355
'-moz-ui-invalid',
285356
'-moz-ui-valid',
357+
'-moz-user-disabled',
358+
'-moz-window-inactive',
359+
'-ms-fullscreen',
286360
'-ms-input-placeholder',
361+
'-webkit-drag',
362+
'-webkit-any',
363+
'-webkit-any-link',
364+
'-webkit-autofill',
365+
'-webkit-full-screen',
366+
'-webkit-full-screen-ancestor',
287367
]);
288368

289-
// TODO migrate to vendorSpecificPseudoElements
290-
// see #2264
291-
keywordSets.webkitProprietaryPseudoElements = new Set([
292-
'scrollbar',
293-
'scrollbar-button',
294-
'scrollbar-track',
295-
'scrollbar-track-piece',
296-
'scrollbar-thumb',
297-
'scrollbar-corner',
298-
'resize',
299-
]);
300-
301-
// TODO migrate to vendorSpecificPseudoClasses
302-
// see #2264
303-
keywordSets.webkitProprietaryPseudoClasses = new Set([
369+
// https://webkit.org/blog/363/styling-scrollbars/
370+
keywordSets.webkitScrollbarPseudoClasses = new Set([
304371
'horizontal',
305372
'vertical',
306373
'decrement',

lib/rules/selector-pseudo-class-no-unknown/index.js

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -92,23 +92,19 @@ const rule = (primary, secondaryOptions) => {
9292
let prevPseudoElement = pseudoNode;
9393

9494
do {
95-
prevPseudoElement = /** @type {import('postcss-selector-parser').Base} */ (
96-
prevPseudoElement.prev()
97-
);
95+
prevPseudoElement = /** @type {import('postcss-selector-parser').Base} */ (prevPseudoElement.prev());
9896

9997
if (prevPseudoElement && prevPseudoElement.value.slice(0, 2) === '::') {
10098
break;
10199
}
102100
} while (prevPseudoElement);
103101

104102
if (prevPseudoElement) {
105-
const prevPseudoElementValue = vendor.unprefixed(
106-
prevPseudoElement.value.toLowerCase().slice(2),
107-
);
103+
const prevPseudoElementValue = prevPseudoElement.value.toLowerCase().slice(2);
108104

109105
if (
110-
keywordSets.webkitProprietaryPseudoElements.has(prevPseudoElementValue) &&
111-
keywordSets.webkitProprietaryPseudoClasses.has(name)
106+
keywordSets.webkitScrollbarPseudoElements.has(prevPseudoElementValue) &&
107+
keywordSets.webkitScrollbarPseudoClasses.has(name)
112108
) {
113109
return;
114110
}

0 commit comments

Comments
 (0)