Fix no-duplicate-selectors false negatives for matching escaped selectors#8953
Conversation
🦋 Changeset detectedLatest commit: 6a23b3b 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 |
no-duplicate-selectors false negatives for matching escaped selectors
There was a problem hiding this comment.
@bjnewman
Thank you for your pull request. Generally looks good.
I've left some comments. Can you also add a patch changeset:
Fixed: `no-duplicate-selectors` false negatives for matching escaped selectors
Lastly, can you change the base to v17, please? We're gearing up for a major release and are trying to minimise conflicts between main and it.
76e27a2 to
3ce44d4
Compare
|
Yes, scoped to ClassName only. I checked postcss-selector-parser source - only ClassName has the getter/setter that normalizes escaping (via cssesc). ID inherits from Node without this, and Attribute has a different (deprecated) setter behavior. Supporting ID/Attribute would require upstream changes to postcss-selector-parser. |
|
This PR is packaged and the instant preview is available (6a23b3b). View the demo website. Install it locally: npm i -D https://pkg.pr.new/stylelint@6a23b3b |
ybiquitous
left a comment
There was a problem hiding this comment.
@bjnewman Thanks for the pull request, and sorry for the late response.
Can you please take a look at my reviews? Thanks.
3517490 to
64fae37
Compare
|
Updated the PR with all the review feedback — rebased onto main, combined the walks, added the raws.value early-return with @ts-expect-error, moved the function, and added a patch changeset. Thanks for the helpful reviews! |
| datasource | package | from | to | | ---------- | --------- | ------ | ------ | | npm | stylelint | 17.1.0 | 17.2.0 | ## [v17.2.0](https://github.com/stylelint/stylelint/blob/HEAD/CHANGELOG.md#1720---2026-02-10) It fixes 7 bugs, including 5 performance ones that make Stylelint 7x faster and use 3x less memory on larger codebases such as design systems and monorepos. We also restructured our docs to create a [contributor guide](CONTRIBUTING.md). If you'd like to help out and contribute to Stylelint, that's the place to start. - Fixed: performance of config augmentation and module imports ([#9021](stylelint/stylelint#9021)) ([@adalinesimonian](https://github.com/adalinesimonian)). - Fixed: performance of config override matching ([#9023](stylelint/stylelint#9023)) ([@adalinesimonian](https://github.com/adalinesimonian)). - Fixed: performance of config resolution ([#9033](stylelint/stylelint#9033)) ([@adalinesimonian](https://github.com/adalinesimonian)). - Fixed: performance of rule resolution ([#9022](stylelint/stylelint#9022)) ([@adalinesimonian](https://github.com/adalinesimonian)). - Fixed: `declaration-property-value-no-unknown` false negatives for math functions ([#9011](stylelint/stylelint#9011)) ([@ragini-pandey](https://github.com/ragini-pandey)). - Fixed: `no-duplicate-selectors` false negatives for matching escaped selectors ([#8953](stylelint/stylelint#8953)) ([@bjnewman](https://github.com/bjnewman)). - Fixed: `no-invalid-position-at-import-rule` false negatives for layers with blocks ([#9026](stylelint/stylelint#9026)) ([@romainmenke](https://github.com/romainmenke)). ## [v17.1.1](https://github.com/stylelint/stylelint/blob/HEAD/CHANGELOG.md#1711---2026-02-03) It fixes 2 bugs. - Fixed: resolution of configs, plugins, processors, and custom syntaxes in Yarn PnP environments ([#9010](stylelint/stylelint#9010)) ([@adalinesimonian](https://github.com/adalinesimonian)). - Fixed: `lightness-notation` autofix for decimals ([#9009](stylelint/stylelint#9009)) ([@IlyaSemenov](https://github.com/IlyaSemenov)).
| datasource | package | from | to | | ---------- | --------- | ------ | ------ | | npm | stylelint | 17.1.0 | 17.3.0 | ## [v17.3.0](https://github.com/stylelint/stylelint/blob/HEAD/CHANGELOG.md#1730---2026-02-13) It fixes 17 bugs. 3 related to supporting `calc()` in `declaration-property-value-no-unknown`, and 13 performance ones that make Stylelint a further 3x faster when using the rules in our [standard config](https://www.npmjs.com/package/stylelint-config-standard). - Fixed: performance of rule sequencing ([#9055](stylelint/stylelint#9055)) ([@jeddy3](https://github.com/jeddy3)). - Fixed: `*-list` performance ([#9056](stylelint/stylelint#9056)) ([@jeddy3](https://github.com/jeddy3)). - Fixed: `*-notation` performance ([#9044](stylelint/stylelint#9044)) ([@jeddy3](https://github.com/jeddy3)). - Fixed: `declaration-property-max-values` performance ([#9057](stylelint/stylelint#9057)) ([@jeddy3](https://github.com/jeddy3)). - Fixed: `declaration-property-value-keyword-no-deprecated` performance ([#9058](stylelint/stylelint#9058)) ([@jeddy3](https://github.com/jeddy3)). - Fixed: `declaration-property-value-no-unknown` false negatives for math functions inside of non-math functions ([#9064](stylelint/stylelint#9064)) ([@romainmenke](https://github.com/romainmenke)). - Fixed: `declaration-property-value-no-unknown` false positives for `calc()` with mixed operations ([#9064](stylelint/stylelint#9064)) ([@romainmenke](https://github.com/romainmenke)). - Fixed: `declaration-property-value-no-unknown` performance ([#9062](stylelint/stylelint#9062)) ([@jeddy3](https://github.com/jeddy3)). - Fixed: `declaration-property-value-no-unknown` reported ranges for multiple math functions ([#9064](stylelint/stylelint#9064)) ([@romainmenke](https://github.com/romainmenke)). - Fixed: `length-zero-no-unit` performance ([#9046](stylelint/stylelint#9046)) ([@jeddy3](https://github.com/jeddy3)). - Fixed: `named-grid-areas-no-invalid` false positives for mix of tabs and spaces ([#9039](stylelint/stylelint#9039)) ([@adalinesimonian](https://github.com/adalinesimonian)). - Fixed: `no-unknown-custom-media` performance ([#9059](stylelint/stylelint#9059)) ([@jeddy3](https://github.com/jeddy3)). - Fixed: `selector-max-*` performance ([#9042](stylelint/stylelint#9042)) ([@jeddy3](https://github.com/jeddy3)). - Fixed: `shorthand-property-no-redundant-values` performance ([#9047](stylelint/stylelint#9047)) ([@jeddy3](https://github.com/jeddy3)). - Fixed: `syntax-string-no-invalid` performance ([#9061](stylelint/stylelint#9061)) ([@jeddy3](https://github.com/jeddy3)). - Fixed: `time-min-milliseconds` performance ([#9060](stylelint/stylelint#9060)) ([@jeddy3](https://github.com/jeddy3)). - Fixed: `value-keyword-case` performance ([#9048](stylelint/stylelint#9048)) ([@jeddy3](https://github.com/jeddy3)). ## [v17.2.0](https://github.com/stylelint/stylelint/blob/HEAD/CHANGELOG.md#1720---2026-02-10) It fixes 7 bugs, including 5 performance ones that make Stylelint 7x faster and use 3x less memory on larger codebases such as design systems and monorepos. We also restructured our docs to create a [contributor guide](CONTRIBUTING.md). If you'd like to help out and contribute to Stylelint, that's the place to start. - Fixed: performance of config augmentation and module imports ([#9021](stylelint/stylelint#9021)) ([@adalinesimonian](https://github.com/adalinesimonian)). - Fixed: performance of config override matching ([#9023](stylelint/stylelint#9023)) ([@adalinesimonian](https://github.com/adalinesimonian)). - Fixed: performance of config resolution ([#9033](stylelint/stylelint#9033)) ([@adalinesimonian](https://github.com/adalinesimonian)). - Fixed: performance of rule resolution ([#9022](stylelint/stylelint#9022)) ([@adalinesimonian](https://github.com/adalinesimonian)). - Fixed: `declaration-property-value-no-unknown` false negatives for math functions ([#9011](stylelint/stylelint#9011)) ([@ragini-pandey](https://github.com/ragini-pandey)). - Fixed: `no-duplicate-selectors` false negatives for matching escaped selectors ([#8953](stylelint/stylelint#8953)) ([@bjnewman](https://github.com/bjnewman)). - Fixed: `no-invalid-position-at-import-rule` false negatives for layers with blocks ([#9026](stylelint/stylelint#9026)) ([@romainmenke](https://github.com/romainmenke)). ## [v17.1.1](https://github.com/stylelint/stylelint/blob/HEAD/CHANGELOG.md#1711---2026-02-03) It fixes 2 bugs. - Fixed: resolution of configs, plugins, processors, and custom syntaxes in Yarn PnP environments ([#9010](stylelint/stylelint#9010)) ([@adalinesimonian](https://github.com/adalinesimonian)). - Fixed: `lightness-notation` autofix for decimals ([#9009](stylelint/stylelint#9009)) ([@IlyaSemenov](https://github.com/IlyaSemenov)).
| datasource | package | from | to | | ---------- | --------- | ------ | ------ | | npm | stylelint | 17.1.0 | 17.3.0 | ## [v17.3.0](https://github.com/stylelint/stylelint/blob/HEAD/CHANGELOG.md#1730---2026-02-13) It fixes 17 bugs. 3 related to supporting `calc()` in `declaration-property-value-no-unknown`, and 13 performance ones that make Stylelint a further 3x faster when using the rules in our [standard config](https://www.npmjs.com/package/stylelint-config-standard). - Fixed: performance of rule sequencing ([#9055](stylelint/stylelint#9055)) ([@jeddy3](https://github.com/jeddy3)). - Fixed: `*-list` performance ([#9056](stylelint/stylelint#9056)) ([@jeddy3](https://github.com/jeddy3)). - Fixed: `*-notation` performance ([#9044](stylelint/stylelint#9044)) ([@jeddy3](https://github.com/jeddy3)). - Fixed: `declaration-property-max-values` performance ([#9057](stylelint/stylelint#9057)) ([@jeddy3](https://github.com/jeddy3)). - Fixed: `declaration-property-value-keyword-no-deprecated` performance ([#9058](stylelint/stylelint#9058)) ([@jeddy3](https://github.com/jeddy3)). - Fixed: `declaration-property-value-no-unknown` false negatives for math functions inside of non-math functions ([#9064](stylelint/stylelint#9064)) ([@romainmenke](https://github.com/romainmenke)). - Fixed: `declaration-property-value-no-unknown` false positives for `calc()` with mixed operations ([#9064](stylelint/stylelint#9064)) ([@romainmenke](https://github.com/romainmenke)). - Fixed: `declaration-property-value-no-unknown` performance ([#9062](stylelint/stylelint#9062)) ([@jeddy3](https://github.com/jeddy3)). - Fixed: `declaration-property-value-no-unknown` reported ranges for multiple math functions ([#9064](stylelint/stylelint#9064)) ([@romainmenke](https://github.com/romainmenke)). - Fixed: `length-zero-no-unit` performance ([#9046](stylelint/stylelint#9046)) ([@jeddy3](https://github.com/jeddy3)). - Fixed: `named-grid-areas-no-invalid` false positives for mix of tabs and spaces ([#9039](stylelint/stylelint#9039)) ([@adalinesimonian](https://github.com/adalinesimonian)). - Fixed: `no-unknown-custom-media` performance ([#9059](stylelint/stylelint#9059)) ([@jeddy3](https://github.com/jeddy3)). - Fixed: `selector-max-*` performance ([#9042](stylelint/stylelint#9042)) ([@jeddy3](https://github.com/jeddy3)). - Fixed: `shorthand-property-no-redundant-values` performance ([#9047](stylelint/stylelint#9047)) ([@jeddy3](https://github.com/jeddy3)). - Fixed: `syntax-string-no-invalid` performance ([#9061](stylelint/stylelint#9061)) ([@jeddy3](https://github.com/jeddy3)). - Fixed: `time-min-milliseconds` performance ([#9060](stylelint/stylelint#9060)) ([@jeddy3](https://github.com/jeddy3)). - Fixed: `value-keyword-case` performance ([#9048](stylelint/stylelint#9048)) ([@jeddy3](https://github.com/jeddy3)). ## [v17.2.0](https://github.com/stylelint/stylelint/blob/HEAD/CHANGELOG.md#1720---2026-02-10) It fixes 7 bugs, including 5 performance ones that make Stylelint 7x faster and use 3x less memory on larger codebases such as design systems and monorepos. We also restructured our docs to create a [contributor guide](CONTRIBUTING.md). If you'd like to help out and contribute to Stylelint, that's the place to start. - Fixed: performance of config augmentation and module imports ([#9021](stylelint/stylelint#9021)) ([@adalinesimonian](https://github.com/adalinesimonian)). - Fixed: performance of config override matching ([#9023](stylelint/stylelint#9023)) ([@adalinesimonian](https://github.com/adalinesimonian)). - Fixed: performance of config resolution ([#9033](stylelint/stylelint#9033)) ([@adalinesimonian](https://github.com/adalinesimonian)). - Fixed: performance of rule resolution ([#9022](stylelint/stylelint#9022)) ([@adalinesimonian](https://github.com/adalinesimonian)). - Fixed: `declaration-property-value-no-unknown` false negatives for math functions ([#9011](stylelint/stylelint#9011)) ([@ragini-pandey](https://github.com/ragini-pandey)). - Fixed: `no-duplicate-selectors` false negatives for matching escaped selectors ([#8953](stylelint/stylelint#8953)) ([@bjnewman](https://github.com/bjnewman)). - Fixed: `no-invalid-position-at-import-rule` false negatives for layers with blocks ([#9026](stylelint/stylelint#9026)) ([@romainmenke](https://github.com/romainmenke)). ## [v17.1.1](https://github.com/stylelint/stylelint/blob/HEAD/CHANGELOG.md#1711---2026-02-03) It fixes 2 bugs. - Fixed: resolution of configs, plugins, processors, and custom syntaxes in Yarn PnP environments ([#9010](stylelint/stylelint#9010)) ([@adalinesimonian](https://github.com/adalinesimonian)). - Fixed: `lightness-notation` autofix for decimals ([#9009](stylelint/stylelint#9009)) ([@IlyaSemenov](https://github.com/IlyaSemenov)).
| datasource | package | from | to | | ---------- | --------- | ------ | ------ | | npm | stylelint | 17.1.0 | 17.3.0 | ## [v17.3.0](https://github.com/stylelint/stylelint/blob/HEAD/CHANGELOG.md#1730---2026-02-13) It fixes 17 bugs. 3 related to supporting `calc()` in `declaration-property-value-no-unknown`, and 13 performance ones that make Stylelint a further 3x faster when using the rules in our [standard config](https://www.npmjs.com/package/stylelint-config-standard). - Fixed: performance of rule sequencing ([#9055](stylelint/stylelint#9055)) ([@jeddy3](https://github.com/jeddy3)). - Fixed: `*-list` performance ([#9056](stylelint/stylelint#9056)) ([@jeddy3](https://github.com/jeddy3)). - Fixed: `*-notation` performance ([#9044](stylelint/stylelint#9044)) ([@jeddy3](https://github.com/jeddy3)). - Fixed: `declaration-property-max-values` performance ([#9057](stylelint/stylelint#9057)) ([@jeddy3](https://github.com/jeddy3)). - Fixed: `declaration-property-value-keyword-no-deprecated` performance ([#9058](stylelint/stylelint#9058)) ([@jeddy3](https://github.com/jeddy3)). - Fixed: `declaration-property-value-no-unknown` false negatives for math functions inside of non-math functions ([#9064](stylelint/stylelint#9064)) ([@romainmenke](https://github.com/romainmenke)). - Fixed: `declaration-property-value-no-unknown` false positives for `calc()` with mixed operations ([#9064](stylelint/stylelint#9064)) ([@romainmenke](https://github.com/romainmenke)). - Fixed: `declaration-property-value-no-unknown` performance ([#9062](stylelint/stylelint#9062)) ([@jeddy3](https://github.com/jeddy3)). - Fixed: `declaration-property-value-no-unknown` reported ranges for multiple math functions ([#9064](stylelint/stylelint#9064)) ([@romainmenke](https://github.com/romainmenke)). - Fixed: `length-zero-no-unit` performance ([#9046](stylelint/stylelint#9046)) ([@jeddy3](https://github.com/jeddy3)). - Fixed: `named-grid-areas-no-invalid` false positives for mix of tabs and spaces ([#9039](stylelint/stylelint#9039)) ([@adalinesimonian](https://github.com/adalinesimonian)). - Fixed: `no-unknown-custom-media` performance ([#9059](stylelint/stylelint#9059)) ([@jeddy3](https://github.com/jeddy3)). - Fixed: `selector-max-*` performance ([#9042](stylelint/stylelint#9042)) ([@jeddy3](https://github.com/jeddy3)). - Fixed: `shorthand-property-no-redundant-values` performance ([#9047](stylelint/stylelint#9047)) ([@jeddy3](https://github.com/jeddy3)). - Fixed: `syntax-string-no-invalid` performance ([#9061](stylelint/stylelint#9061)) ([@jeddy3](https://github.com/jeddy3)). - Fixed: `time-min-milliseconds` performance ([#9060](stylelint/stylelint#9060)) ([@jeddy3](https://github.com/jeddy3)). - Fixed: `value-keyword-case` performance ([#9048](stylelint/stylelint#9048)) ([@jeddy3](https://github.com/jeddy3)). ## [v17.2.0](https://github.com/stylelint/stylelint/blob/HEAD/CHANGELOG.md#1720---2026-02-10) It fixes 7 bugs, including 5 performance ones that make Stylelint 7x faster and use 3x less memory on larger codebases such as design systems and monorepos. We also restructured our docs to create a [contributor guide](CONTRIBUTING.md). If you'd like to help out and contribute to Stylelint, that's the place to start. - Fixed: performance of config augmentation and module imports ([#9021](stylelint/stylelint#9021)) ([@adalinesimonian](https://github.com/adalinesimonian)). - Fixed: performance of config override matching ([#9023](stylelint/stylelint#9023)) ([@adalinesimonian](https://github.com/adalinesimonian)). - Fixed: performance of config resolution ([#9033](stylelint/stylelint#9033)) ([@adalinesimonian](https://github.com/adalinesimonian)). - Fixed: performance of rule resolution ([#9022](stylelint/stylelint#9022)) ([@adalinesimonian](https://github.com/adalinesimonian)). - Fixed: `declaration-property-value-no-unknown` false negatives for math functions ([#9011](stylelint/stylelint#9011)) ([@ragini-pandey](https://github.com/ragini-pandey)). - Fixed: `no-duplicate-selectors` false negatives for matching escaped selectors ([#8953](stylelint/stylelint#8953)) ([@bjnewman](https://github.com/bjnewman)). - Fixed: `no-invalid-position-at-import-rule` false negatives for layers with blocks ([#9026](stylelint/stylelint#9026)) ([@romainmenke](https://github.com/romainmenke)). ## [v17.1.1](https://github.com/stylelint/stylelint/blob/HEAD/CHANGELOG.md#1711---2026-02-03) It fixes 2 bugs. - Fixed: resolution of configs, plugins, processors, and custom syntaxes in Yarn PnP environments ([#9010](stylelint/stylelint#9010)) ([@adalinesimonian](https://github.com/adalinesimonian)). - Fixed: `lightness-notation` autofix for decimals ([#9009](stylelint/stylelint#9009)) ([@IlyaSemenov](https://github.com/IlyaSemenov)).
This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [eslint](https://eslint.org) ([source](https://github.com/eslint/eslint)) | devDependencies | patch | [`9.39.2` -> `9.39.3`](https://renovatebot.com/diffs/npm/eslint/9.39.2/9.39.3) | | [prettier](https://prettier.io) ([source](https://github.com/prettier/prettier)) | devDependencies | patch | [`3.8.0` -> `3.8.1`](https://renovatebot.com/diffs/npm/prettier/3.8.0/3.8.1) | | [stylelint](https://stylelint.io) ([source](https://github.com/stylelint/stylelint)) | devDependencies | minor | [`17.0.0` -> `17.4.0`](https://renovatebot.com/diffs/npm/stylelint/17.0.0/17.4.0) | --- ### Release Notes <details> <summary>eslint/eslint (eslint)</summary> ### [`v9.39.3`](https://github.com/eslint/eslint/releases/tag/v9.39.3) [Compare Source](eslint/eslint@v9.39.2...v9.39.3) #### Bug Fixes - [`791bf8d`](eslint/eslint@791bf8d) fix: restore TypeScript 4.0 compatibility in types ([#​20504](eslint/eslint#20504)) (sethamus) #### Chores - [`8594a43`](eslint/eslint@8594a43) chore: upgrade [@​eslint/js](https://github.com/eslint/js)@​9.39.3 ([#​20529](eslint/eslint#20529)) (Milos Djermanovic) - [`9ceef92`](eslint/eslint@9ceef92) chore: package.json update for [@​eslint/js](https://github.com/eslint/js) release (Jenkins) - [`af498c6`](eslint/eslint@af498c6) chore: ignore `/docs/v9.x` in link checker ([#​20453](eslint/eslint#20453)) (Milos Djermanovic) </details> <details> <summary>prettier/prettier (prettier)</summary> ### [`v3.8.1`](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#381) [Compare Source](prettier/prettier@3.8.0...3.8.1) [diff](prettier/prettier@3.8.0...3.8.1) ##### Include available `printers` in plugin type declarations ([#​18706](prettier/prettier#18706) by [@​porada](https://github.com/porada)) <!-- prettier-ignore --> ```ts // Input import * as prettierPluginEstree from "prettier/plugins/estree"; // Prettier 3.8.0 // Property 'printers' does not exist on type 'typeof import("prettier/plugins/estree")'. ts(2339) prettierPluginEstree.printers.estree; //=> any // Prettier 3.8.1 prettierPluginEstree.printers.estree; //=> Printer prettierPluginEstree.printers["estree-json"]; //=> Printer ``` </details> <details> <summary>stylelint/stylelint (stylelint)</summary> ### [`v17.4.0`](https://github.com/stylelint/stylelint/blob/HEAD/CHANGELOG.md#1740---2026-02-25) [Compare Source](stylelint/stylelint@17.3.0...17.4.0) It adds 2 options to the rules and fixes 7 bugs. - Added: `ignoreAtRules: []` to `at-rule-no-vendor-prefix` ([#​9096](stylelint/stylelint#9096)) ([@​theacrat](https://github.com/theacrat)). - Added: `ignoreMediaFeatureNames: []` to `media-feature-name-no-vendor-prefix` ([#​9097](stylelint/stylelint#9097)) ([@​theacrat](https://github.com/theacrat)). - Fixed: performance of selector cloning rules ([#​9089](stylelint/stylelint#9089)) ([@​jeddy3](https://github.com/jeddy3)). - Fixed: `*-empty-line-before` performance ([#​9092](stylelint/stylelint#9092)) ([@​jeddy3](https://github.com/jeddy3)). - Fixed: `declaration-property-value-no-unknown` performance ([#​9090](stylelint/stylelint#9090)) ([@​jeddy3](https://github.com/jeddy3)). - Fixed: `no-irregular-whitespace` performance ([#​9091](stylelint/stylelint#9091)) ([@​jeddy3](https://github.com/jeddy3)). - Fixed: `property-no-unknown` false negatives for at-rule descriptors ([#​9109](stylelint/stylelint#9109)) ([@​jeddy3](https://github.com/jeddy3)). - Fixed: `property-no-unknown` false positives for `corner-shape` ([#​9099](stylelint/stylelint#9099)) ([@​jeddy3](https://github.com/jeddy3)). - Fixed: `property-no-unknown` false positives for double-slashed properties ([#​9099](stylelint/stylelint#9099)) ([@​jeddy3](https://github.com/jeddy3)). ### [`v17.3.0`](https://github.com/stylelint/stylelint/blob/HEAD/CHANGELOG.md#1730---2026-02-13) [Compare Source](stylelint/stylelint@17.2.0...17.3.0) It fixes 17 bugs. 3 related to supporting `calc()` in `declaration-property-value-no-unknown`, and 13 performance ones that make Stylelint a further 3x faster when using the rules in our [standard config](https://www.npmjs.com/package/stylelint-config-standard). - Fixed: performance of rule sequencing ([#​9055](stylelint/stylelint#9055)) ([@​jeddy3](https://github.com/jeddy3)). - Fixed: `*-list` performance ([#​9056](stylelint/stylelint#9056)) ([@​jeddy3](https://github.com/jeddy3)). - Fixed: `*-notation` performance ([#​9044](stylelint/stylelint#9044)) ([@​jeddy3](https://github.com/jeddy3)). - Fixed: `declaration-property-max-values` performance ([#​9057](stylelint/stylelint#9057)) ([@​jeddy3](https://github.com/jeddy3)). - Fixed: `declaration-property-value-keyword-no-deprecated` performance ([#​9058](stylelint/stylelint#9058)) ([@​jeddy3](https://github.com/jeddy3)). - Fixed: `declaration-property-value-no-unknown` false negatives for math functions inside of non-math functions ([#​9064](stylelint/stylelint#9064)) ([@​romainmenke](https://github.com/romainmenke)). - Fixed: `declaration-property-value-no-unknown` false positives for `calc()` with mixed operations ([#​9064](stylelint/stylelint#9064)) ([@​romainmenke](https://github.com/romainmenke)). - Fixed: `declaration-property-value-no-unknown` performance ([#​9062](stylelint/stylelint#9062)) ([@​jeddy3](https://github.com/jeddy3)). - Fixed: `declaration-property-value-no-unknown` reported ranges for multiple math functions ([#​9064](stylelint/stylelint#9064)) ([@​romainmenke](https://github.com/romainmenke)). - Fixed: `length-zero-no-unit` performance ([#​9046](stylelint/stylelint#9046)) ([@​jeddy3](https://github.com/jeddy3)). - Fixed: `named-grid-areas-no-invalid` false positives for mix of tabs and spaces ([#​9039](stylelint/stylelint#9039)) ([@​adalinesimonian](https://github.com/adalinesimonian)). - Fixed: `no-unknown-custom-media` performance ([#​9059](stylelint/stylelint#9059)) ([@​jeddy3](https://github.com/jeddy3)). - Fixed: `selector-max-*` performance ([#​9042](stylelint/stylelint#9042)) ([@​jeddy3](https://github.com/jeddy3)). - Fixed: `shorthand-property-no-redundant-values` performance ([#​9047](stylelint/stylelint#9047)) ([@​jeddy3](https://github.com/jeddy3)). - Fixed: `syntax-string-no-invalid` performance ([#​9061](stylelint/stylelint#9061)) ([@​jeddy3](https://github.com/jeddy3)). - Fixed: `time-min-milliseconds` performance ([#​9060](stylelint/stylelint#9060)) ([@​jeddy3](https://github.com/jeddy3)). - Fixed: `value-keyword-case` performance ([#​9048](stylelint/stylelint#9048)) ([@​jeddy3](https://github.com/jeddy3)). ### [`v17.2.0`](https://github.com/stylelint/stylelint/blob/HEAD/CHANGELOG.md#1720---2026-02-10) [Compare Source](stylelint/stylelint@17.1.1...17.2.0) It fixes 7 bugs, including 5 performance ones that make Stylelint 7x faster and use 3x less memory on larger codebases such as design systems and monorepos. We also restructured our docs to create a [contributor guide](CONTRIBUTING.md). If you'd like to help out and contribute to Stylelint, that's the place to start. - Fixed: performance of config augmentation and module imports ([#​9021](stylelint/stylelint#9021)) ([@​adalinesimonian](https://github.com/adalinesimonian)). - Fixed: performance of config override matching ([#​9023](stylelint/stylelint#9023)) ([@​adalinesimonian](https://github.com/adalinesimonian)). - Fixed: performance of config resolution ([#​9033](stylelint/stylelint#9033)) ([@​adalinesimonian](https://github.com/adalinesimonian)). - Fixed: performance of rule resolution ([#​9022](stylelint/stylelint#9022)) ([@​adalinesimonian](https://github.com/adalinesimonian)). - Fixed: `declaration-property-value-no-unknown` false negatives for math functions ([#​9011](stylelint/stylelint#9011)) ([@​ragini-pandey](https://github.com/ragini-pandey)). - Fixed: `no-duplicate-selectors` false negatives for matching escaped selectors ([#​8953](stylelint/stylelint#8953)) ([@​bjnewman](https://github.com/bjnewman)). - Fixed: `no-invalid-position-at-import-rule` false negatives for layers with blocks ([#​9026](stylelint/stylelint#9026)) ([@​romainmenke](https://github.com/romainmenke)). ### [`v17.1.1`](https://github.com/stylelint/stylelint/blob/HEAD/CHANGELOG.md#1711---2026-02-03) [Compare Source](stylelint/stylelint@17.1.0...17.1.1) It fixes 2 bugs. - Fixed: resolution of configs, plugins, processors, and custom syntaxes in Yarn PnP environments ([#​9010](stylelint/stylelint#9010)) ([@​adalinesimonian](https://github.com/adalinesimonian)). - Fixed: `lightness-notation` autofix for decimals ([#​9009](stylelint/stylelint#9009)) ([@​IlyaSemenov](https://github.com/IlyaSemenov)). ### [`v17.1.0`](https://github.com/stylelint/stylelint/blob/HEAD/CHANGELOG.md#1710---2026-01-30) [Compare Source](stylelint/stylelint@17.0.0...17.1.0) It fixes 5 bugs and adds the `display-notation` rule. Before we turn it on in our [standard config](https://www.npmjs.com/package/stylelint-config-standard), we'd like to [hear the community's thoughts](stylelint/stylelint-config-standard#387) on which options to use. - Added: `display-notation` rule ([#​8981](stylelint/stylelint#8981)) ([@​romainmenke](https://github.com/romainmenke)). - Fixed: `GlobbyOptions` TypeScript errors ([#​8992](stylelint/stylelint#8992)) ([@​zalishchuk](https://github.com/zalishchuk)). - Fixed: `hue-degree-notation` false negatives and positives for relative colors ([#​8985](stylelint/stylelint#8985)) ([@​jamesnw](https://github.com/jamesnw)). - Fixed: `lightness-notation` false negatives for relative colors ([#​8987](stylelint/stylelint#8987)) ([@​jamesnw](https://github.com/jamesnw)). - Fixed: `selector-type-no-unknown` false positives for `geolocation` and `usermedia` ([#​9004](stylelint/stylelint#9004)) ([@​Mouvedia](https://github.com/Mouvedia)). - Fixed: `selector-type-no-unknown` false positives for `rb`, `rtc` and `menuitem` ([#​8972](stylelint/stylelint#8972)) ([@​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/505 Co-authored-by: Renovate Bot <[email protected]> Co-committed-by: Renovate Bot <[email protected]>
Summary
Fixes #3972
The
no-duplicate-selectorsrule now correctly detects duplicate class selectors that use different CSS escape sequence formats. For example,.u-m\00002band.u-m\+are now recognized as duplicates since both represent.u-m+.Changes
normalizeNodeEscaping()helper innormalizeSelector.mjsthat uses postcss-selector-parser's getter/setter behavior to normalize CSS escapingHow it works
The fix leverages postcss-selector-parser's built-in value getter/setter behavior for ClassName nodes. The getter returns the unescaped value, while the setter re-escapes it in a normalized form. By doing
node.value = node.value, we trigger this normalization, ensuring equivalent selectors compare as equal regardless of their original escape format.Reference: https://github.com/postcss/postcss-selector-parser/blob/1b1e9c3bc10ccc3bc5f07a987caa7f2684c0b52f/src/selectors/className.js#L13-L28