Fix selector-no-qualifying-type false positives for :has()#9182
Conversation
Type selectors inside :has() do not qualify the current element — they apply conditions on descendant nodes. Exclude :has() from the SELECTOR_CONTAINING_PSEUDO_CLASSES set so inner type selectors are not merged into the outer compound selector for qualifying-type checks. Fixes #9103
…evaluate :has() inner selectors independently
…s in selector grouping
🦋 Changeset detectedLatest commit: 74433b3 The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
|
This PR is packaged and the instant preview is available (74433b3). View the demo website. Install it locally: npm i -D https://pkg.pr.new/stylelint@74433b3 |
There was a problem hiding this comment.
Fantastic, thank you!
Is it ok that I added extra files and tests in the directory of this rule?
Totes okay. A couple of our similarly complex rules do the same: named-grid-areas-no-invalid and color-named come to mind off-hand.
I've deleted the duplicated changeset.
The failing Node.js 22 looks unrelated.
LGTM.
ybiquitous
left a comment
There was a problem hiding this comment.
Overall, looks good to me 👍🏼
I've left a few minor suggestions, can you look at?
Also, the following PR should work around the CI failure:
…doClass.mjs Co-authored-by: Masafumi Koba <473530+ybiquitous@users.noreply.github.com>
…doClass.mjs Co-authored-by: Masafumi Koba <473530+ybiquitous@users.noreply.github.com>
…-reindeer-87788fc5df
…-reindeer-87788fc5df
|
Thank you for the reviews @ybiquitous @jeddy3 🙇 |
| datasource | package | from | to | | ---------- | --------- | ------ | ------ | | npm | stylelint | 17.4.0 | 17.8.0 | ## [v17.8.0](https://github.com/stylelint/stylelint/blob/HEAD/CHANGELOG.md#1780---2026-04-15) It adds 3 new rules and 1 configuration property. - Added: `languageOptions.directionality` configuration property ([#8687](stylelint/stylelint#8687)) ([@sw1tch3roo](https://github.com/sw1tch3roo)). - Added: `property-layout-mappings` rule ([#8687](stylelint/stylelint#8687)) ([@sw1tch3roo](https://github.com/sw1tch3roo)). - Added: `relative-selector-nesting-notation` rule ([#8730](stylelint/stylelint#8730)) ([@sw1tch3roo](https://github.com/sw1tch3roo)). - Added: `selector-no-deprecated` rule ([#8694](stylelint/stylelint#8694)) ([@immitsu](https://github.com/immitsu)). ## [v17.7.0](https://github.com/stylelint/stylelint/blob/HEAD/CHANGELOG.md#1770---2026-04-12) It fixes 4 bugs, including clearer problem messages by removing filler words and leading with the problem. We've also released `1.0.0` of [create-stylelint](https://github.com/stylelint/create-stylelint) to help with first-time Stylelint setup. - Fixed: clarity of problem messages ([#9199](stylelint/stylelint#9199)) ([@jeddy3](https://github.com/jeddy3)). - Fixed: `--print-config` CLI flag to hide internal properties ([#9194](stylelint/stylelint#9194)) ([@ybiquitous](https://github.com/ybiquitous)). - Fixed: `function-url-quotes` false positives when URLs have modifiers ([#8702](stylelint/stylelint#8702)) ([@immitsu](https://github.com/immitsu)). - Fixed: `selector-no-qualifying-type` false positives for `:has()` ([#9182](stylelint/stylelint#9182)) ([@romainmenke](https://github.com/romainmenke)). ## [v17.6.0](https://github.com/stylelint/stylelint/blob/HEAD/CHANGELOG.md#1760---2026-03-26) It adds support for extending units in `languageOptions`, which then apply to rules like `declaration-property-value-no-unknown`, and fixes 2 bugs. - Added: support for extending units to `languageOptions` ([#9166](stylelint/stylelint#9166)) ([@jeddy3](https://github.com/jeddy3)). - Fixed: missing `ruleMetadata` when linting multiple files with overrides ([#9154](stylelint/stylelint#9154)) ([@kovsu](https://github.com/kovsu)). - Fixed: `custom-property-no-missing-var-function` false positives for `timeline-scope` and `animation-timeline` ([#9164](stylelint/stylelint#9164)) ([@splincode](https://github.com/splincode)). ## [v17.5.0](https://github.com/stylelint/stylelint/blob/HEAD/CHANGELOG.md#1750---2026-03-19) It deprecates two rule options, adds 1 rule option and fixes 7 bugs. We've also released [`2.1.0`](https://github.com/stylelint/vscode-stylelint/releases/tag/2.1.0) of [our VS Code extension](https://marketplace.visualstudio.com/items?itemName=stylelint.vscode-stylelint), which adds 8 new requested features, and our [first release](https://www.npmjs.com/package/@stylelint/language-server) of the Stylelint Language Server. - Deprecated: `*syntax` options from `declaration-property-value-no-unknown` ([#9102](stylelint/stylelint#9102)) ([@ragini-pandey](https://github.com/ragini-pandey)). - Added: `ignoreMediaFeatureNameValues: {}` to `media-feature-name-value-no-unknown` ([#8976](stylelint/stylelint#8976)) ([@kovsu](https://github.com/kovsu)). - Fixed: `node_modules` not ignored when using `codeFilename` in Node.js API ([#9130](stylelint/stylelint#9130)) ([@adalinesimonian](https://github.com/adalinesimonian)). - Fixed: `Error TS7016` for imported `css-tree` types ([#9133](stylelint/stylelint#9133)) ([@ragini-pandey](https://github.com/ragini-pandey)). - Fixed: `declaration-property-value-keyword-no-deprecated` false positives for function arguments ([#9116](stylelint/stylelint#9116)) ([@ragini-pandey](https://github.com/ragini-pandey)). - Fixed: `declaration-property-value-no-unknown` false positives for `calc-size()` containing `size` keyword ([#9105](stylelint/stylelint#9105)) ([@hriztam](https://github.com/hriztam)). - Fixed: `no-descending-specificity` & `no-duplicate-selectors` false negatives for equivalent compound selectors ([#8977](stylelint/stylelint#8977)) ([@kovsu](https://github.com/kovsu)). - Fixed: `no-invalid-position-declaration` false positives for `@mixin` and `@scope` ([#9120](stylelint/stylelint#9120)) ([@ragini-pandey](https://github.com/ragini-pandey)). - Fixed: `property-no-unknown` false negatives for `types` ([#9117](stylelint/stylelint#9117)) ([@Mouvedia](https://github.com/Mouvedia)).
This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [eslint](https://eslint.org) ([source](https://github.com/eslint/eslint)) | devDependencies | patch | [`9.39.3` -> `9.39.4`](https://renovatebot.com/diffs/npm/eslint/9.39.3/9.39.4) | | [prettier](https://prettier.io) ([source](https://github.com/prettier/prettier)) | devDependencies | patch | [`3.8.1` -> `3.8.3`](https://renovatebot.com/diffs/npm/prettier/3.8.1/3.8.3) | | [stylelint](https://stylelint.io) ([source](https://github.com/stylelint/stylelint)) | devDependencies | minor | [`17.4.0` -> `17.8.0`](https://renovatebot.com/diffs/npm/stylelint/17.4.0/17.8.0) | --- ### Release Notes <details> <summary>eslint/eslint (eslint)</summary> ### [`v9.39.4`](https://github.com/eslint/eslint/releases/tag/v9.39.4) [Compare Source](eslint/eslint@v9.39.3...v9.39.4) #### Bug Fixes - [`f18f6c8`](eslint/eslint@f18f6c8) fix: update dependency minimatch to ^3.1.5 ([#​20564](eslint/eslint#20564)) (Milos Djermanovic) - [`a3c868f`](eslint/eslint@a3c868f) fix: update dependency [@​eslint/eslintrc](https://github.com/eslint/eslintrc) to ^3.3.4 ([#​20554](eslint/eslint#20554)) (Milos Djermanovic) - [`234d005`](eslint/eslint@234d005) fix: minimatch security vulnerability patch for v9.x ([#​20549](eslint/eslint#20549)) (Andrej Beles) - [`b1b37ee`](eslint/eslint@b1b37ee) fix: update `ajv` to `6.14.0` to address security vulnerabilities ([#​20538](eslint/eslint#20538)) (루밀LuMir) #### Documentation - [`4675152`](eslint/eslint@4675152) docs: add deprecation notice partial ([#​20520](eslint/eslint#20520)) (Milos Djermanovic) #### Chores - [`b8b4eb1`](eslint/eslint@b8b4eb1) chore: update dependencies for ESLint v9.39.4 ([#​20596](eslint/eslint#20596)) (Francesco Trotta) - [`71b2f6b`](eslint/eslint@71b2f6b) chore: package.json update for [@​eslint/js](https://github.com/eslint/js) release (Jenkins) - [`1d16c2f`](eslint/eslint@1d16c2f) ci: pin Node.js 25.6.1 ([#​20563](eslint/eslint#20563)) (Milos Djermanovic) </details> <details> <summary>prettier/prettier (prettier)</summary> ### [`v3.8.3`](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#383) [Compare Source](prettier/prettier@3.8.2...3.8.3) [diff](prettier/prettier@3.8.2...3.8.3) ##### SCSS: Prevent trailing comma in `if()` function ([#​18471](prettier/prettier#18471) by [@​kovsu](https://github.com/kovsu)) <!-- prettier-ignore --> ```scss // Input $value: if(sass(false): 1; else: -1); // Prettier 3.8.2 $value: if( sass(false): 1; else: -1, ); // Prettier 3.8.3 $value: if(sass(false): 1; else: -1); ``` ### [`v3.8.2`](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#382) [Compare Source](prettier/prettier@3.8.1...3.8.2) [diff](prettier/prettier@3.8.1...3.8.2) ##### Angular: Support Angular v21.2 ([#​18722](prettier/prettier#18722), [#​19034](prettier/prettier#19034) by [@​fisker](https://github.com/fisker)) Exhaustive typechecking with `@default never;` <!-- prettier-ignore --> ```html <!-- Input --> @​switch (foo) { @​case (1) {} @​default never; } <!-- Prettier 3.8.1 --> SyntaxError: Incomplete block "default never". If you meant to write the @​ character, you should use the "&#​64;" HTML entity instead. (3:3) <!-- Prettier 3.8.2 --> @​switch (foo) { @​case (1) {} @​default never; } ``` `arrow function` and `instanceof` expressions. <!-- prettier-ignore --> ```html <!-- Input --> @​let fn = (a) => a? 1:2; {{ fn ( a instanceof b)}} <!-- Prettier 3.8.1 --> @​let fn = (a) => a? 1:2; {{ fn ( a instanceof b)}} <!-- Prettier 3.8.2 --> @​let fn = (a) => (a ? 1 : 2); {{ fn(a instanceof b) }} ``` </details> <details> <summary>stylelint/stylelint (stylelint)</summary> ### [`v17.8.0`](https://github.com/stylelint/stylelint/blob/HEAD/CHANGELOG.md#1780---2026-04-15) [Compare Source](stylelint/stylelint@17.7.0...17.8.0) It adds 3 new rules and 1 configuration property. - Added: `languageOptions.directionality` configuration property ([#​8687](stylelint/stylelint#8687)) ([@​sw1tch3roo](https://github.com/sw1tch3roo)). - Added: `property-layout-mappings` rule ([#​8687](stylelint/stylelint#8687)) ([@​sw1tch3roo](https://github.com/sw1tch3roo)). - Added: `relative-selector-nesting-notation` rule ([#​8730](stylelint/stylelint#8730)) ([@​sw1tch3roo](https://github.com/sw1tch3roo)). - Added: `selector-no-deprecated` rule ([#​8694](stylelint/stylelint#8694)) ([@​immitsu](https://github.com/immitsu)). ### [`v17.7.0`](https://github.com/stylelint/stylelint/blob/HEAD/CHANGELOG.md#1770---2026-04-12) [Compare Source](stylelint/stylelint@17.6.0...17.7.0) It fixes 4 bugs, including clearer problem messages by removing filler words and leading with the problem. We've also released `1.0.0` of [create-stylelint](https://github.com/stylelint/create-stylelint) to help with first-time Stylelint setup. - Fixed: clarity of problem messages ([#​9199](stylelint/stylelint#9199)) ([@​jeddy3](https://github.com/jeddy3)). - Fixed: `--print-config` CLI flag to hide internal properties ([#​9194](stylelint/stylelint#9194)) ([@​ybiquitous](https://github.com/ybiquitous)). - Fixed: `function-url-quotes` false positives when URLs have modifiers ([#​8702](stylelint/stylelint#8702)) ([@​immitsu](https://github.com/immitsu)). - Fixed: `selector-no-qualifying-type` false positives for `:has()` ([#​9182](stylelint/stylelint#9182)) ([@​romainmenke](https://github.com/romainmenke)). ### [`v17.6.0`](https://github.com/stylelint/stylelint/blob/HEAD/CHANGELOG.md#1760---2026-03-26) [Compare Source](stylelint/stylelint@17.5.0...17.6.0) It adds support for extending units in `languageOptions`, which then apply to rules like `declaration-property-value-no-unknown`, and fixes 2 bugs. - Added: support for extending units to `languageOptions` ([#​9166](stylelint/stylelint#9166)) ([@​jeddy3](https://github.com/jeddy3)). - Fixed: missing `ruleMetadata` when linting multiple files with overrides ([#​9154](stylelint/stylelint#9154)) ([@​kovsu](https://github.com/kovsu)). - Fixed: `custom-property-no-missing-var-function` false positives for `timeline-scope` and `animation-timeline` ([#​9164](stylelint/stylelint#9164)) ([@​splincode](https://github.com/splincode)). ### [`v17.5.0`](https://github.com/stylelint/stylelint/blob/HEAD/CHANGELOG.md#1750---2026-03-19) [Compare Source](stylelint/stylelint@17.4.0...17.5.0) It deprecates two rule options, adds 1 rule option and fixes 7 bugs. We've also released [`2.1.0`](https://github.com/stylelint/vscode-stylelint/releases/tag/2.1.0) of [our VS Code extension](https://marketplace.visualstudio.com/items?itemName=stylelint.vscode-stylelint), which adds 8 new requested features, and our [first release](https://www.npmjs.com/package/@​stylelint/language-server) of the Stylelint Language Server. - Deprecated: `*syntax` options from `declaration-property-value-no-unknown` ([#​9102](stylelint/stylelint#9102)) ([@​ragini-pandey](https://github.com/ragini-pandey)). - Added: `ignoreMediaFeatureNameValues: {}` to `media-feature-name-value-no-unknown` ([#​8976](stylelint/stylelint#8976)) ([@​kovsu](https://github.com/kovsu)). - Fixed: `node_modules` not ignored when using `codeFilename` in Node.js API ([#​9130](stylelint/stylelint#9130)) ([@​adalinesimonian](https://github.com/adalinesimonian)). - Fixed: `Error TS7016` for imported `css-tree` types ([#​9133](stylelint/stylelint#9133)) ([@​ragini-pandey](https://github.com/ragini-pandey)). - Fixed: `declaration-property-value-keyword-no-deprecated` false positives for function arguments ([#​9116](stylelint/stylelint#9116)) ([@​ragini-pandey](https://github.com/ragini-pandey)). - Fixed: `declaration-property-value-no-unknown` false positives for `calc-size()` containing `size` keyword ([#​9105](stylelint/stylelint#9105)) ([@​hriztam](https://github.com/hriztam)). - Fixed: `no-descending-specificity` & `no-duplicate-selectors` false negatives for equivalent compound selectors ([#​8977](stylelint/stylelint#8977)) ([@​kovsu](https://github.com/kovsu)). - Fixed: `no-invalid-position-declaration` false positives for `@mixin` and `@scope` ([#​9120](stylelint/stylelint#9120)) ([@​ragini-pandey](https://github.com/ragini-pandey)). - Fixed: `property-no-unknown` false negatives for `types` ([#​9117](stylelint/stylelint#9117)) ([@​Mouvedia](https://github.com/Mouvedia)). </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS42MS4wIiwidXBkYXRlZEluVmVyIjoiNDEuNjEuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==--> Reviewed-on: https://git.robbevp.be/robbevp/website-robbevanpetegem/pulls/508 Co-authored-by: Renovate Bot <renovate@robbevp.be> Co-committed-by: Renovate Bot <renovate@robbevp.be>
| datasource | package | from | to | | ---------- | --------- | ------ | ------ | | npm | stylelint | 17.4.0 | 17.8.0 | ## [v17.8.0](https://github.com/stylelint/stylelint/blob/HEAD/CHANGELOG.md#1780---2026-04-15) It adds 3 new rules and 1 configuration property. - Added: `languageOptions.directionality` configuration property ([#8687](stylelint/stylelint#8687)) ([@sw1tch3roo](https://github.com/sw1tch3roo)). - Added: `property-layout-mappings` rule ([#8687](stylelint/stylelint#8687)) ([@sw1tch3roo](https://github.com/sw1tch3roo)). - Added: `relative-selector-nesting-notation` rule ([#8730](stylelint/stylelint#8730)) ([@sw1tch3roo](https://github.com/sw1tch3roo)). - Added: `selector-no-deprecated` rule ([#8694](stylelint/stylelint#8694)) ([@immitsu](https://github.com/immitsu)). ## [v17.7.0](https://github.com/stylelint/stylelint/blob/HEAD/CHANGELOG.md#1770---2026-04-12) It fixes 4 bugs, including clearer problem messages by removing filler words and leading with the problem. We've also released `1.0.0` of [create-stylelint](https://github.com/stylelint/create-stylelint) to help with first-time Stylelint setup. - Fixed: clarity of problem messages ([#9199](stylelint/stylelint#9199)) ([@jeddy3](https://github.com/jeddy3)). - Fixed: `--print-config` CLI flag to hide internal properties ([#9194](stylelint/stylelint#9194)) ([@ybiquitous](https://github.com/ybiquitous)). - Fixed: `function-url-quotes` false positives when URLs have modifiers ([#8702](stylelint/stylelint#8702)) ([@immitsu](https://github.com/immitsu)). - Fixed: `selector-no-qualifying-type` false positives for `:has()` ([#9182](stylelint/stylelint#9182)) ([@romainmenke](https://github.com/romainmenke)). ## [v17.6.0](https://github.com/stylelint/stylelint/blob/HEAD/CHANGELOG.md#1760---2026-03-26) It adds support for extending units in `languageOptions`, which then apply to rules like `declaration-property-value-no-unknown`, and fixes 2 bugs. - Added: support for extending units to `languageOptions` ([#9166](stylelint/stylelint#9166)) ([@jeddy3](https://github.com/jeddy3)). - Fixed: missing `ruleMetadata` when linting multiple files with overrides ([#9154](stylelint/stylelint#9154)) ([@kovsu](https://github.com/kovsu)). - Fixed: `custom-property-no-missing-var-function` false positives for `timeline-scope` and `animation-timeline` ([#9164](stylelint/stylelint#9164)) ([@splincode](https://github.com/splincode)). ## [v17.5.0](https://github.com/stylelint/stylelint/blob/HEAD/CHANGELOG.md#1750---2026-03-19) It deprecates two rule options, adds 1 rule option and fixes 7 bugs. We've also released [`2.1.0`](https://github.com/stylelint/vscode-stylelint/releases/tag/2.1.0) of [our VS Code extension](https://marketplace.visualstudio.com/items?itemName=stylelint.vscode-stylelint), which adds 8 new requested features, and our [first release](https://www.npmjs.com/package/@stylelint/language-server) of the Stylelint Language Server. - Deprecated: `*syntax` options from `declaration-property-value-no-unknown` ([#9102](stylelint/stylelint#9102)) ([@ragini-pandey](https://github.com/ragini-pandey)). - Added: `ignoreMediaFeatureNameValues: {}` to `media-feature-name-value-no-unknown` ([#8976](stylelint/stylelint#8976)) ([@kovsu](https://github.com/kovsu)). - Fixed: `node_modules` not ignored when using `codeFilename` in Node.js API ([#9130](stylelint/stylelint#9130)) ([@adalinesimonian](https://github.com/adalinesimonian)). - Fixed: `Error TS7016` for imported `css-tree` types ([#9133](stylelint/stylelint#9133)) ([@ragini-pandey](https://github.com/ragini-pandey)). - Fixed: `declaration-property-value-keyword-no-deprecated` false positives for function arguments ([#9116](stylelint/stylelint#9116)) ([@ragini-pandey](https://github.com/ragini-pandey)). - Fixed: `declaration-property-value-no-unknown` false positives for `calc-size()` containing `size` keyword ([#9105](stylelint/stylelint#9105)) ([@hriztam](https://github.com/hriztam)). - Fixed: `no-descending-specificity` & `no-duplicate-selectors` false negatives for equivalent compound selectors ([#8977](stylelint/stylelint#8977)) ([@kovsu](https://github.com/kovsu)). - Fixed: `no-invalid-position-declaration` false positives for `@mixin` and `@scope` ([#9120](stylelint/stylelint#9120)) ([@ragini-pandey](https://github.com/ragini-pandey)). - Fixed: `property-no-unknown` false negatives for `types` ([#9117](stylelint/stylelint#9117)) ([@Mouvedia](https://github.com/Mouvedia)).
| datasource | package | from | to | | ---------- | --------- | ------ | ------ | | npm | stylelint | 17.4.0 | 17.9.1 | ## [v17.9.1](https://github.com/stylelint/stylelint/blob/HEAD/CHANGELOG.md#1791---2026-04-27) It fixes 4 bugs. We also documented the `messageArgs` each rule provides to the `message` configuration property. - Fixed: `ConfigurationError` regression for custom syntaxes ([#9245](stylelint/stylelint#9245)) ([@jeddy3](https://github.com/jeddy3)). - Fixed: MD5 hash algorithm to SHA256 for caching ([#9241](stylelint/stylelint#9241)) ([@rkdfx](https://github.com/rkdfx)). - Fixed: `property-no-deprecated` autofix for `page-break-*: always` ([#9214](stylelint/stylelint#9214)) ([@rkdfx](https://github.com/rkdfx)). - Fixed: `selector-no-deprecated` false positives for `::part()` ([#9227](stylelint/stylelint#9227)) ([@SaekiTominaga](https://github.com/SaekiTominaga)). ## [v17.9.0](https://github.com/stylelint/stylelint/blob/HEAD/CHANGELOG.md#1790---2026-04-23) It adds 3 new features. Adding the `referenceFiles` property to your configuration object makes the `no-unknown-animations`, `no-unknown-custom-media` and `no-unknown-custom-properties` rules more useful. - Added: experimental `referenceFiles` to configuration object ([#9179](stylelint/stylelint#9179)) ([@jeddy3](https://github.com/jeddy3)). - Added: experimental `abortSignal` option to Node.js API for cancellation support ([#9213](stylelint/stylelint#9213)) ([@adalinesimonian](https://github.com/adalinesimonian)). - Added: `maxWarnings` to configuration object ([#9181](stylelint/stylelint#9181)) ([@mrginglymus](https://github.com/mrginglymus)). ## [v17.8.0](https://github.com/stylelint/stylelint/blob/HEAD/CHANGELOG.md#1780---2026-04-15) It adds 3 new rules and 1 configuration property. - Added: `languageOptions.directionality` configuration property ([#8687](stylelint/stylelint#8687)) ([@sw1tch3roo](https://github.com/sw1tch3roo)). - Added: `property-layout-mappings` rule ([#8687](stylelint/stylelint#8687)) ([@sw1tch3roo](https://github.com/sw1tch3roo)). - Added: `relative-selector-nesting-notation` rule ([#8730](stylelint/stylelint#8730)) ([@sw1tch3roo](https://github.com/sw1tch3roo)). - Added: `selector-no-deprecated` rule ([#8694](stylelint/stylelint#8694)) ([@immitsu](https://github.com/immitsu)). ## [v17.7.0](https://github.com/stylelint/stylelint/blob/HEAD/CHANGELOG.md#1770---2026-04-12) It fixes 4 bugs, including clearer problem messages by removing filler words and leading with the problem. We've also released `1.0.0` of [create-stylelint](https://github.com/stylelint/create-stylelint) to help with first-time Stylelint setup. - Fixed: clarity of problem messages ([#9199](stylelint/stylelint#9199)) ([@jeddy3](https://github.com/jeddy3)). - Fixed: `--print-config` CLI flag to hide internal properties ([#9194](stylelint/stylelint#9194)) ([@ybiquitous](https://github.com/ybiquitous)). - Fixed: `function-url-quotes` false positives when URLs have modifiers ([#8702](stylelint/stylelint#8702)) ([@immitsu](https://github.com/immitsu)). - Fixed: `selector-no-qualifying-type` false positives for `:has()` ([#9182](stylelint/stylelint#9182)) ([@romainmenke](https://github.com/romainmenke)). ## [v17.6.0](https://github.com/stylelint/stylelint/blob/HEAD/CHANGELOG.md#1760---2026-03-26) It adds support for extending units in `languageOptions`, which then apply to rules like `declaration-property-value-no-unknown`, and fixes 2 bugs. - Added: support for extending units to `languageOptions` ([#9166](stylelint/stylelint#9166)) ([@jeddy3](https://github.com/jeddy3)). - Fixed: missing `ruleMetadata` when linting multiple files with overrides ([#9154](stylelint/stylelint#9154)) ([@kovsu](https://github.com/kovsu)). - Fixed: `custom-property-no-missing-var-function` false positives for `timeline-scope` and `animation-timeline` ([#9164](stylelint/stylelint#9164)) ([@splincode](https://github.com/splincode)). ## [v17.5.0](https://github.com/stylelint/stylelint/blob/HEAD/CHANGELOG.md#1750---2026-03-19) It deprecates two rule options, adds 1 rule option and fixes 7 bugs. We've also released [`2.1.0`](https://github.com/stylelint/vscode-stylelint/releases/tag/2.1.0) of [our VS Code extension](https://marketplace.visualstudio.com/items?itemName=stylelint.vscode-stylelint), which adds 8 new requested features, and our [first release](https://www.npmjs.com/package/@stylelint/language-server) of the Stylelint Language Server. - Deprecated: `*syntax` options from `declaration-property-value-no-unknown` ([#9102](stylelint/stylelint#9102)) ([@ragini-pandey](https://github.com/ragini-pandey)). - Added: `ignoreMediaFeatureNameValues: {}` to `media-feature-name-value-no-unknown` ([#8976](stylelint/stylelint#8976)) ([@kovsu](https://github.com/kovsu)). - Fixed: `node_modules` not ignored when using `codeFilename` in Node.js API ([#9130](stylelint/stylelint#9130)) ([@adalinesimonian](https://github.com/adalinesimonian)). - Fixed: `Error TS7016` for imported `css-tree` types ([#9133](stylelint/stylelint#9133)) ([@ragini-pandey](https://github.com/ragini-pandey)). - Fixed: `declaration-property-value-keyword-no-deprecated` false positives for function arguments ([#9116](stylelint/stylelint#9116)) ([@ragini-pandey](https://github.com/ragini-pandey)). - Fixed: `declaration-property-value-no-unknown` false positives for `calc-size()` containing `size` keyword ([#9105](stylelint/stylelint#9105)) ([@hriztam](https://github.com/hriztam)). - Fixed: `no-descending-specificity` & `no-duplicate-selectors` false negatives for equivalent compound selectors ([#8977](stylelint/stylelint#8977)) ([@kovsu](https://github.com/kovsu)). - Fixed: `no-invalid-position-declaration` false positives for `@mixin` and `@scope` ([#9120](stylelint/stylelint#9120)) ([@ragini-pandey](https://github.com/ragini-pandey)). - Fixed: `property-no-unknown` false negatives for `types` ([#9117](stylelint/stylelint#9117)) ([@Mouvedia](https://github.com/Mouvedia)).
| datasource | package | from | to | | ---------- | --------- | ------ | ------ | | npm | stylelint | 17.4.0 | 17.9.1 | ## [v17.9.1](https://github.com/stylelint/stylelint/blob/HEAD/CHANGELOG.md#1791---2026-04-27) It fixes 4 bugs. We also documented the `messageArgs` each rule provides to the `message` configuration property. - Fixed: `ConfigurationError` regression for custom syntaxes ([#9245](stylelint/stylelint#9245)) ([@jeddy3](https://github.com/jeddy3)). - Fixed: MD5 hash algorithm to SHA256 for caching ([#9241](stylelint/stylelint#9241)) ([@rkdfx](https://github.com/rkdfx)). - Fixed: `property-no-deprecated` autofix for `page-break-*: always` ([#9214](stylelint/stylelint#9214)) ([@rkdfx](https://github.com/rkdfx)). - Fixed: `selector-no-deprecated` false positives for `::part()` ([#9227](stylelint/stylelint#9227)) ([@SaekiTominaga](https://github.com/SaekiTominaga)). ## [v17.9.0](https://github.com/stylelint/stylelint/blob/HEAD/CHANGELOG.md#1790---2026-04-23) It adds 3 new features. Adding the `referenceFiles` property to your configuration object makes the `no-unknown-animations`, `no-unknown-custom-media` and `no-unknown-custom-properties` rules more useful. - Added: experimental `referenceFiles` to configuration object ([#9179](stylelint/stylelint#9179)) ([@jeddy3](https://github.com/jeddy3)). - Added: experimental `abortSignal` option to Node.js API for cancellation support ([#9213](stylelint/stylelint#9213)) ([@adalinesimonian](https://github.com/adalinesimonian)). - Added: `maxWarnings` to configuration object ([#9181](stylelint/stylelint#9181)) ([@mrginglymus](https://github.com/mrginglymus)). ## [v17.8.0](https://github.com/stylelint/stylelint/blob/HEAD/CHANGELOG.md#1780---2026-04-15) It adds 3 new rules and 1 configuration property. - Added: `languageOptions.directionality` configuration property ([#8687](stylelint/stylelint#8687)) ([@sw1tch3roo](https://github.com/sw1tch3roo)). - Added: `property-layout-mappings` rule ([#8687](stylelint/stylelint#8687)) ([@sw1tch3roo](https://github.com/sw1tch3roo)). - Added: `relative-selector-nesting-notation` rule ([#8730](stylelint/stylelint#8730)) ([@sw1tch3roo](https://github.com/sw1tch3roo)). - Added: `selector-no-deprecated` rule ([#8694](stylelint/stylelint#8694)) ([@immitsu](https://github.com/immitsu)). ## [v17.7.0](https://github.com/stylelint/stylelint/blob/HEAD/CHANGELOG.md#1770---2026-04-12) It fixes 4 bugs, including clearer problem messages by removing filler words and leading with the problem. We've also released `1.0.0` of [create-stylelint](https://github.com/stylelint/create-stylelint) to help with first-time Stylelint setup. - Fixed: clarity of problem messages ([#9199](stylelint/stylelint#9199)) ([@jeddy3](https://github.com/jeddy3)). - Fixed: `--print-config` CLI flag to hide internal properties ([#9194](stylelint/stylelint#9194)) ([@ybiquitous](https://github.com/ybiquitous)). - Fixed: `function-url-quotes` false positives when URLs have modifiers ([#8702](stylelint/stylelint#8702)) ([@immitsu](https://github.com/immitsu)). - Fixed: `selector-no-qualifying-type` false positives for `:has()` ([#9182](stylelint/stylelint#9182)) ([@romainmenke](https://github.com/romainmenke)). ## [v17.6.0](https://github.com/stylelint/stylelint/blob/HEAD/CHANGELOG.md#1760---2026-03-26) It adds support for extending units in `languageOptions`, which then apply to rules like `declaration-property-value-no-unknown`, and fixes 2 bugs. - Added: support for extending units to `languageOptions` ([#9166](stylelint/stylelint#9166)) ([@jeddy3](https://github.com/jeddy3)). - Fixed: missing `ruleMetadata` when linting multiple files with overrides ([#9154](stylelint/stylelint#9154)) ([@kovsu](https://github.com/kovsu)). - Fixed: `custom-property-no-missing-var-function` false positives for `timeline-scope` and `animation-timeline` ([#9164](stylelint/stylelint#9164)) ([@splincode](https://github.com/splincode)). ## [v17.5.0](https://github.com/stylelint/stylelint/blob/HEAD/CHANGELOG.md#1750---2026-03-19) It deprecates two rule options, adds 1 rule option and fixes 7 bugs. We've also released [`2.1.0`](https://github.com/stylelint/vscode-stylelint/releases/tag/2.1.0) of [our VS Code extension](https://marketplace.visualstudio.com/items?itemName=stylelint.vscode-stylelint), which adds 8 new requested features, and our [first release](https://www.npmjs.com/package/@stylelint/language-server) of the Stylelint Language Server. - Deprecated: `*syntax` options from `declaration-property-value-no-unknown` ([#9102](stylelint/stylelint#9102)) ([@ragini-pandey](https://github.com/ragini-pandey)). - Added: `ignoreMediaFeatureNameValues: {}` to `media-feature-name-value-no-unknown` ([#8976](stylelint/stylelint#8976)) ([@kovsu](https://github.com/kovsu)). - Fixed: `node_modules` not ignored when using `codeFilename` in Node.js API ([#9130](stylelint/stylelint#9130)) ([@adalinesimonian](https://github.com/adalinesimonian)). - Fixed: `Error TS7016` for imported `css-tree` types ([#9133](stylelint/stylelint#9133)) ([@ragini-pandey](https://github.com/ragini-pandey)). - Fixed: `declaration-property-value-keyword-no-deprecated` false positives for function arguments ([#9116](stylelint/stylelint#9116)) ([@ragini-pandey](https://github.com/ragini-pandey)). - Fixed: `declaration-property-value-no-unknown` false positives for `calc-size()` containing `size` keyword ([#9105](stylelint/stylelint#9105)) ([@hriztam](https://github.com/hriztam)). - Fixed: `no-descending-specificity` & `no-duplicate-selectors` false negatives for equivalent compound selectors ([#8977](stylelint/stylelint#8977)) ([@kovsu](https://github.com/kovsu)). - Fixed: `no-invalid-position-declaration` false positives for `@mixin` and `@scope` ([#9120](stylelint/stylelint#9120)) ([@ragini-pandey](https://github.com/ragini-pandey)). - Fixed: `property-no-unknown` false negatives for `types` ([#9117](stylelint/stylelint#9117)) ([@Mouvedia](https://github.com/Mouvedia)).
Closes #9103
Closes #9106
This continues the patches contributes by @ragini-pandey in #9106
For examples of the cases it fixes see this commit with the original algorithm as found in #9106 : https://github.com/stylelint/stylelint/actions/runs/23617908817/job/68789988265
I am unsure if this change is correct and following our conventions and best practices.
The
isSelectorContainingPseudoClassfunction is used in multiple locations in this rule including ingroupByCompoundSelectors. But it isn't a generally useful utility. The definition of selector containing pseudo classes is directly tied to this rule. So I don't want to move it to our general utilities where it might cause confusion.The same is true for
getCompoundSelectors, it is a neat function, but I don't think it is ready to be used in other rules.At the same time there is a need for unit tests for the
groupByCompoundSelectorsfunction. With our regular rule tests it is only possible to test for expected lint warnings. Validating the behavior of individual functions must always be expressed through triggered warnings.Is it ok that I added extra files and tests in the directory of this rule?