-
-
Notifications
You must be signed in to change notification settings - Fork 988
Add support for bulk suppressions #8564
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
🦋 Changeset detectedLatest commit: e78bf6b The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
Not sure what this means? Click here to learn what changesets are. Click here if you're a maintainer who wants to add another changeset to this PR |
|
This PR is packaged and the instant preview is available (e78bf6b). View the demo website. Install it locally: npm i -D https://pkg.pr.new/stylelint@e78bf6b |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This PR adds support for bulk suppressions to Stylelint by introducing new CLI flags (such as --suppress-all, --suppress-rule, --suppressions-location, and --prune-suppressions), integrating them into the core CLI, and updating related documentation and tests.
- Implements the suppressions service in both ESM and CJS formats.
- Updates the CLI to handle suppression flags along with proper error reporting for conflicting or missing options.
- Enhances the documentation and tests to reflect the new bulk suppressions feature.
Reviewed Changes
Copilot reviewed 23 out of 23 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| lib/utils/suppressionsService.{mjs,cjs} | Introduces suppression service logic; counts violations and updates suppression file. |
| lib/standalone.{mjs,cjs} | Integrates suppressions handling into the standalone linting command. |
| lib/cli.mjs | Updates CLI flags to support bulk suppressions and defines error conditions. |
| docs/user-guide/suppressions.md | Adds new documentation covering bulk suppressions usage and options. |
| docs/user-guide/cli.md | Updates CLI documentation with new suppression flags. |
| Other test fixture and utility files | Include required test cases and utility updates supporting the new feature. |
|
@ryo-manba thanks for the PR. I did a first pass on some files; Ill do the rest eventually. |
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as resolved.
Co-authored-by: Masafumi Koba <473530+ybiquitous@users.noreply.github.com>
ybiquitous
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've left a few nitpicks, but LGTM. 👍🏼
Let's wait for one more approval to merge it!
Co-authored-by: Masafumi Koba <473530+ybiquitous@users.noreply.github.com>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks again for all the hard work creating and reviewing this PR.
I set aside time to revise the documentation for this feature and read up on ESLint's original RFC for this feature. We do a few things differently to ESLint, and I've made some suggestions and changes that reflect them, including how we:
- standardised on "problem" rather than "violation" (for example)
- have a
severitysecondary option, whereas ESLint use"warn"and"error"for their primary option
I've pushed a commit to update the code to use "problem".
To help us maintain the docs and to keep things consistent for our users, we typically put the documentation for each option or configuration property in a single place (e.g. options.md or configure.md) and then duplicate the key part in cli.md and the CLI help, rather than spreading the docs out or wording things differently. In my suggestion, I've pulled and combined the wording from cli.md and the CLI help and then consolidated them in suppression.md.
I've also tried to make the language consistent, e.g., standardising on "suppress", rather than using "mute" interchangeably.
How much effort is needed to add this feature to the Node.js API, and do we think the feature should be available to the Node.js API and live under "Options"?
In preparation for this possibility, I've condensed the docs in my suggestion so that they more closely match the conciseness and style of the other options.
| @@ -0,0 +1,80 @@ | |||
| # Bulk suppressions | |||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
# Bulk suppressions
> [!WARNING]
> This feature is **experimental**, and might change significantly.
Turning on a rule with the severity of `error` can be difficult when an established codebase already contains many problems that can't be auto-fixed. You can suppress those legacy problems so the rule is enforced only for new code, and then clear the backlog at your own pace.
## `--suppress [<rule>]`
Suppress problems that have the severity of `error` and record them in a file.
If no rule is specified, all problems are suppressed. Otherwise, only problems with the given rules are suppressed, e.g., `--suppress rule1 --suppress rule2`.
Subsequent runs without the `--suppress` flag will not report these problems, unless there are more problems for the same rule in the same file.
> [!TIP]
> We recommend committing the suppressions file to your repository and using the `--fix` option alongside the `--suppress`.
> [!NOTE]
> `--suppress` can't be combined with stdin input (e.g., piping code via `echo "..." | stylelint`).
## `--suppress-location <path>`
Path to a suppressions file or directory. Defaults to `stylelint-suppressions.json`.
If you specify a directory path, Stylelint will create a file named `stylelint-suppressions.json` in that directory.
> [!IMPORTANT]
> You must use `--suppress-location` on all subsequent runs, even when not using the `--suppress` flag.
A suggestion for an alternative version. It's concise like the docs for our options. Do we think it retains the key points from the existing version, or does anything need to be expanded upon?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks, Looks good.
Fixed via e8ab682.
docs/user-guide/cli.md
Outdated
| Suppress all current problems and record them in a suppressions file. [More info](suppressions.md). | ||
|
|
||
| If a rule is specified as an argument (e.g., `--suppress=block-no-empty`), it suppresses violations for only the specified rule. You can repeat the flag to target multiple rules. | ||
|
|
||
| > [!NOTE] | ||
| > | ||
| > - `--suppress` cannot be combined with stdin input (e.g., piping code via `echo "..." | stylelint`). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| Suppress all current problems and record them in a suppressions file. [More info](suppressions.md). | |
| If a rule is specified as an argument (e.g., `--suppress=block-no-empty`), it suppresses violations for only the specified rule. You can repeat the flag to target multiple rules. | |
| > [!NOTE] | |
| > | |
| > - `--suppress` cannot be combined with stdin input (e.g., piping code via `echo "..." | stylelint`). | |
| Suppress problems that have the severity of `error` and record them in a file. [More info](suppressions.md#suppress). |
To be consistent with other flags in the doc cli.md, i.e. we duplicate just the key part of the linked doc.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fixed via ed50f2b.
|
@jeddy3 For this PR, I’d like to keep the scope to the CLI-only. I’d prefer we evaluate Node.js API support separately. (issue created: #8775) |
Co-authored-by: Richard Hallows <jeddy3@users.noreply.github.com>
jeddy3
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM, thank you.
Let's add this as an experimental CLI-only option, and then see how its used and where the ESLint discussion goes.
|
Many thanks to @jeddy3, @Mouvedia , and @ybiquitous for the patient and thorough reviews. Merging now. |
| 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)).
| 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)).
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 ([#​20381](eslint/eslint#20381)) (sethamus) #### Build Related - [`506f154`](eslint/eslint@506f154) build: add .scss files entry to knip ([#​20391](eslint/eslint#20391)) (Milos Djermanovic) #### Chores - [`7ca0af7`](eslint/eslint@7ca0af7) chore: upgrade to `@eslint/js@9.39.2` ([#​20394](eslint/eslint#20394)) (Francesco Trotta) - [`c43ce24`](eslint/eslint@c43ce24) chore: package.json update for [@​eslint/js](https://github.com/eslint/js) release (Jenkins) - [`4c9858e`](eslint/eslint@4c9858e) ci: add `v9.x-dev` branch ([#​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 ([#​20283](eslint/eslint#20283)) (Nicholas C. Zakas) #### Documentation - [`51b51f4`](eslint/eslint@51b51f4) docs: add a section on when to use extends vs cascading ([#​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 ([#​20284](eslint/eslint#20284)) (Francesco Trotta) - [`c7ebefc`](eslint/eslint@c7ebefc) chore: package.json update for [@​eslint/js](https://github.com/eslint/js) release (Jenkins) - [`61778f6`](eslint/eslint@61778f6) chore: update eslint-config-eslint dependency [@​eslint/js](https://github.com/eslint/js) to ^9.39.0 ([#​20275](eslint/eslint#20275)) (renovate\[bot]) - [`d9ca2fc`](eslint/eslint@d9ca2fc) ci: Add rangeStrategy to eslint group in renovate config ([#​20266](eslint/eslint#20266)) (唯然) - [`009e507`](eslint/eslint@009e507) test: fix version tests for ESLint v10 ([#​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` ([#​20259](eslint/eslint#20259)) (Tanuj Kanti) - [`126552f`](eslint/eslint@126552f) feat: update error location in `for-direction` and `no-dupe-args` ([#​20258](eslint/eslint#20258)) (Tanuj Kanti) - [`167d097`](eslint/eslint@167d097) feat: update `complexity` rule to highlight only static block header ([#​20245](eslint/eslint#20245)) (jaymarvelz) #### Bug Fixes - [`15f5c7c`](eslint/eslint@15f5c7c) fix: forward traversal `step.args` to visitors ([#​20253](eslint/eslint#20253)) (jaymarvelz) - [`5a1a534`](eslint/eslint@5a1a534) fix: allow JSDoc comments in object-shorthand rule ([#​20167](eslint/eslint#20167)) (Nitin Kumar) - [`e86b813`](eslint/eslint@e86b813) fix: Use more types from [@​eslint/core](https://github.com/eslint/core) ([#​20257](eslint/eslint#20257)) (Nicholas C. Zakas) - [`927272d`](eslint/eslint@927272d) fix: correct `Scope` typings ([#​20198](eslint/eslint#20198)) (jaymarvelz) - [`37f76d9`](eslint/eslint@37f76d9) fix: use `AST.Program` type for Program node ([#​20244](eslint/eslint#20244)) (Francesco Trotta) - [`ae07f0b`](eslint/eslint@ae07f0b) fix: unify timing report for concurrent linting ([#​20188](eslint/eslint#20188)) (jaymarvelz) - [`b165d47`](eslint/eslint@b165d47) fix: correct `Rule` typings ([#​20199](eslint/eslint#20199)) (jaymarvelz) - [`fb97cda`](eslint/eslint@fb97cda) fix: improve error message for missing fix function in suggestions ([#​20218](eslint/eslint#20218)) (jaymarvelz) #### Documentation - [`d3e81e3`](eslint/eslint@d3e81e3) docs: Always recommend to include a files property ([#​20158](eslint/eslint#20158)) (Percy Ma) - [`0f0385f`](eslint/eslint@0f0385f) docs: use consistent naming recommendation ([#​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` ([#​20255](eslint/eslint#20255)) (Tanuj Kanti) - [`10b995c`](eslint/eslint@10b995c) docs: add TS options and examples for `nofunc` in `no-use-before-define` ([#​20249](eslint/eslint#20249)) (Tanuj Kanti) - [`2584187`](eslint/eslint@2584187) docs: remove repetitive word in comment ([#​20242](eslint/eslint#20242)) (reddaisyy) - [`637216b`](eslint/eslint@637216b) docs: update CLI flags migration instructions ([#​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 ([#​20222](eslint/eslint#20222)) (sethamus) #### Chores - [`dfe3c1b`](eslint/eslint@dfe3c1b) chore: update `@eslint/js` version to 9.39.0 ([#​20270](eslint/eslint#20270)) (Francesco Trotta) - [`2375a6d`](eslint/eslint@2375a6d) chore: package.json update for [@​eslint/js](https://github.com/eslint/js) release (Jenkins) - [`a1f4e52`](eslint/eslint@a1f4e52) chore: update `@eslint` dependencies ([#​20265](eslint/eslint#20265)) (Francesco Trotta) - [`c7d3229`](eslint/eslint@c7d3229) chore: update dependency [@​eslint/core](https://github.com/eslint/core) to ^0.17.0 ([#​20256](eslint/eslint#20256)) (renovate\[bot]) - [`27549bc`](eslint/eslint@27549bc) chore: update fuzz testing to not error if code sample minimizer fails ([#​20252](eslint/eslint#20252)) (Milos Djermanovic) - [`a1370ee`](eslint/eslint@a1370ee) ci: bump actions/setup-node from 5 to 6 ([#​20230](eslint/eslint#20230)) (dependabot\[bot]) - [`9e7fad4`](eslint/eslint@9e7fad4) chore: add script to auto-generate eslint:recommended configuration ([#​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 ([#​20048](eslint/eslint#20048)) (Atul Nair) - [`e37e590`](eslint/eslint@e37e590) feat: correct `no-loss-of-precision` false positives with `e` notation ([#​20187](eslint/eslint#20187)) (Francesco Trotta) #### Bug Fixes - [`50c3dfd`](eslint/eslint@50c3dfd) fix: improve type support for isolated dependencies in pnpm ([#​20201](eslint/eslint#20201)) (Francesco Trotta) - [`a1f06a3`](eslint/eslint@a1f06a3) fix: correct SourceCode typings ([#​20114](eslint/eslint#20114)) (Pixel998) #### Documentation - [`462675a`](eslint/eslint@462675a) docs: improve web accessibility by hiding non-semantic character ([#​20205](eslint/eslint#20205)) (루밀LuMir) - [`c070e65`](eslint/eslint@c070e65) docs: correct formatting in `no-irregular-whitespace` rule documentation ([#​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` ([#​20190](eslint/eslint#20190)) (Percy Ma) #### Chores - [`d17c795`](eslint/eslint@d17c795) chore: upgrade [@​eslint/js](https://github.com/eslint/js)@​9.38.0 ([#​20221](eslint/eslint#20221)) (Milos Djermanovic) - [`25d0e33`](eslint/eslint@25d0e33) chore: package.json update for [@​eslint/js](https://github.com/eslint/js) release (Jenkins) - [`c82b5ef`](eslint/eslint@c82b5ef) refactor: Use types from [@​eslint/core](https://github.com/eslint/core) ([#​20168](eslint/eslint#20168)) (Nicholas C. Zakas) - [`ff31609`](eslint/eslint@ff31609) ci: add Node.js 25 to `ci.yml` ([#​20220](eslint/eslint#20220)) (루밀LuMir) - [`004577e`](eslint/eslint@004577e) ci: bump github/codeql-action from 3 to 4 ([#​20211](eslint/eslint#20211)) (dependabot\[bot]) - [`eac71fb`](eslint/eslint@eac71fb) test: remove use of `nodejsScope` option of eslint-scope from tests ([#​20206](eslint/eslint#20206)) (Milos Djermanovic) - [`4168a18`](eslint/eslint@4168a18) chore: fix typo in legacy-eslint.js ([#​20202](eslint/eslint#20202)) (Sweta Tanwar) - [`205dbd2`](eslint/eslint@205dbd2) chore: fix typos ([#​20200](eslint/eslint#20200)) (ntnyq) - [`dbb200e`](eslint/eslint@dbb200e) chore: use team member's username when name is not available in data ([#​20194](eslint/eslint#20194)) (Milos Djermanovic) - [`8962089`](eslint/eslint@8962089) chore: mark deprecated rules as available until v11.0.0 ([#​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 ([#​20163](eslint/eslint#20163)) (Pixel998) - [`f81eabc`](eslint/eslint@f81eabc) feat: support TS syntax in `no-restricted-imports` ([#​19562](eslint/eslint#19562)) (Nitin Kumar) #### Bug Fixes - [`a129cce`](eslint/eslint@a129cce) fix: correct `no-loss-of-precision` false positives for leading zeros ([#​20164](eslint/eslint#20164)) (Francesco Trotta) - [`09e04fc`](eslint/eslint@09e04fc) fix: add missing AST token types ([#​20172](eslint/eslint#20172)) (Pixel998) - [`861c6da`](eslint/eslint@861c6da) fix: correct `ESLint` typings ([#​20122](eslint/eslint#20122)) (Pixel998) #### Documentation - [`b950359`](eslint/eslint@b950359) docs: fix typos across the docs ([#​20182](eslint/eslint#20182)) (루밀LuMir) - [`42498a2`](eslint/eslint@42498a2) docs: improve ToC accessibility by hiding non-semantic character ([#​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 ([#​20170](eslint/eslint#20170)) (Pixel998) - [`90a71bf`](eslint/eslint@90a71bf) docs: update `README` files to add badge and instructions ([#​20115](eslint/eslint#20115)) (루밀LuMir) - [`1603ae1`](eslint/eslint@1603ae1) docs: update references from `master` to `main` ([#​20153](eslint/eslint#20153)) (루밀LuMir) #### Chores - [`afe8a13`](eslint/eslint@afe8a13) chore: update `@eslint/js` dependency to version 9.37.0 ([#​20183](eslint/eslint#20183)) (Francesco Trotta) - [`abee4ca`](eslint/eslint@abee4ca) chore: package.json update for [@​eslint/js](https://github.com/eslint/js) release (Jenkins) - [`fc9381f`](eslint/eslint@fc9381f) chore: fix typos in comments ([#​20175](eslint/eslint#20175)) (overlookmotel) - [`e1574a2`](eslint/eslint@e1574a2) chore: unpin jiti ([#​20173](eslint/eslint#20173)) (renovate\[bot]) - [`e1ac05e`](eslint/eslint@e1ac05e) refactor: mark `ESLint.findConfigFile()` as `async`, add missing docs ([#​20157](eslint/eslint#20157)) (Pixel998) - [`347906d`](eslint/eslint@347906d) chore: update eslint ([#​20149](eslint/eslint#20149)) (renovate\[bot]) - [`0cb5897`](eslint/eslint@0cb5897) test: remove tmp dir created for circular fixes in multithread mode test ([#​20146](eslint/eslint#20146)) (Milos Djermanovic) - [`bb99566`](eslint/eslint@bb99566) ci: pin `jiti` to version 2.5.1 ([#​20151](eslint/eslint#20151)) (Pixel998) - [`177f669`](eslint/eslint@177f669) perf: improve worker count calculation for `"auto"` concurrency ([#​20067](eslint/eslint#20067)) (Francesco Trotta) - [`448b57b`](eslint/eslint@448b57b) chore: Mark deprecated formatting rules as available until v11.0.0 ([#​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 ([#​20109](eslint/eslint#20109)) (Francesco Trotta) #### Bug Fixes - [`75b74d8`](eslint/eslint@75b74d8) fix: add missing rule option types ([#​20127](eslint/eslint#20127)) (ntnyq) - [`1c0d850`](eslint/eslint@1c0d850) fix: update `eslint-all.js` to use `Object.freeze` for `rules` object ([#​20116](eslint/eslint#20116)) (루밀LuMir) - [`7d61b7f`](eslint/eslint@7d61b7f) fix: add missing scope types to `Scope.type` ([#​20110](eslint/eslint#20110)) (Pixel998) - [`7a670c3`](eslint/eslint@7a670c3) fix: correct rule option typings in `rules.d.ts` ([#​20084](eslint/eslint#20084)) (Pixel998) #### Documentation - [`b73ab12`](eslint/eslint@b73ab12) docs: update examples to use `defineConfig` ([#​20131](eslint/eslint#20131)) (sethamus) - [`31d9392`](eslint/eslint@31d9392) docs: fix typos ([#​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 [@​eslint/js](https://github.com/eslint/js)@​9.36.0 ([#​20139](eslint/eslint#20139)) (Milos Djermanovic) - [`488cba6`](eslint/eslint@488cba6) chore: package.json update for [@​eslint/js](https://github.com/eslint/js) release (Jenkins) - [`bac82a2`](eslint/eslint@bac82a2) ci: simplify renovate configuration ([#​19907](eslint/eslint#19907)) (唯然) - [`c00bb37`](eslint/eslint@c00bb37) ci: bump actions/labeler from 5 to 6 ([#​20090](eslint/eslint#20090)) (dependabot\[bot]) - [`fee751d`](eslint/eslint@fee751d) refactor: use `defaultOptions` in rules ([#​20121](eslint/eslint#20121)) (Pixel998) - [`1ace67d`](eslint/eslint@1ace67d) chore: update example to use `defineConfig` ([#​20111](eslint/eslint#20111)) (루밀LuMir) - [`4821963`](eslint/eslint@4821963) test: add missing loc information to error objects in rule tests ([#​20112](eslint/eslint#20112)) (루밀LuMir) - [`b42c42e`](eslint/eslint@b42c42e) chore: disallow use of deprecated `type` property in core rule tests ([#​20094](eslint/eslint#20094)) (Milos Djermanovic) - [`7bb498d`](eslint/eslint@7bb498d) test: remove deprecated `type` property from core rule tests ([#​20093](eslint/eslint#20093)) (Pixel998) - [`e10cf2a`](eslint/eslint@e10cf2a) ci: bump actions/setup-node from 4 to 5 ([#​20089](eslint/eslint#20089)) (dependabot\[bot]) - [`5cb0ce4`](eslint/eslint@5cb0ce4) refactor: use `meta.defaultOptions` in `preserve-caught-error` ([#​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` ([#​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 ([#​20057](eslint/eslint#20057)) (jaymarvelz) - [`102f444`](eslint/eslint@102f444) feat: implement suggestions for no-empty-static-block ([#​20056](eslint/eslint#20056)) (jaymarvelz) - [`e51ffff`](eslint/eslint@e51ffff) feat: add `preserve-caught-error` rule ([#​19913](eslint/eslint#19913)) (Amnish Singh Arora) #### Bug Fixes - [`10e7ae2`](eslint/eslint@10e7ae2) fix: update uncloneable options error message ([#​20059](eslint/eslint#20059)) (soda-sorcery) - [`bfa4601`](eslint/eslint@bfa4601) fix: ignore empty switch statements with comments in no-empty rule ([#​20045](eslint/eslint#20045)) (jaymarvelz) - [`dfd11de`](eslint/eslint@dfd11de) fix: add `before` and `after` to test case types ([#​20049](eslint/eslint#20049)) (Francesco Trotta) - [`dabbe95`](eslint/eslint@dabbe95) fix: correct types for `no-restricted-imports` rule ([#​20034](eslint/eslint#20034)) (Milos Djermanovic) - [`ea789c7`](eslint/eslint@ea789c7) fix: no-loss-of-precision false positive with uppercase exponent ([#​20032](eslint/eslint#20032)) (sethamus) #### Documentation - [`d265515`](eslint/eslint@d265515) docs: improve phrasing - "if" → "even if" from getting-started section ([#​20074](eslint/eslint#20074)) (jjangga0214) - [`a355a0e`](eslint/eslint@a355a0e) docs: invert comparison logic for example in `no-var` doc page ([#​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 ([#​20050](eslint/eslint#20050)) (Josh Goldberg ✨) - [`6ad8973`](eslint/eslint@6ad8973) docs: update `--no-ignore` and `--ignore-pattern` documentation ([#​20036](eslint/eslint#20036)) (Francesco Trotta) - [`8033b19`](eslint/eslint@8033b19) docs: add documentation for `--no-config-lookup` ([#​20033](eslint/eslint#20033)) (Francesco Trotta) #### Chores - [`da87f2f`](eslint/eslint@da87f2f) chore: upgrade [@​eslint/js](https://github.com/eslint/js)@​9.35.0 ([#​20077](eslint/eslint#20077)) (Milos Djermanovic) - [`af2a087`](eslint/eslint@af2a087) chore: package.json update for [@​eslint/js](https://github.com/eslint/js) release (Jenkins) - [`7055764`](eslint/eslint@7055764) test: remove `tests/lib/eslint/eslint.config.js` ([#​20065](eslint/eslint#20065)) (Milos Djermanovic) - [`84ffb96`](eslint/eslint@84ffb96) chore: update `@eslint-community/eslint-utils` ([#​20069](eslint/eslint#20069)) (Francesco Trotta) - [`d5ef939`](eslint/eslint@d5ef939) refactor: remove deprecated `context.parserOptions` usage across rules ([#​20060](eslint/eslint#20060)) (sethamus) - [`1b3881d`](eslint/eslint@1b3881d) chore: remove redundant word ([#​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 ([#​18383](prettier/prettier#18383) by [@​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 ([#​18393](prettier/prettier#18393) by [@​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 ([#​18395](prettier/prettier#18395) by [@​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 ([#​18375](prettier/prettier#18375) by [@​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 ([#​18351](prettier/prettier#18351) by [@​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 ([#​18352](prettier/prettier#18352) by [@​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 ([#​18364](prettier/prettier#18364) by [@​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 ([#​18342](prettier/prettier#18342) by [@​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` ([#​8850](stylelint/stylelint#8850)) ([@​romainmenke](https://github.com/romainmenke)). - Fixed: `at-rule-no-unknown` false positives for `@function` ([#​8851](stylelint/stylelint#8851)) ([@​jeddy3](https://github.com/jeddy3)). - Fixed: `declaration-property-value-no-unknown` false positives for `attr()`, `if()` and custom functions ([#​8853](stylelint/stylelint#8853)) ([@​jeddy3](https://github.com/jeddy3)). - Fixed: `function-url-quotes` false positives when URLs require quoting ([#​8804](stylelint/stylelint#8804)) ([@​taearls](https://github.com/taearls)). - Fixed: `selector-pseudo-element-no-unknown` false positives for `::scroll-button()` ([#​8856](stylelint/stylelint#8856)) ([@​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 ([#​8834](stylelint/stylelint#8834)) ([@​silverwind](https://github.com/silverwind)). - Fixed: `custom-property-no-missing-var-function` false positives for style query in `if()` function ([#​8813](stylelint/stylelint#8813)) ([@​sajdakabir](https://github.com/sajdakabir)). - Fixed: `media-feature-range-notation` false positives for multiple queries and `except: exact-value` ([#​8832](stylelint/stylelint#8832)) ([@​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 ([#​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)). ### [`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 ([#​8680](stylelint/stylelint#8680)) ([@​sw1tch3roo](https://github.com/sw1tch3roo)). - Added: `ignoreAtRules: []` to `nesting-selector-no-missing-scoping-root` ([#​8743](stylelint/stylelint#8743)) ([@​karlhorky](https://github.com/karlhorky)). - Fixed: `function-no-unknown` false positives for `contrast-color()` and `sibling-*()` ([#​8729](stylelint/stylelint#8729)) ([@​Mouvedia](https://github.com/Mouvedia)). - Fixed: `selector-pseudo-class-no-unknown` false positives for `:heading` ([#​8749](stylelint/stylelint#8749)) ([@​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>
Closes #8173
Adds bulk suppressions to Stylelint, based on ESLint’s feature.
--suppress,--suppress=<rule>,--suppress-locationcli.mdand full guide inuser-guide/suppressions.mdReference: