Skip to content

Fix declaration-property-value-no-unknown false negatives/positives for math functions#9064

Merged
romainmenke merged 13 commits into
mainfrom
fix-declaration-property-value-no-unknown--persistent-emperor-tamarin-9df3ed4648
Feb 13, 2026
Merged

Fix declaration-property-value-no-unknown false negatives/positives for math functions#9064
romainmenke merged 13 commits into
mainfrom
fix-declaration-property-value-no-unknown--persistent-emperor-tamarin-9df3ed4648

Conversation

@romainmenke

@romainmenke romainmenke commented Feb 11, 2026

Copy link
Copy Markdown
Member

Which issue, if any, is this issue related to?

Is there anything in the PR that needs further explanation?

This is a pretty extensive rewrite of the changes introduced in: #9011

The intention of the rewrite is not to change behavior but to fix the two mentioned bugs and also to reduce the amount of times we tokenize/parse values.

@changeset-bot

changeset-bot Bot commented Feb 11, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 8434197

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
stylelint Minor

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

@github-actions

github-actions Bot commented Feb 11, 2026

Copy link
Copy Markdown
Contributor

This PR is packaged and the instant preview is available (8434197). View the demo website.

Install it locally:

npm i -D https://pkg.pr.new/stylelint@8434197

Comment thread .changeset/quick-bananas-play.md Outdated

@jeddy3 jeddy3 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@romainmenke Thanks for working on this. It's looking great!

Is it intentionally marked as a draft?

I've added a second changeset.

I suggest we first merge:

Then resolve the conflicts here and merge this PR next, before looking at:

@romainmenke

Copy link
Copy Markdown
Member Author

Is it intentionally marked as a draft?

Yes, I wanted to work on coverage and add comments in the PR to better explain some choices

I've added a second changeset.

Thank you 🙇
I always forget how to do this (2 files vs. 2 lines)

I suggest we first merge

Perfect!


I am going to take a look at updating @csstools/css-calc first because that will allow us to remove a lot of code here. Code that will then not need reviewing :)

…mperor-tamarin-9df3ed4648' of https://github.com/stylelint/stylelint into fix-declaration-property-value-no-unknown--persistent-emperor-tamarin-9df3ed4648
…rty-value-no-unknown--persistent-emperor-tamarin-9df3ed4648
Comment on lines -680 to +684
message: messages.rejectedMath('height', 'calc(2 * 2)'),
message: messages.rejectedMath('height', '2 * 2'),

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The reported range is narrower for operations like +, -, /, ... but not for functions like min() or clamp().

Any result has source indices that trace back to the expression.

  • for math functions this is the function itself
  • for operations these are the outermost operands

Comment on lines +827 to +828
code: 'a { margin-inline: calc(3px - 1px) calc(3 - 1px); }',
message: messages.rejectedMath('margin-inline', '3 - 1px'),

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Test that the last calc() function is reported and not the first.

Comment on lines +845 to +846
code: 'a { margin-inline: calc((3px + 2px) - (1)); }',
message: messages.rejectedMath('margin-inline', '3px + 2px) - (1'),

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These are newly reported errors.
@csstools/css-calc will recursively find all issues, and it will also handle expressions wrapped in parenthesis.

Comment on lines +369 to +376
{
code: 'a { top: calc(0.3 * 100% + 10px); }',
description: 'mixed units and percentages checking respects operator precedence',
},
{
code: 'a { top: calc(0.3 * 100vh + 15px); }',
description: 'mixed units and percentages checking respects operator precedence',
},

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See: #9066

const SYNTAX_DESCRIPTOR = /^syntax$/i;

const UNSUPPORTED_FUNCTIONS = new Set(['env']);
const UNSUPPORTED_FUNCTIONS_IN_CSSTREE = new Set(['clamp', 'min', 'max', 'env']);

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We still need the list that previously existed here.

I've renamed it to make it clearer why we consider these unsupported. @csstools/css-calc for example does support these.

// TODO: csstree treats any value containing `var()` as valid, even if the `var()` expression itself is invalid.
// csstree should be updated to mark invalidate values that contain invalid `var()` expressions.
// skipping parsing by returning early until this is resolved upstream.
if (/\bvar\s*\(/i.test(value)) return;

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Moved this check up to speedup this rule.

* @param {ReturnType<import('css-tree')['fork']>['lexer']} lexer - The csstree lexer
* @param {Map<string, string>} typedCustomPropertyNames - Map of typed custom property names
* @returns {'skip' | 'invalid' | 'continue'} - The validation result
* @returns {['undetermined' | 'valid' | 'invalid' | 'skip-validation', number, number]} - The validation result

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I found skip and continue to be ambiguous and I think this naming also caused an oversight in the original implementation.

I've refactored it to cover these states:

  • valid: the value is fine and no further checking is needed
  • invalid: already found an issue, report and stop
  • skip-validation: something was detected that we can't validate, and neither can the rest of this rule, stop
  • undetermined: we don't know, run the regular validation after this step

Comment on lines +323 to +330
switch (calcParseError.message) {
case ParseErrorMessage.UnexpectedAdditionOfDimensionOrPercentageWithNumber:
case ParseErrorMessage.UnexpectedSubtractionOfDimensionOrPercentageWithNumber:
return ['invalid', calcParseError.sourceStart, calcParseError.sourceEnd + 1];

default:
break;
}

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Only handling very specific errors here.
This allows updates in @csstools/css-calc without causing new errors to be reported downstream in Stylelint.

Comment on lines +365 to +375
const startOffset = error.loc.start.offset;
const endOffset = error.loc.end.offset;

// Lookup the original source position of the invalid expression
// by finding the tokens that correspond to the positions reported by csstree
const solvedTokens = solvedNodes.flatMap((componentValues) =>
componentValues.flatMap((node) => node.tokens()),
);
let counter = 0;
let startToken;
let endToken;

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This allows us to trace the error:
css-tree report -> @csstools tokens -> original source

Comment on lines +377 to +381
{
code: 'a { margin-inline: calc(10px)calc(20px); }',
skip: true,
description: 'functions can be written without separating white space',
},

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is converted to 10px20px which is a dimension with value 10 and unit px20px.

This is quite obscure, but something that we should fix.
I am running out of time today and given that no one writes such source code it seems fine for now.

Need to find a way to inject some whitespace between such values.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does it make sense to leave a comment for this skip so that others can understand? E.g.

skip: true, // TODO: ...

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It does make sense to add such a comment :)

Going to do quick follow up PR to remove the skip instead.

@romainmenke romainmenke marked this pull request as ready for review February 12, 2026 17:35
@romainmenke romainmenke requested a review from a team as a code owner February 12, 2026 17:35

@jeddy3 jeddy3 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A fantastic effort upstream and here in this PR!

LGTM, thank you.

@jeddy3 jeddy3 mentioned this pull request Feb 12, 2026
4 tasks
@ybiquitous ybiquitous changed the title Fix declaration-property-value-no-unknown false negatives for math functions Fix declaration-property-value-no-unknown false negatives/positives for math functions Feb 13, 2026

@ybiquitous ybiquitous left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, thank you 👍🏼

My minor comment is ignorable.

@romainmenke

Copy link
Copy Markdown
Member Author

Thank you for the reviews 🙇

@romainmenke romainmenke merged commit 239297d into main Feb 13, 2026
18 of 19 checks passed
@romainmenke romainmenke deleted the fix-declaration-property-value-no-unknown--persistent-emperor-tamarin-9df3ed4648 branch February 13, 2026 07:01
renovate Bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Feb 13, 2026
| 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)).
renovate Bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Feb 13, 2026
| 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)).
renovate Bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Feb 14, 2026
| 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)).
robbevp pushed a commit to robbevp/website-robbevanpetegem that referenced this pull request Feb 28, 2026
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 ([#&#8203;20504](eslint/eslint#20504)) (sethamus)

#### Chores

- [`8594a43`](eslint/eslint@8594a43) chore: upgrade [@&#8203;eslint/js](https://github.com/eslint/js)@&#8203;9.39.3 ([#&#8203;20529](eslint/eslint#20529)) (Milos Djermanovic)
- [`9ceef92`](eslint/eslint@9ceef92) chore: package.json update for [@&#8203;eslint/js](https://github.com/eslint/js) release (Jenkins)
- [`af498c6`](eslint/eslint@af498c6) chore: ignore `/docs/v9.x` in link checker ([#&#8203;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 ([#&#8203;18706](prettier/prettier#18706) by [@&#8203;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` ([#&#8203;9096](stylelint/stylelint#9096)) ([@&#8203;theacrat](https://github.com/theacrat)).
- Added: `ignoreMediaFeatureNames: []` to `media-feature-name-no-vendor-prefix` ([#&#8203;9097](stylelint/stylelint#9097)) ([@&#8203;theacrat](https://github.com/theacrat)).
- Fixed: performance of selector cloning rules ([#&#8203;9089](stylelint/stylelint#9089)) ([@&#8203;jeddy3](https://github.com/jeddy3)).
- Fixed: `*-empty-line-before` performance ([#&#8203;9092](stylelint/stylelint#9092)) ([@&#8203;jeddy3](https://github.com/jeddy3)).
- Fixed: `declaration-property-value-no-unknown` performance ([#&#8203;9090](stylelint/stylelint#9090)) ([@&#8203;jeddy3](https://github.com/jeddy3)).
- Fixed: `no-irregular-whitespace` performance ([#&#8203;9091](stylelint/stylelint#9091)) ([@&#8203;jeddy3](https://github.com/jeddy3)).
- Fixed: `property-no-unknown` false negatives for at-rule descriptors ([#&#8203;9109](stylelint/stylelint#9109)) ([@&#8203;jeddy3](https://github.com/jeddy3)).
- Fixed: `property-no-unknown` false positives for `corner-shape` ([#&#8203;9099](stylelint/stylelint#9099)) ([@&#8203;jeddy3](https://github.com/jeddy3)).
- Fixed: `property-no-unknown` false positives for double-slashed properties ([#&#8203;9099](stylelint/stylelint#9099)) ([@&#8203;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 ([#&#8203;9055](stylelint/stylelint#9055)) ([@&#8203;jeddy3](https://github.com/jeddy3)).
- Fixed: `*-list` performance ([#&#8203;9056](stylelint/stylelint#9056)) ([@&#8203;jeddy3](https://github.com/jeddy3)).
- Fixed: `*-notation` performance ([#&#8203;9044](stylelint/stylelint#9044)) ([@&#8203;jeddy3](https://github.com/jeddy3)).
- Fixed: `declaration-property-max-values` performance ([#&#8203;9057](stylelint/stylelint#9057)) ([@&#8203;jeddy3](https://github.com/jeddy3)).
- Fixed: `declaration-property-value-keyword-no-deprecated` performance ([#&#8203;9058](stylelint/stylelint#9058)) ([@&#8203;jeddy3](https://github.com/jeddy3)).
- Fixed: `declaration-property-value-no-unknown` false negatives for math functions inside of non-math functions ([#&#8203;9064](stylelint/stylelint#9064)) ([@&#8203;romainmenke](https://github.com/romainmenke)).
- Fixed: `declaration-property-value-no-unknown` false positives for `calc()` with mixed operations ([#&#8203;9064](stylelint/stylelint#9064)) ([@&#8203;romainmenke](https://github.com/romainmenke)).
- Fixed: `declaration-property-value-no-unknown` performance ([#&#8203;9062](stylelint/stylelint#9062)) ([@&#8203;jeddy3](https://github.com/jeddy3)).
- Fixed: `declaration-property-value-no-unknown` reported ranges for multiple math functions ([#&#8203;9064](stylelint/stylelint#9064)) ([@&#8203;romainmenke](https://github.com/romainmenke)).
- Fixed: `length-zero-no-unit` performance ([#&#8203;9046](stylelint/stylelint#9046)) ([@&#8203;jeddy3](https://github.com/jeddy3)).
- Fixed: `named-grid-areas-no-invalid` false positives for mix of tabs and spaces ([#&#8203;9039](stylelint/stylelint#9039)) ([@&#8203;adalinesimonian](https://github.com/adalinesimonian)).
- Fixed: `no-unknown-custom-media` performance ([#&#8203;9059](stylelint/stylelint#9059)) ([@&#8203;jeddy3](https://github.com/jeddy3)).
- Fixed: `selector-max-*` performance ([#&#8203;9042](stylelint/stylelint#9042)) ([@&#8203;jeddy3](https://github.com/jeddy3)).
- Fixed: `shorthand-property-no-redundant-values` performance ([#&#8203;9047](stylelint/stylelint#9047)) ([@&#8203;jeddy3](https://github.com/jeddy3)).
- Fixed: `syntax-string-no-invalid` performance ([#&#8203;9061](stylelint/stylelint#9061)) ([@&#8203;jeddy3](https://github.com/jeddy3)).
- Fixed: `time-min-milliseconds` performance ([#&#8203;9060](stylelint/stylelint#9060)) ([@&#8203;jeddy3](https://github.com/jeddy3)).
- Fixed: `value-keyword-case` performance ([#&#8203;9048](stylelint/stylelint#9048)) ([@&#8203;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 ([#&#8203;9021](stylelint/stylelint#9021)) ([@&#8203;adalinesimonian](https://github.com/adalinesimonian)).
- Fixed: performance of config override matching ([#&#8203;9023](stylelint/stylelint#9023)) ([@&#8203;adalinesimonian](https://github.com/adalinesimonian)).
- Fixed: performance of config resolution ([#&#8203;9033](stylelint/stylelint#9033)) ([@&#8203;adalinesimonian](https://github.com/adalinesimonian)).
- Fixed: performance of rule resolution ([#&#8203;9022](stylelint/stylelint#9022)) ([@&#8203;adalinesimonian](https://github.com/adalinesimonian)).
- Fixed: `declaration-property-value-no-unknown` false negatives for math functions ([#&#8203;9011](stylelint/stylelint#9011)) ([@&#8203;ragini-pandey](https://github.com/ragini-pandey)).
- Fixed: `no-duplicate-selectors` false negatives for matching escaped selectors ([#&#8203;8953](stylelint/stylelint#8953)) ([@&#8203;bjnewman](https://github.com/bjnewman)).
- Fixed: `no-invalid-position-at-import-rule` false negatives for layers with blocks ([#&#8203;9026](stylelint/stylelint#9026)) ([@&#8203;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 ([#&#8203;9010](stylelint/stylelint#9010)) ([@&#8203;adalinesimonian](https://github.com/adalinesimonian)).
- Fixed: `lightness-notation` autofix for decimals ([#&#8203;9009](stylelint/stylelint#9009)) ([@&#8203;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 ([#&#8203;8981](stylelint/stylelint#8981)) ([@&#8203;romainmenke](https://github.com/romainmenke)).
- Fixed: `GlobbyOptions` TypeScript errors ([#&#8203;8992](stylelint/stylelint#8992)) ([@&#8203;zalishchuk](https://github.com/zalishchuk)).
- Fixed: `hue-degree-notation` false negatives and positives for relative colors ([#&#8203;8985](stylelint/stylelint#8985)) ([@&#8203;jamesnw](https://github.com/jamesnw)).
- Fixed: `lightness-notation` false negatives for relative colors ([#&#8203;8987](stylelint/stylelint#8987)) ([@&#8203;jamesnw](https://github.com/jamesnw)).
- Fixed: `selector-type-no-unknown` false positives for `geolocation` and `usermedia` ([#&#8203;9004](stylelint/stylelint#9004)) ([@&#8203;Mouvedia](https://github.com/Mouvedia)).
- Fixed: `selector-type-no-unknown` false positives for `rb`, `rtc` and `menuitem` ([#&#8203;8972](stylelint/stylelint#8972)) ([@&#8203;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 <renovate@robbevp.be>
Co-committed-by: Renovate Bot <renovate@robbevp.be>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

3 participants