Skip to content

Commit

Permalink
Fix false positives/negatives in selector-pseudo-class-no-unknown
Browse files Browse the repository at this point in the history
add ::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
  • Loading branch information
Mouvedia committed Mar 11, 2022
1 parent cbdc783 commit b22a16c
Show file tree
Hide file tree
Showing 2 changed files with 93 additions and 32 deletions.
113 changes: 89 additions & 24 deletions lib/reference/keywordSets.js
Expand Up @@ -157,29 +157,31 @@ keywordSets.levelOneAndTwoPseudoElements = new Set([
'first-letter',
]);

// These are the ones that require double-colon notation
keywordSets.levelThreeAndUpPseudoElements = new Set([
'before',
'after',
'first-line',
'first-letter',
'selection',
'spelling-error',
'grammar-error',
// These are the ones that require double-colon notation
'backdrop',
'content',
'file-selector-button',
'grammar-error',
'marker',
'placeholder',
'selection',
'shadow',
'spelling-error',
'slotted',
'content',
'file-selector-button',
'target-text',
]);

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

keywordSets.vendorSpecificPseudoElements = new Set([
'-moz-focus-inner',
'-moz-focus-outer',
'-moz-meter-bar',
'-moz-placeholder',
'-moz-progress-bar',
'-moz-range-progress',
Expand All @@ -199,11 +201,60 @@ keywordSets.vendorSpecificPseudoElements = new Set([
'-ms-tooltip',
'-ms-track',
'-ms-value',
'-webkit-color-swatch',
'-webkit-color-swatch-wrapper',
'-webkit-calendar-picker-indicator',
'-webkit-clear-button',
'-webkit-date-and-time-value',
'-webkit-datetime-edit',
'-webkit-datetime-edit-ampm-field',
'-webkit-datetime-edit-day-field',
'-webkit-datetime-edit-fields-wrapper',
'-webkit-datetime-edit-hour-field',
'-webkit-datetime-edit-millisecond-field',
'-webkit-datetime-edit-minute-field',
'-webkit-datetime-edit-month-field',
'-webkit-datetime-edit-second-field',
'-webkit-datetime-edit-text',
'-webkit-datetime-edit-week-field',
'-webkit-datetime-edit-year-field',
'-webkit-details-marker',
'-webkit-distributed',
'-webkit-file-upload-button',
'-webkit-input-placeholder',
'-webkit-keygen-select',
'-webkit-meter-bar',
'-webkit-meter-even-less-good-value',
'-webkit-meter-inner-element',
'-webkit-meter-optimum-value',
'-webkit-meter-suboptimum-value',
'-webkit-progress-bar',
'-webkit-progress-inner-element',
'-webkit-progress-value',
'-webkit-search-cancel-button',
'-webkit-search-decoration',
'-webkit-search-results-button',
'-webkit-search-results-decoration',
'-webkit-slider-runnable-track',
'-webkit-slider-thumb',
'-webkit-textfield-decoration-container',
'-webkit-validation-bubble',
'-webkit-validation-bubble-arrow',
'-webkit-validation-bubble-arrow-clipper',
'-webkit-validation-bubble-heading',
'-webkit-validation-bubble-message',
'-webkit-validation-bubble-text-block',
...keywordSets.webkitScrollbarPseudoElements,
]);

keywordSets.webkitScrollbarPseudoElements = new Set([
'-webkit-resizer',
'-webkit-scrollbar',
'-webkit-scrollbar-button',
'-webkit-scrollbar-corner',
'-webkit-scrollbar-thumb',
'-webkit-scrollbar-track',
'-webkit-scrollbar-track-piece',
]);

keywordSets.pseudoElements = uniteSets(
Expand Down Expand Up @@ -238,22 +289,22 @@ keywordSets.otherPseudoClasses = new Set([
'default',
'defined',
'disabled',
'drop',
'empty',
'enabled',
'first-child',
'first-of-type',
'focus',
'focus-ring',
'focus-within',
'focus-visible',
'fullscreen',
'fullscreen-ancestor',
'future',
'host',
'host-context',
'hover',
'indeterminate',
'in-range',
'invalid',
'last-child',
'last-of-type',
'link',
Expand All @@ -264,6 +315,7 @@ keywordSets.otherPseudoClasses = new Set([
'past',
'placeholder-shown',
'playing',
'picture-in-picture',
'paused',
'read-only',
'read-write',
Expand All @@ -272,35 +324,48 @@ keywordSets.otherPseudoClasses = new Set([
'scope',
'state',
'target',
'unresolved',
'user-invalid',
'user-valid',
'invalid',
'valid',
'visited',
'window-inactive', // for ::selection (chrome)
]);

keywordSets.vendorSpecificPseudoClasses = new Set([
'-khtml-drag',
'-moz-any',
'-moz-any-link',
'-moz-broken',
'-moz-drag-over',
'-moz-first-node',
'-moz-focusring',
'-moz-full-screen',
'-moz-full-screen-ancestor',
'-moz-last-node',
'-moz-loading',
'-moz-meter-optimum',
'-moz-meter-sub-optimum',
'-moz-meter-sub-sub-optimum',
'-moz-placeholder',
'-moz-submit-invalid',
'-moz-suppressed',
'-moz-ui-invalid',
'-moz-ui-valid',
'-moz-user-disabled',
'-moz-window-inactive',
'-ms-fullscreen',
'-ms-input-placeholder',
'-webkit-drag',
'-webkit-any',
'-webkit-any-link',
'-webkit-autofill',
'-webkit-full-screen',
'-webkit-full-screen-ancestor',
]);

// TODO migrate to vendorSpecificPseudoElements
// see #2264
keywordSets.webkitProprietaryPseudoElements = new Set([
'scrollbar',
'scrollbar-button',
'scrollbar-track',
'scrollbar-track-piece',
'scrollbar-thumb',
'scrollbar-corner',
'resize',
]);

// TODO migrate to vendorSpecificPseudoClasses
// see #2264
keywordSets.webkitProprietaryPseudoClasses = new Set([
// https://webkit.org/blog/363/styling-scrollbars/
keywordSets.webkitScrollbarPseudoClasses = new Set([
'horizontal',
'vertical',
'decrement',
Expand Down
12 changes: 4 additions & 8 deletions lib/rules/selector-pseudo-class-no-unknown/index.js
Expand Up @@ -92,23 +92,19 @@ const rule = (primary, secondaryOptions) => {
let prevPseudoElement = pseudoNode;

do {
prevPseudoElement = /** @type {import('postcss-selector-parser').Base} */ (
prevPseudoElement.prev()
);
prevPseudoElement = /** @type {import('postcss-selector-parser').Base} */ (prevPseudoElement.prev());

if (prevPseudoElement && prevPseudoElement.value.slice(0, 2) === '::') {
break;
}
} while (prevPseudoElement);

if (prevPseudoElement) {
const prevPseudoElementValue = vendor.unprefixed(
prevPseudoElement.value.toLowerCase().slice(2),
);
const prevPseudoElementValue = prevPseudoElement.value.toLowerCase().slice(2);

if (
keywordSets.webkitProprietaryPseudoElements.has(prevPseudoElementValue) &&
keywordSets.webkitProprietaryPseudoClasses.has(name)
keywordSets.webkitScrollbarPseudoElements.has(prevPseudoElementValue) &&
keywordSets.webkitScrollbarPseudoClasses.has(name)
) {
return;
}
Expand Down

0 comments on commit b22a16c

Please sign in to comment.