Update @beanbag/eslint-plugin for eslint 9+

Review Request #14562 — Created Aug. 19, 2025 and updated

Information

beanbag-eslint-plugin
master

Reviewers

The version of eslint that we use in most places (8) now spews a warning
about no longer being supported. eslint 9 made a few changes that
require us to update our plugin (which is more a shared configuration
than an actual plugin):

All built-in rules that enforce style have been formally deprecated in
eslint, and actually removed from @typescript-eslint. These now live
in a new plugin, @stylistic/eslint-plugin.

Converting to the new stylistic rules means we can actually simplify our
configuration a bit. Rules that had typescript-specific modes now no
longer require us to disable the JS rule and enable a typescript one,
and we can just include it all in our base configuration.

The indent rule has some known issues with typescript, and it seems
like nobody is terribly willing to rewrite it to fix these. The impact
here seems limited to type parameters for generics. I've added a couple
ignored node types in order to work around this.

For linting within this codebase itself, the eslint configuration now
lives in eslint.config.mjs rather than .eslintrc. This also required
new dependencies for @eslint/eslintrc, @eslint/js, and globals

While I was here, I bumped our babel and typescript dependencies,
why not.

  • Ran npm build
  • Ran linting.
  • Set this up as a link in another package and updated that package to
    use eslint 9. Verified that we got correct linting output.
Summary ID
Update @beanbag/eslint-plugin for ESLint 9+
The version of ESLint that we use in most places (8) now spews a warning about no longer being supported. ESLint 9 made a few changes that require us to update our plugin (which is more a shared configuration than an actual plugin): All built-in rules that enforce style have been formally deprecated in ESLint, and actually removed from `@typescript-eslint`. These now live in a new plugin, `@stylistic/eslint-plugin`. Converting to the new stylistic rules means we can actually simplify our configuration a bit. Rules that had TypeScript-specific modes now no longer require us to disable the JS rule and enable a TypeScript one, and we can just include it all in our base configuration. The `indent` rule has some known issues with TypeScript, and it seems like nobody is terribly willing to rewrite it to fix these. The impact here seems limited to type parameters for generics. I've added a couple ignored node types in order to work around this. For linting within this codebase itself, the ESLint configuration now lives in `eslint.config.mjs` rather than `.eslintrc`. This also required new dependencies for `@eslint/eslintrc`, `@eslint/js`, and `globals` While I was here, I bumped our `babel` and `typescript` dependencies, why not. Testing Done: - Ran `npm build` - Ran linting. - Set this up as a link in another package and updated that package to use eslint 9. Verified that we got correct linting output.
kvoyurwrsutsmpzqvnqnltslovopqlll
Description From Last Updated

"typescript" -> "TypeScript" and "eslint" -> "ESLint" in the description.

chipx86chipx86

Two blank lines.

chipx86chipx86

This is a mix of node imports, third-pary imports, and first-party imports. Let's separate into groups.

chipx86chipx86

Two blank lines here.

chipx86chipx86
chipx86
  1. 
      
  2. Show all issues

    "typescript" -> "TypeScript" and "eslint" -> "ESLint" in the description.

  3. 
      
chipx86
  1. 
      
  2. NEWS.md (Diff revision 1)
     
     
     
     
    Show all issues

    Two blank lines.

  3. eslint.config.mjs (Diff revision 1)
     
     
    Show all issues

    This is a mix of node imports, third-pary imports, and first-party imports. Let's separate into groups.

    1. This was just how their upgrade tool did it. Fixed.

  4. eslint.config.mjs (Diff revision 1)
     
     
     
     
    Show all issues

    Two blank lines here.

  5. 
      
david
Review request changed
Commits:
Summary ID
Update @beanbag/eslint-plugin for eslint 9+
The version of eslint that we use in most places (8) now spews a warning about no longer being supported. eslint 9 made a few changes that require us to update our plugin (which is more a shared configuration than an actual plugin): All built-in rules that enforce style have been formally deprecated in eslint, and actually removed from `@typescript-eslint`. These now live in a new plugin, `@stylistic/eslint-plugin`. Converting to the new stylistic rules means we can actually simplify our configuration a bit. Rules that had typescript-specific modes now no longer require us to disable the JS rule and enable a typescript one, and we can just include it all in our base configuration. The `indent` rule has some known issues with typescript, and it seems like nobody is terribly willing to rewrite it to fix these. The impact here seems limited to type parameters for generics. I've added a couple ignored node types in order to work around this. For linting within this codebase itself, the eslint configuration now lives in `eslint.config.mjs` rather than `.eslintrc`. This also required new dependencies for `@eslint/eslintrc`, `@eslint/js`, and `globals` While I was here, I bumped our `babel` and `typescript` dependencies, why not. Testing Done: - Ran `npm build` - Ran linting. - Set this up as a link in another package and updated that package to use eslint 9. Verified that we got correct linting output.
kvoyurwrsutsmpzqvnqnltslovopqlll
Update @beanbag/eslint-plugin for ESLint 9+
The version of ESLint that we use in most places (8) now spews a warning about no longer being supported. ESLint 9 made a few changes that require us to update our plugin (which is more a shared configuration than an actual plugin): All built-in rules that enforce style have been formally deprecated in ESLint, and actually removed from `@typescript-eslint`. These now live in a new plugin, `@stylistic/eslint-plugin`. Converting to the new stylistic rules means we can actually simplify our configuration a bit. Rules that had TypeScript-specific modes now no longer require us to disable the JS rule and enable a TypeScript one, and we can just include it all in our base configuration. The `indent` rule has some known issues with TypeScript, and it seems like nobody is terribly willing to rewrite it to fix these. The impact here seems limited to type parameters for generics. I've added a couple ignored node types in order to work around this. For linting within this codebase itself, the ESLint configuration now lives in `eslint.config.mjs` rather than `.eslintrc`. This also required new dependencies for `@eslint/eslintrc`, `@eslint/js`, and `globals` While I was here, I bumped our `babel` and `typescript` dependencies, why not. Testing Done: - Ran `npm build` - Ran linting. - Set this up as a link in another package and updated that package to use eslint 9. Verified that we got correct linting output.
kvoyurwrsutsmpzqvnqnltslovopqlll

Checks run (2 succeeded)

flake8 passed.
JSHint passed.
maubin
  1. Ship It!
  2.