Skip to content

Add rule name to custom messages#8774

Merged
jeddy3 merged 1 commit into
stylelint:mainfrom
jhae-de-forks:feature/append-rule-name-to-custom-messages
Sep 30, 2025
Merged

Add rule name to custom messages#8774
jeddy3 merged 1 commit into
stylelint:mainfrom
jhae-de-forks:feature/append-rule-name-to-custom-messages

Conversation

@jhae-de

@jhae-de jhae-de commented Sep 22, 2025

Copy link
Copy Markdown
Contributor

This pull request improves the handling of custom error messages in a Stylelint configuration. It ensures that when a custom error message is specified in a Stylelint configuration, the rule name is automatically appended in parentheses at the end of the message if not already present.

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

Closes #8773

Is there anything in the PR that needs further explanation?

When a custom message is defined for a rule, such as for the custom-property-pattern rule:

{
  'custom-property-pattern': [
    '^([a-z][a-z0-9]*)(-[a-z0-9]+)*$',
    {
      message: (name) => `Expected custom property name "${name}" to be kebab-case`,
    },
  ],
}

the rule name is now automatically appended in parentheses at the end of the message if it is not already present. This makes it easier to identify the source rule for each reported problem and improves traceability. Existing messages that already include the rule name remain unchanged.

Before:

:root {
  --MyCustomProperty: '';
  // Stylelint error: Expected custom property name "--MyCustomProperty" to be kebab-case
  //                                                                                     ^
  //                                                                            Missing rule name
}

After:

:root {
  --MyCustomProperty: '';
  // Stylelint error: Expected custom property name "--MyCustomProperty" to be kebab-case (custom-property-pattern)
  //                                                                                      ^
  //                                                                            Automatically appended rule name
}

@changeset-bot

changeset-bot Bot commented Sep 22, 2025

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 0a199d6

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

@jeddy3 jeddy3 changed the title Always append rule name to error messages Add rule name to custom messages Sep 23, 2025
@jeddy3

jeddy3 commented Sep 23, 2025

Copy link
Copy Markdown
Member

@jhae-de Thanks for the pull request.

I can't remember if this was an intentional design decision, as we added the message property a few years ago.

We can either:

  • automate adding the rule name via this PR
  • update our docs to say the rule name must be added manually if the users want it, and fix the custom messages rule in our shared configs so they end with the rule name

It seems the former leads to automated consistency, and the latter to choice.

Let's see if any other maintainers have an opinion.


Context: this is for the text property of the result object. Our string formatter removes the rule name from the message so that it can be placed in another column:

const ruleString = ` (${message.rule})`;
if (result.endsWith(ruleString)) {
result = result.slice(0, result.lastIndexOf(ruleString));
}

@jhae-de

jhae-de commented Sep 23, 2025

Copy link
Copy Markdown
Contributor Author

@jeddy3 Thanks for your feedback.

I had also thought about which of the two approaches would be better beforehand. The decisive factor for me in the end was that the messages defined in the built-in rules are also automatically enriched with the rule names. Applying this to custom messages as well was the logical consequence for me.

I am curious to hear what others think about this.

@ybiquitous

Copy link
Copy Markdown
Member

@jhae-de Thank you for discovering and fixing the issue. I implemented the custom message feature, but this problem was out of my mind, sorry.

First, let me show where the (<rule-name>) text is constructed in a lint problem message. It's a public utility stylelint.utils.ruleMessages():

Second, our default string formatter removes the (<rule-name>) text from a problem message here:

So, to achieve consistency for problem messages, we may need to choose either of the two options below:

  1. Add (<rule-name>) to custom messages, too (like this PR does)
  2. Remove (<rule-name>) from any messages (breaking)

If we choose option 1, there is a little possibility of breaking, but its impact should not be significant.

Instead, if we opt for option 2, it should be shipped in a major version.

Personally, I'm leaning towards option 2 because I think it's verbose to contain (<rule-name>) in a message. Let's see this example that the current Stylelint contains in the JS object:

{
  "rule": "block-no-empty",
  "text": "Unexpected empty block (block-no-empty)"
}

As shown above, our default string (also verbose) formatter removes this duplication before outputting it, like this:

✖  Unexpected empty block      block-no-empty

To make custom formatters easier to implement, should we separate (<rule-name>) from a message? Any thoughts?

@jhae-de

jhae-de commented Sep 27, 2025

Copy link
Copy Markdown
Contributor Author

@ybiquitous Thank you for your feedback and some context regarding the rule messages.

I hadn't actually thought about the option of removing the rule names from the messages altogether. At first, I didn't think the idea was so bad, as my main concern here was consistency.

However, I would like to point out the following:

  1. The compact and unix formatters currently only output the rule messages. With these outputs, we would also lose the rule names here.
  2. The rule names would also no longer be displayed in some IDEs. For example, PhpStorm only outputs the rule messages. To my knowledge, there is no way to configure Stylelint with custom options here, e.g., to customize the formatter. The output does not change even if I specify the formatter in the Stylelint configuration file itself.

Output in PhpStorm:

Stylelint rule message in PhpStorm

At least as far as point 2 is concerned, I always liked that the rule names were also displayed here. In this respect, I would personally find it regrettable if we were to remove the rule names from the messages in general.

@ybiquitous

Copy link
Copy Markdown
Member

@jhae-de Thanks for the feedback, too!

Regarding the compact and unix formatters, it would be easy to keep the message compatibility by explicitly adding (<rule-name>). 👌🏼

About some IDEs, I didn't have any ideas before your comment, such as PhpStorm. Thank you for the info. I think it'd be more flexible to construct messages if (<rule-name>) were removed, but some clients might expect that messages would still contain (<rule-name>) by default, as you mentioned.

I don't recall any requests for such flexibility having been submitted. Maybe, no requests.

So now, it seems reasonable to me to add (<rule-name>) to custom messages, as well. Probably, I guess that it won't be a breaking change. 👍🏼

@jeddy3 Any thoughts?

@jeddy3

jeddy3 commented Sep 27, 2025

Copy link
Copy Markdown
Member

So now, it seems reasonable to me to add (<rule-name>) to custom messages, as well.

SGTM. In addition to IDEs like PhpStorm, the rulename is useful when Stylelint is used as a PostCSS plugin and postcss-reporter reports the warnings:

Screenshot 2025-09-27 at 19 52 22

We now recommend using our built-in formatters via the CLI or Node.js API, but some people may still be using the PostCSS plugin.

@github-actions

github-actions Bot commented Sep 28, 2025

Copy link
Copy Markdown
Contributor

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

Install it locally:

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

@jhae-de

jhae-de commented Sep 28, 2025

Copy link
Copy Markdown
Contributor Author

It looks to me as if this PR will be accepted. Is there anything else I need to do, such as generating the changeset?

@ybiquitous

Copy link
Copy Markdown
Member

@jhae-de Yes, please add a changelog, respecting the PR title, e.g.:

---
"stylelint": minor
---
Added: rule name to custom messages

Comment thread lib/utils/report.mjs Outdated
@jhae-de jhae-de force-pushed the feature/append-rule-name-to-custom-messages branch 2 times, most recently from f9fde25 to 2d11f2b Compare September 28, 2025 21:53
@jhae-de jhae-de requested a review from ybiquitous September 28, 2025 21:53
Ensures that when a custom message is specified in a Stylelint configuration, the rule name is automatically appended in parentheses at the end of the message if not already present, improving traceability of reported problems.
@jhae-de jhae-de force-pushed the feature/append-rule-name-to-custom-messages branch from 2d11f2b to 0a199d6 Compare September 29, 2025 13:16

@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, thanks 👍🏼

@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.

LGTM, thank you

@jeddy3 jeddy3 merged commit 242f757 into stylelint:main Sep 30, 2025
17 checks passed
@romainmenke romainmenke mentioned this pull request Oct 1, 2025
5 tasks
renovate Bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Oct 3, 2025
| datasource | package   | from    | to      |
| ---------- | --------- | ------- | ------- |
| npm        | stylelint | 16.24.0 | 16.25.0 |


## [v16.25.0](https://github.com/stylelint/stylelint/blob/HEAD/CHANGELOG.md#16250---2025-10-03)

It adds 3 new features, including experimental support for bulk suppressions. It's also our first [immutable release](https://github.blog/changelog/2025-08-26-releases-now-support-immutability-in-public-preview/), with the package published to npm using [trusted publishing](https://github.blog/changelog/2025-07-31-npm-trusted-publishing-with-oidc-is-generally-available/) and our dependencies updated on a [cool down](https://github.blog/changelog/2025-07-01-dependabot-supports-configuration-of-a-minimum-package-age/) for improved supply chain security.

- Added: support for bulk suppressions ([#8564](stylelint/stylelint#8564)) ([@ryo-manba](https://github.com/ryo-manba)).
- Added: `ignoreAtRules: []` to `no-invalid-position-declaration` ([#8781](stylelint/stylelint#8781)) ([@jrmlt](https://github.com/jrmlt)).
- Added: rule name to custom messages ([#8774](stylelint/stylelint#8774)) ([@jhae-de](https://github.com/jhae-de)).
renovate Bot added a commit to andrei-picus-tink/auto-renovate that referenced this pull request Oct 3, 2025
| datasource | package   | from    | to      |
| ---------- | --------- | ------- | ------- |
| npm        | stylelint | 16.24.0 | 16.25.0 |


## [v16.25.0](https://github.com/stylelint/stylelint/blob/HEAD/CHANGELOG.md#16250---2025-10-03)

It adds 3 new features, including experimental support for bulk suppressions. It's also our first [immutable release](https://github.blog/changelog/2025-08-26-releases-now-support-immutability-in-public-preview/), with the package published to npm using [trusted publishing](https://github.blog/changelog/2025-07-31-npm-trusted-publishing-with-oidc-is-generally-available/) and our dependencies updated on a [cool down](https://github.blog/changelog/2025-07-01-dependabot-supports-configuration-of-a-minimum-package-age/) for improved supply chain security.

- Added: support for bulk suppressions ([#8564](stylelint/stylelint#8564)) ([@ryo-manba](https://github.com/ryo-manba)).
- Added: `ignoreAtRules: []` to `no-invalid-position-declaration` ([#8781](stylelint/stylelint#8781)) ([@jrmlt](https://github.com/jrmlt)).
- Added: rule name to custom messages ([#8774](stylelint/stylelint#8774)) ([@jhae-de](https://github.com/jhae-de)).
@jhae-de jhae-de deleted the feature/append-rule-name-to-custom-messages branch October 4, 2025 15:19
robbevp pushed a commit to robbevp/website-robbevanpetegem that referenced this pull request Dec 22, 2025
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [eslint](https://eslint.org) ([source](https://github.com/eslint/eslint)) | devDependencies | minor | [`9.34.0` -> `9.39.2`](https://renovatebot.com/diffs/npm/eslint/9.34.0/9.39.2) |
| [prettier](https://prettier.io) ([source](https://github.com/prettier/prettier)) | devDependencies | minor | [`3.6.2` -> `3.7.4`](https://renovatebot.com/diffs/npm/prettier/3.6.2/3.7.4) |
| [stylelint](https://stylelint.io) ([source](https://github.com/stylelint/stylelint)) | devDependencies | minor | [`16.23.1` -> `16.26.1`](https://renovatebot.com/diffs/npm/stylelint/16.23.1/16.26.1) |

---

### Release Notes

<details>
<summary>eslint/eslint (eslint)</summary>

### [`v9.39.2`](https://github.com/eslint/eslint/releases/tag/v9.39.2)

[Compare Source](eslint/eslint@v9.39.1...v9.39.2)

#### Bug Fixes

- [`5705833`](eslint/eslint@5705833) fix: warn when `eslint-env` configuration comments are found ([#&#8203;20381](eslint/eslint#20381)) (sethamus)

#### Build Related

- [`506f154`](eslint/eslint@506f154) build: add .scss files entry to knip ([#&#8203;20391](eslint/eslint#20391)) (Milos Djermanovic)

#### Chores

- [`7ca0af7`](eslint/eslint@7ca0af7) chore: upgrade to `@eslint/js@9.39.2` ([#&#8203;20394](eslint/eslint#20394)) (Francesco Trotta)
- [`c43ce24`](eslint/eslint@c43ce24) chore: package.json update for [@&#8203;eslint/js](https://github.com/eslint/js) release (Jenkins)
- [`4c9858e`](eslint/eslint@4c9858e) ci: add `v9.x-dev` branch ([#&#8203;20382](eslint/eslint#20382)) (Milos Djermanovic)

### [`v9.39.1`](https://github.com/eslint/eslint/releases/tag/v9.39.1)

[Compare Source](eslint/eslint@v9.39.0...v9.39.1)

#### Bug Fixes

- [`650753e`](eslint/eslint@650753e) fix: Only pass node to JS lang visitor methods ([#&#8203;20283](eslint/eslint#20283)) (Nicholas C. Zakas)

#### Documentation

- [`51b51f4`](eslint/eslint@51b51f4) docs: add a section on when to use extends vs cascading ([#&#8203;20268](eslint/eslint#20268)) (Tanuj Kanti)
- [`b44d426`](eslint/eslint@b44d426) docs: Update README (GitHub Actions Bot)

#### Chores

- [`92db329`](eslint/eslint@92db329) chore: update `@eslint/js` version to 9.39.1 ([#&#8203;20284](eslint/eslint#20284)) (Francesco Trotta)
- [`c7ebefc`](eslint/eslint@c7ebefc) chore: package.json update for [@&#8203;eslint/js](https://github.com/eslint/js) release (Jenkins)
- [`61778f6`](eslint/eslint@61778f6) chore: update eslint-config-eslint dependency [@&#8203;eslint/js](https://github.com/eslint/js) to ^9.39.0 ([#&#8203;20275](eslint/eslint#20275)) (renovate\[bot])
- [`d9ca2fc`](eslint/eslint@d9ca2fc) ci: Add rangeStrategy to eslint group in renovate config ([#&#8203;20266](eslint/eslint#20266)) (唯然)
- [`009e507`](eslint/eslint@009e507) test: fix version tests for ESLint v10 ([#&#8203;20274](eslint/eslint#20274)) (Milos Djermanovic)

### [`v9.39.0`](https://github.com/eslint/eslint/releases/tag/v9.39.0)

[Compare Source](eslint/eslint@v9.38.0...v9.39.0)

#### Features

- [`cc57d87`](eslint/eslint@cc57d87) feat: update error loc to key in `no-dupe-class-members` ([#&#8203;20259](eslint/eslint#20259)) (Tanuj Kanti)
- [`126552f`](eslint/eslint@126552f) feat: update error location in `for-direction` and `no-dupe-args` ([#&#8203;20258](eslint/eslint#20258)) (Tanuj Kanti)
- [`167d097`](eslint/eslint@167d097) feat: update `complexity` rule to highlight only static block header ([#&#8203;20245](eslint/eslint#20245)) (jaymarvelz)

#### Bug Fixes

- [`15f5c7c`](eslint/eslint@15f5c7c) fix: forward traversal `step.args` to visitors ([#&#8203;20253](eslint/eslint#20253)) (jaymarvelz)
- [`5a1a534`](eslint/eslint@5a1a534) fix: allow JSDoc comments in object-shorthand rule ([#&#8203;20167](eslint/eslint#20167)) (Nitin Kumar)
- [`e86b813`](eslint/eslint@e86b813) fix: Use more types from [@&#8203;eslint/core](https://github.com/eslint/core) ([#&#8203;20257](eslint/eslint#20257)) (Nicholas C. Zakas)
- [`927272d`](eslint/eslint@927272d) fix: correct `Scope` typings ([#&#8203;20198](eslint/eslint#20198)) (jaymarvelz)
- [`37f76d9`](eslint/eslint@37f76d9) fix: use `AST.Program` type for Program node ([#&#8203;20244](eslint/eslint#20244)) (Francesco Trotta)
- [`ae07f0b`](eslint/eslint@ae07f0b) fix: unify timing report for concurrent linting ([#&#8203;20188](eslint/eslint#20188)) (jaymarvelz)
- [`b165d47`](eslint/eslint@b165d47) fix: correct `Rule` typings ([#&#8203;20199](eslint/eslint#20199)) (jaymarvelz)
- [`fb97cda`](eslint/eslint@fb97cda) fix: improve error message for missing fix function in suggestions ([#&#8203;20218](eslint/eslint#20218)) (jaymarvelz)

#### Documentation

- [`d3e81e3`](eslint/eslint@d3e81e3) docs: Always recommend to include a files property ([#&#8203;20158](eslint/eslint#20158)) (Percy Ma)
- [`0f0385f`](eslint/eslint@0f0385f) docs: use consistent naming recommendation ([#&#8203;20250](eslint/eslint#20250)) (Alex M. Spieslechner)
- [`a3b1456`](eslint/eslint@a3b1456) docs: Update README (GitHub Actions Bot)
- [`cf5f2dd`](eslint/eslint@cf5f2dd) docs: fix correct tag of `no-useless-constructor` ([#&#8203;20255](eslint/eslint#20255)) (Tanuj Kanti)
- [`10b995c`](eslint/eslint@10b995c) docs: add TS options and examples for `nofunc` in `no-use-before-define` ([#&#8203;20249](eslint/eslint#20249)) (Tanuj Kanti)
- [`2584187`](eslint/eslint@2584187) docs: remove repetitive word in comment ([#&#8203;20242](eslint/eslint#20242)) (reddaisyy)
- [`637216b`](eslint/eslint@637216b) docs: update CLI flags migration instructions ([#&#8203;20238](eslint/eslint#20238)) (jaymarvelz)
- [`e7cda3b`](eslint/eslint@e7cda3b) docs: Update README (GitHub Actions Bot)
- [`7b9446f`](eslint/eslint@7b9446f) docs: handle empty flags sections on the feature flags page ([#&#8203;20222](eslint/eslint#20222)) (sethamus)

#### Chores

- [`dfe3c1b`](eslint/eslint@dfe3c1b) chore: update `@eslint/js` version to 9.39.0 ([#&#8203;20270](eslint/eslint#20270)) (Francesco Trotta)
- [`2375a6d`](eslint/eslint@2375a6d) chore: package.json update for [@&#8203;eslint/js](https://github.com/eslint/js) release (Jenkins)
- [`a1f4e52`](eslint/eslint@a1f4e52) chore: update `@eslint` dependencies ([#&#8203;20265](eslint/eslint#20265)) (Francesco Trotta)
- [`c7d3229`](eslint/eslint@c7d3229) chore: update dependency [@&#8203;eslint/core](https://github.com/eslint/core) to ^0.17.0 ([#&#8203;20256](eslint/eslint#20256)) (renovate\[bot])
- [`27549bc`](eslint/eslint@27549bc) chore: update fuzz testing to not error if code sample minimizer fails ([#&#8203;20252](eslint/eslint#20252)) (Milos Djermanovic)
- [`a1370ee`](eslint/eslint@a1370ee) ci: bump actions/setup-node from 5 to 6 ([#&#8203;20230](eslint/eslint#20230)) (dependabot\[bot])
- [`9e7fad4`](eslint/eslint@9e7fad4) chore: add script to auto-generate eslint:recommended configuration ([#&#8203;20208](eslint/eslint#20208)) (唯然)

### [`v9.38.0`](https://github.com/eslint/eslint/releases/tag/v9.38.0)

[Compare Source](eslint/eslint@v9.37.0...v9.38.0)

#### Features

- [`ce40f74`](eslint/eslint@ce40f74) feat: update `complexity` rule to only highlight function header ([#&#8203;20048](eslint/eslint#20048)) (Atul Nair)
- [`e37e590`](eslint/eslint@e37e590) feat: correct `no-loss-of-precision` false positives with `e` notation ([#&#8203;20187](eslint/eslint#20187)) (Francesco Trotta)

#### Bug Fixes

- [`50c3dfd`](eslint/eslint@50c3dfd) fix: improve type support for isolated dependencies in pnpm ([#&#8203;20201](eslint/eslint#20201)) (Francesco Trotta)
- [`a1f06a3`](eslint/eslint@a1f06a3) fix: correct SourceCode typings ([#&#8203;20114](eslint/eslint#20114)) (Pixel998)

#### Documentation

- [`462675a`](eslint/eslint@462675a) docs: improve web accessibility by hiding non-semantic character ([#&#8203;20205](eslint/eslint#20205)) (루밀LuMir)
- [`c070e65`](eslint/eslint@c070e65) docs: correct formatting in `no-irregular-whitespace` rule documentation ([#&#8203;20203](eslint/eslint#20203)) (루밀LuMir)
- [`b39e71a`](eslint/eslint@b39e71a) docs: Update README (GitHub Actions Bot)
- [`cd39983`](eslint/eslint@cd39983) docs: move `custom-formatters` type descriptions to `nodejs-api` ([#&#8203;20190](eslint/eslint#20190)) (Percy Ma)

#### Chores

- [`d17c795`](eslint/eslint@d17c795) chore: upgrade [@&#8203;eslint/js](https://github.com/eslint/js)@&#8203;9.38.0 ([#&#8203;20221](eslint/eslint#20221)) (Milos Djermanovic)
- [`25d0e33`](eslint/eslint@25d0e33) chore: package.json update for [@&#8203;eslint/js](https://github.com/eslint/js) release (Jenkins)
- [`c82b5ef`](eslint/eslint@c82b5ef) refactor: Use types from [@&#8203;eslint/core](https://github.com/eslint/core) ([#&#8203;20168](eslint/eslint#20168)) (Nicholas C. Zakas)
- [`ff31609`](eslint/eslint@ff31609) ci: add Node.js 25 to `ci.yml` ([#&#8203;20220](eslint/eslint#20220)) (루밀LuMir)
- [`004577e`](eslint/eslint@004577e) ci: bump github/codeql-action from 3 to 4 ([#&#8203;20211](eslint/eslint#20211)) (dependabot\[bot])
- [`eac71fb`](eslint/eslint@eac71fb) test: remove use of `nodejsScope` option of eslint-scope from tests ([#&#8203;20206](eslint/eslint#20206)) (Milos Djermanovic)
- [`4168a18`](eslint/eslint@4168a18) chore: fix typo in legacy-eslint.js ([#&#8203;20202](eslint/eslint#20202)) (Sweta Tanwar)
- [`205dbd2`](eslint/eslint@205dbd2) chore: fix typos ([#&#8203;20200](eslint/eslint#20200)) (ntnyq)
- [`dbb200e`](eslint/eslint@dbb200e) chore: use team member's username when name is not available in data ([#&#8203;20194](eslint/eslint#20194)) (Milos Djermanovic)
- [`8962089`](eslint/eslint@8962089) chore: mark deprecated rules as available until v11.0.0 ([#&#8203;20184](eslint/eslint#20184)) (Pixel998)

### [`v9.37.0`](https://github.com/eslint/eslint/releases/tag/v9.37.0)

[Compare Source](eslint/eslint@v9.36.0...v9.37.0)

#### Features

- [`39f7fb4`](eslint/eslint@39f7fb4) feat: `preserve-caught-error` should recognize all static "cause" keys ([#&#8203;20163](eslint/eslint#20163)) (Pixel998)
- [`f81eabc`](eslint/eslint@f81eabc) feat: support TS syntax in `no-restricted-imports` ([#&#8203;19562](eslint/eslint#19562)) (Nitin Kumar)

#### Bug Fixes

- [`a129cce`](eslint/eslint@a129cce) fix: correct `no-loss-of-precision` false positives for leading zeros ([#&#8203;20164](eslint/eslint#20164)) (Francesco Trotta)
- [`09e04fc`](eslint/eslint@09e04fc) fix: add missing AST token types ([#&#8203;20172](eslint/eslint#20172)) (Pixel998)
- [`861c6da`](eslint/eslint@861c6da) fix: correct `ESLint` typings ([#&#8203;20122](eslint/eslint#20122)) (Pixel998)

#### Documentation

- [`b950359`](eslint/eslint@b950359) docs: fix typos across the docs ([#&#8203;20182](eslint/eslint#20182)) (루밀LuMir)
- [`42498a2`](eslint/eslint@42498a2) docs: improve ToC accessibility by hiding non-semantic character ([#&#8203;20181](eslint/eslint#20181)) (Percy Ma)
- [`29ea092`](eslint/eslint@29ea092) docs: Update README (GitHub Actions Bot)
- [`5c97a04`](eslint/eslint@5c97a04) docs: show `availableUntil` in deprecated rule banner ([#&#8203;20170](eslint/eslint#20170)) (Pixel998)
- [`90a71bf`](eslint/eslint@90a71bf) docs: update `README` files to add badge and instructions ([#&#8203;20115](eslint/eslint#20115)) (루밀LuMir)
- [`1603ae1`](eslint/eslint@1603ae1) docs: update references from `master` to `main` ([#&#8203;20153](eslint/eslint#20153)) (루밀LuMir)

#### Chores

- [`afe8a13`](eslint/eslint@afe8a13) chore: update `@eslint/js` dependency to version 9.37.0 ([#&#8203;20183](eslint/eslint#20183)) (Francesco Trotta)
- [`abee4ca`](eslint/eslint@abee4ca) chore: package.json update for [@&#8203;eslint/js](https://github.com/eslint/js) release (Jenkins)
- [`fc9381f`](eslint/eslint@fc9381f) chore: fix typos in comments ([#&#8203;20175](eslint/eslint#20175)) (overlookmotel)
- [`e1574a2`](eslint/eslint@e1574a2) chore: unpin jiti ([#&#8203;20173](eslint/eslint#20173)) (renovate\[bot])
- [`e1ac05e`](eslint/eslint@e1ac05e) refactor: mark `ESLint.findConfigFile()` as `async`, add missing docs ([#&#8203;20157](eslint/eslint#20157)) (Pixel998)
- [`347906d`](eslint/eslint@347906d) chore: update eslint ([#&#8203;20149](eslint/eslint#20149)) (renovate\[bot])
- [`0cb5897`](eslint/eslint@0cb5897) test: remove tmp dir created for circular fixes in multithread mode test ([#&#8203;20146](eslint/eslint#20146)) (Milos Djermanovic)
- [`bb99566`](eslint/eslint@bb99566) ci: pin `jiti` to version 2.5.1 ([#&#8203;20151](eslint/eslint#20151)) (Pixel998)
- [`177f669`](eslint/eslint@177f669) perf: improve worker count calculation for `"auto"` concurrency ([#&#8203;20067](eslint/eslint#20067)) (Francesco Trotta)
- [`448b57b`](eslint/eslint@448b57b) chore: Mark deprecated formatting rules as available until v11.0.0 ([#&#8203;20144](eslint/eslint#20144)) (Milos Djermanovic)

### [`v9.36.0`](https://github.com/eslint/eslint/releases/tag/v9.36.0)

[Compare Source](eslint/eslint@v9.35.0...v9.36.0)

#### Features

- [`47afcf6`](eslint/eslint@47afcf6) feat: correct `preserve-caught-error` edge cases ([#&#8203;20109](eslint/eslint#20109)) (Francesco Trotta)

#### Bug Fixes

- [`75b74d8`](eslint/eslint@75b74d8) fix: add missing rule option types ([#&#8203;20127](eslint/eslint#20127)) (ntnyq)
- [`1c0d850`](eslint/eslint@1c0d850) fix: update `eslint-all.js` to use `Object.freeze` for `rules` object ([#&#8203;20116](eslint/eslint#20116)) (루밀LuMir)
- [`7d61b7f`](eslint/eslint@7d61b7f) fix: add missing scope types to `Scope.type` ([#&#8203;20110](eslint/eslint#20110)) (Pixel998)
- [`7a670c3`](eslint/eslint@7a670c3) fix: correct rule option typings in `rules.d.ts` ([#&#8203;20084](eslint/eslint#20084)) (Pixel998)

#### Documentation

- [`b73ab12`](eslint/eslint@b73ab12) docs: update examples to use `defineConfig` ([#&#8203;20131](eslint/eslint#20131)) (sethamus)
- [`31d9392`](eslint/eslint@31d9392) docs: fix typos ([#&#8203;20118](eslint/eslint#20118)) (Pixel998)
- [`c7f861b`](eslint/eslint@c7f861b) docs: Update README (GitHub Actions Bot)
- [`6b0c08b`](eslint/eslint@6b0c08b) docs: Update README (GitHub Actions Bot)
- [`91f97c5`](eslint/eslint@91f97c5) docs: Update README (GitHub Actions Bot)

#### Chores

- [`12411e8`](eslint/eslint@12411e8) chore: upgrade [@&#8203;eslint/js](https://github.com/eslint/js)@&#8203;9.36.0 ([#&#8203;20139](eslint/eslint#20139)) (Milos Djermanovic)
- [`488cba6`](eslint/eslint@488cba6) chore: package.json update for [@&#8203;eslint/js](https://github.com/eslint/js) release (Jenkins)
- [`bac82a2`](eslint/eslint@bac82a2) ci: simplify renovate configuration ([#&#8203;19907](eslint/eslint#19907)) (唯然)
- [`c00bb37`](eslint/eslint@c00bb37) ci: bump actions/labeler from 5 to 6 ([#&#8203;20090](eslint/eslint#20090)) (dependabot\[bot])
- [`fee751d`](eslint/eslint@fee751d) refactor: use `defaultOptions` in rules ([#&#8203;20121](eslint/eslint#20121)) (Pixel998)
- [`1ace67d`](eslint/eslint@1ace67d) chore: update example to use `defineConfig` ([#&#8203;20111](eslint/eslint#20111)) (루밀LuMir)
- [`4821963`](eslint/eslint@4821963) test: add missing loc information to error objects in rule tests ([#&#8203;20112](eslint/eslint#20112)) (루밀LuMir)
- [`b42c42e`](eslint/eslint@b42c42e) chore: disallow use of deprecated `type` property in core rule tests ([#&#8203;20094](eslint/eslint#20094)) (Milos Djermanovic)
- [`7bb498d`](eslint/eslint@7bb498d) test: remove deprecated `type` property from core rule tests ([#&#8203;20093](eslint/eslint#20093)) (Pixel998)
- [`e10cf2a`](eslint/eslint@e10cf2a) ci: bump actions/setup-node from 4 to 5 ([#&#8203;20089](eslint/eslint#20089)) (dependabot\[bot])
- [`5cb0ce4`](eslint/eslint@5cb0ce4) refactor: use `meta.defaultOptions` in `preserve-caught-error` ([#&#8203;20080](eslint/eslint#20080)) (Pixel998)
- [`f9f7cb5`](eslint/eslint@f9f7cb5) chore: package.json update for eslint-config-eslint release (Jenkins)
- [`81764b2`](eslint/eslint@81764b2) chore: update `eslint` peer dependency in `eslint-config-eslint` ([#&#8203;20079](eslint/eslint#20079)) (Milos Djermanovic)

### [`v9.35.0`](https://github.com/eslint/eslint/releases/tag/v9.35.0)

[Compare Source](eslint/eslint@v9.34.0...v9.35.0)

#### Features

- [`42761fa`](eslint/eslint@42761fa) feat: implement suggestions for no-empty-function ([#&#8203;20057](eslint/eslint#20057)) (jaymarvelz)
- [`102f444`](eslint/eslint@102f444) feat: implement suggestions for no-empty-static-block ([#&#8203;20056](eslint/eslint#20056)) (jaymarvelz)
- [`e51ffff`](eslint/eslint@e51ffff) feat: add `preserve-caught-error` rule ([#&#8203;19913](eslint/eslint#19913)) (Amnish Singh Arora)

#### Bug Fixes

- [`10e7ae2`](eslint/eslint@10e7ae2) fix: update uncloneable options error message ([#&#8203;20059](eslint/eslint#20059)) (soda-sorcery)
- [`bfa4601`](eslint/eslint@bfa4601) fix: ignore empty switch statements with comments in no-empty rule ([#&#8203;20045](eslint/eslint#20045)) (jaymarvelz)
- [`dfd11de`](eslint/eslint@dfd11de) fix: add `before` and `after` to test case types ([#&#8203;20049](eslint/eslint#20049)) (Francesco Trotta)
- [`dabbe95`](eslint/eslint@dabbe95) fix: correct types for `no-restricted-imports` rule ([#&#8203;20034](eslint/eslint#20034)) (Milos Djermanovic)
- [`ea789c7`](eslint/eslint@ea789c7) fix: no-loss-of-precision false positive with uppercase exponent ([#&#8203;20032](eslint/eslint#20032)) (sethamus)

#### Documentation

- [`d265515`](eslint/eslint@d265515) docs: improve phrasing - "if" → "even if" from getting-started section ([#&#8203;20074](eslint/eslint#20074)) (jjangga0214)
- [`a355a0e`](eslint/eslint@a355a0e) docs: invert comparison logic for example in `no-var` doc page ([#&#8203;20064](eslint/eslint#20064)) (OTonGitHub)
- [`5082fc2`](eslint/eslint@5082fc2) docs: Update README (GitHub Actions Bot)
- [`99cfd7e`](eslint/eslint@99cfd7e) docs: add missing "the" in rule deprecation docs ([#&#8203;20050](eslint/eslint#20050)) (Josh Goldberg ✨)
- [`6ad8973`](eslint/eslint@6ad8973) docs: update `--no-ignore` and `--ignore-pattern` documentation ([#&#8203;20036](eslint/eslint#20036)) (Francesco Trotta)
- [`8033b19`](eslint/eslint@8033b19) docs: add documentation for `--no-config-lookup` ([#&#8203;20033](eslint/eslint#20033)) (Francesco Trotta)

#### Chores

- [`da87f2f`](eslint/eslint@da87f2f) chore: upgrade [@&#8203;eslint/js](https://github.com/eslint/js)@&#8203;9.35.0 ([#&#8203;20077](eslint/eslint#20077)) (Milos Djermanovic)
- [`af2a087`](eslint/eslint@af2a087) chore: package.json update for [@&#8203;eslint/js](https://github.com/eslint/js) release (Jenkins)
- [`7055764`](eslint/eslint@7055764) test: remove `tests/lib/eslint/eslint.config.js` ([#&#8203;20065](eslint/eslint#20065)) (Milos Djermanovic)
- [`84ffb96`](eslint/eslint@84ffb96) chore: update `@eslint-community/eslint-utils` ([#&#8203;20069](eslint/eslint#20069)) (Francesco Trotta)
- [`d5ef939`](eslint/eslint@d5ef939) refactor: remove deprecated `context.parserOptions` usage across rules ([#&#8203;20060](eslint/eslint#20060)) (sethamus)
- [`1b3881d`](eslint/eslint@1b3881d) chore: remove redundant word ([#&#8203;20058](eslint/eslint#20058)) (pxwanglu)

</details>

<details>
<summary>prettier/prettier (prettier)</summary>

### [`v3.7.4`](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#374)

[Compare Source](prettier/prettier@3.7.3...3.7.4)

[diff](prettier/prettier@3.7.3...3.7.4)

##### LWC: Avoid quote around interpolations ([#&#8203;18383](prettier/prettier#18383) by [@&#8203;kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```html
<!-- Input -->
<div foo={bar}>   </div>

<!-- Prettier 3.7.3 (--embedded-language-formatting off) -->
<div foo="{bar}"></div>

<!-- Prettier 3.7.4 (--embedded-language-formatting off) -->
<div foo={bar}></div>
```

##### TypeScript: Fix comment inside union type gets duplicated ([#&#8203;18393](prettier/prettier#18393) by [@&#8203;fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
type Foo = (/** comment */ a | b) | c;

// Prettier 3.7.3
type Foo = /** comment */ (/** comment */ a | b) | c;

// Prettier 3.7.4
type Foo = /** comment */ (a | b) | c;
```

##### TypeScript: Fix unstable comment print in union type comments ([#&#8203;18395](prettier/prettier#18395) by [@&#8203;fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
type X = (A | B) & (
  // comment
  A | B
);

// Prettier 3.7.3 (first format)
type X = (A | B) &
  (// comment
  A | B);

// Prettier 3.7.3 (second format)
type X = (
  | A
  | B // comment
) &
  (A | B);

// Prettier 3.7.4
type X = (A | B) &
  // comment
  (A | B);
```

### [`v3.7.3`](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#373)

[Compare Source](prettier/prettier@3.7.2...3.7.3)

[diff](prettier/prettier@3.7.2...3.7.3)

##### API: Fix `prettier.getFileInfo()` change that breaks VSCode extension ([#&#8203;18375](prettier/prettier#18375) by [@&#8203;fisker](https://github.com/fisker))

An internal refactor accidentally broke the VSCode extension plugin loading.

### [`v3.7.2`](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#372)

[Compare Source](prettier/prettier@3.7.1...3.7.2)

[diff](prettier/prettier@3.7.1...3.7.2)

##### JavaScript: Fix string print when switching quotes ([#&#8203;18351](prettier/prettier#18351) by [@&#8203;fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```jsx
// Input
console.log("A descriptor\\'s .kind must be \"method\" or \"field\".")

// Prettier 3.7.1
console.log('A descriptor\\'s .kind must be "method" or "field".');

// Prettier 3.7.2
console.log('A descriptor\\\'s .kind must be "method" or "field".');
```

##### JavaScript: Preserve quote for embedded HTML attribute values ([#&#8203;18352](prettier/prettier#18352) by [@&#8203;kovsu](https://github.com/kovsu))

<!-- prettier-ignore -->

```tsx
// Input
const html = /* HTML */ ` <div class="${styles.banner}"></div> `;

// Prettier 3.7.1
const html = /* HTML */ ` <div class=${styles.banner}></div> `;

// Prettier 3.7.2
const html = /* HTML */ ` <div class="${styles.banner}"></div> `;
```

##### TypeScript: Fix comment in empty type literal ([#&#8203;18364](prettier/prettier#18364) by [@&#8203;fisker](https://github.com/fisker))

<!-- prettier-ignore -->

```tsx
// Input
export type XXX = {
  // tbd
};

// Prettier 3.7.1
export type XXX = { // tbd };

// Prettier 3.7.2
export type XXX = {
  // tbd
};
```

### [`v3.7.1`](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#371)

[Compare Source](prettier/prettier@3.7.0...3.7.1)

[diff](prettier/prettier@3.7.0...3.7.1)

##### API: Fix performance regression in doc printer ([#&#8203;18342](prettier/prettier#18342) by [@&#8203;fisker](https://github.com/fisker))

Prettier 3.7.0 can be very slow when formatting big files, the regression has been fixed.

### [`v3.7.0`](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#370)

[Compare Source](prettier/prettier@3.6.2...3.7.0)

[diff](prettier/prettier@3.6.2...3.7.0)

🔗 [Release Notes](https://prettier.io/blog/2025/11/27/3.7.0)

</details>

<details>
<summary>stylelint/stylelint (stylelint)</summary>

### [`v16.26.1`](https://github.com/stylelint/stylelint/blob/HEAD/CHANGELOG.md#16261---2025-11-28)

[Compare Source](stylelint/stylelint@16.26.0...16.26.1)

It fixes numerous false positive bugs, including many in the `declaration-property-value-no-unknown` rule for the latest CSS specifications.

- Fixed: `*-no-unknown` false positives for latest specs by integrating `@csstools/css-syntax-patches-for-csstree` ([#&#8203;8850](stylelint/stylelint#8850)) ([@&#8203;romainmenke](https://github.com/romainmenke)).
- Fixed: `at-rule-no-unknown` false positives for `@function` ([#&#8203;8851](stylelint/stylelint#8851)) ([@&#8203;jeddy3](https://github.com/jeddy3)).
- Fixed: `declaration-property-value-no-unknown` false positives for `attr()`, `if()` and custom functions ([#&#8203;8853](stylelint/stylelint#8853)) ([@&#8203;jeddy3](https://github.com/jeddy3)).
- Fixed: `function-url-quotes` false positives when URLs require quoting ([#&#8203;8804](stylelint/stylelint#8804)) ([@&#8203;taearls](https://github.com/taearls)).
- Fixed: `selector-pseudo-element-no-unknown` false positives for `::scroll-button()` ([#&#8203;8856](stylelint/stylelint#8856)) ([@&#8203;Mouvedia](https://github.com/Mouvedia)).

### [`v16.26.0`](https://github.com/stylelint/stylelint/blob/HEAD/CHANGELOG.md#16260---2025-11-21)

[Compare Source](stylelint/stylelint@16.25.0...16.26.0)

It adds 1 feature and fixes 2 bugs.

- Added: support for `customSyntax` with function export ([#&#8203;8834](stylelint/stylelint#8834)) ([@&#8203;silverwind](https://github.com/silverwind)).
- Fixed: `custom-property-no-missing-var-function` false positives for style query in `if()` function ([#&#8203;8813](stylelint/stylelint#8813)) ([@&#8203;sajdakabir](https://github.com/sajdakabir)).
- Fixed: `media-feature-range-notation` false positives for multiple queries and `except: exact-value` ([#&#8203;8832](stylelint/stylelint#8832)) ([@&#8203;jeddy3](https://github.com/jeddy3)).

### [`v16.25.0`](https://github.com/stylelint/stylelint/blob/HEAD/CHANGELOG.md#16250---2025-10-03)

[Compare Source](stylelint/stylelint@16.24.0...16.25.0)

It adds 3 new features, including experimental support for bulk suppressions. It's also our first [immutable release](https://github.blog/changelog/2025-08-26-releases-now-support-immutability-in-public-preview/), with the package published to npm using [trusted publishing](https://github.blog/changelog/2025-07-31-npm-trusted-publishing-with-oidc-is-generally-available/) and our dependencies updated on a [cool down](https://github.blog/changelog/2025-07-01-dependabot-supports-configuration-of-a-minimum-package-age/) for improved supply chain security.

- Added: support for bulk suppressions ([#&#8203;8564](stylelint/stylelint#8564)) ([@&#8203;ryo-manba](https://github.com/ryo-manba)).
- Added: `ignoreAtRules: []` to `no-invalid-position-declaration` ([#&#8203;8781](stylelint/stylelint#8781)) ([@&#8203;jrmlt](https://github.com/jrmlt)).
- Added: rule name to custom messages ([#&#8203;8774](stylelint/stylelint#8774)) ([@&#8203;jhae-de](https://github.com/jhae-de)).

### [`v16.24.0`](https://github.com/stylelint/stylelint/blob/HEAD/CHANGELOG.md#16240---2025-09-07)

[Compare Source](stylelint/stylelint@16.23.1...16.24.0)

It adds 1 new rule, adds 1 option to a rule and fixes 2 bugs.

- Added: `rule-nesting-at-rule-required-list` rule ([#&#8203;8680](stylelint/stylelint#8680)) ([@&#8203;sw1tch3roo](https://github.com/sw1tch3roo)).
- Added: `ignoreAtRules: []` to `nesting-selector-no-missing-scoping-root` ([#&#8203;8743](stylelint/stylelint#8743)) ([@&#8203;karlhorky](https://github.com/karlhorky)).
- Fixed: `function-no-unknown` false positives for `contrast-color()` and `sibling-*()` ([#&#8203;8729](stylelint/stylelint#8729)) ([@&#8203;Mouvedia](https://github.com/Mouvedia)).
- Fixed: `selector-pseudo-class-no-unknown` false positives for `:heading` ([#&#8203;8749](stylelint/stylelint#8749)) ([@&#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/498
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

Development

Successfully merging this pull request may close these issues.

Add rule name to custom messages

3 participants