Update @beanbag/eslint-plugin to use modern config and plugin layout.

Review Request #14653 — Created Oct. 25, 2025 and updated

Information

beanbag-eslint-plugin
master

Reviewers

When I updated the ESLint plugin to support version 9, I did so in only
the most minimal way. This ended up requiring that consumers install an
additional package (@eslint/eslintrc) and use FlatCompat in their
configurations.

This change updates our plugin to actually be a modern plugin with
modern shared configuration:

  • Each of our predefined config layers is itself a flat config.
  • Configs are exported as plugin.configs.XXX.
  • Our cascading glob configs have been updated to use **/..., which makes
    it properly detect said files no matter where they are. This means we no
    longer have to do things like unversally include tests globals, since
    the jasmine block will be loaded when its supposed to be.
  • Moved some things from devDependencies to dependencies to reduce
    what consumers have to install themselves.

There are also some changes to the build process:

  • Use rollup instead of invoking babel directly.
  • Provide ESM and CJS exports in addition to UMD.
  • Generate and provide type definitions.

I've also made a couple tweaks to the rules themselves:

  • Added some additional stuff to indent ignore rules to avoid issues
    with complex generic class definitions.
  • Switch ES6 quotes rule to use @stylistic/quotes.
  • Add a configuration for @typescript-eslint/no-unused-vars to match
    the JS one, and added underscore prefixes to allow us to ignore things
    even that aren't parameters or locals (for example, inside TS generic
    definitions).
  • Fixed links to @stylistic docs to link to the latest docs instead of
    an older version that we weren't even using.
  • Built the plugin.
  • Used this from all of our other packages.
Summary ID
Update @beanbag/eslint-plugin to use modern config and plugin layout.
When I updated the ESLint plugin to support version 9, I did so in only the most minimal way. This ended up requiring that consumers install an additional package (`@eslint/eslintrc`) and use `FlatCompat` in their configurations. This change updates our plugin to actually be a modern plugin with modern shared configuration: - Each of our predefined config layers is itself a flat config. - Configs are exported as `plugin.configs.XXX`. - Our cascading glob configs have been updated to use `**/...`, which makes it properly detect said files no matter where they are. This means we no longer have to do things like unversally include tests globals, since the jasmine block will be loaded when its supposed to be. - Moved some things from `devDependencies` to `dependencies` to reduce what consumers have to install themselves. There are also some changes to the build process: - Use rollup instead of invoking babel directly. - Provide ESM and CJS exports in addition to UMD. - Generate and provide type definitions. I've also made a couple tweaks to the rules themselves: - Added some additional stuff to indent ignore rules to avoid issues with complex generic class definitions. - Switch ES6 `quotes` rule to use `@stylistic/quotes`. - Add a configuration for `@typescript-eslint/no-unused-vars` to match the JS one, and added underscore prefixes to allow us to ignore things even that aren't parameters or locals (for example, inside TS generic definitions). - Fixed links to `@stylistic` docs to link to the latest docs instead of an older version that we weren't even using. Testing Done: - Built the plugin. - Ran tests. - Used this from all of our other packages.
ymzpvrzovplrzkrtoqmwvpmmxqpumqkt
Description From Last Updated

One blank line between bullet points.

chipx86chipx86

Two blank lines.

chipx86chipx86

Some of these have a trailing period, some don't.

chipx86chipx86
maubin
  1. Ship It!
  2. 
      
chipx86
  1. Some small consistency nits, but otherwise looks good.

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

    One blank line between bullet points.

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

    Two blank lines.

  4. README.md (Diff revision 1)
     
     
     
     
     
     
     
    Show all issues

    Some of these have a trailing period, some don't.

  5. 
      
david
david
Review request changed
Commits:
Summary ID
Update @beanbag/eslint-plugin to use modern config and plugin layout.
When I updated the ESLint plugin to support version 9, I did so in only the most minimal way. This ended up requiring that consumers install an additional package (`@eslint/eslintrc`) and use `FlatCompat` in their configurations. This change updates our plugin to actually be a modern plugin with modern shared configuration: - Each of our predefined config layers is itself a flat config. - Configs are exported as `plugin.configs.XXX`. - Our cascading glob configs have been updated to use `**/...`, which makes it properly detect said files no matter where they are. This means we no longer have to do things like unversally include tests globals, since the jasmine block will be loaded when its supposed to be. - Moved some things from `devDependencies` to `dependencies` to reduce what consumers have to install themselves. There are also some changes to the build process: - Use rollup instead of invoking babel directly. - Provide ESM and CJS exports in addition to UMD. - Generate and provide type definitions. I've also made a couple tweaks to the rules themselves: - Added some additional stuff to indent ignore rules to avoid issues with complex generic class definitions. - Switch ES6 `quotes` rule to use `@stylistic/quotes`. - Add a configuration for `@typescript-eslint/no-unused-vars` to match the JS one, and added underscore prefixes to allow us to ignore things even that aren't parameters or locals (for example, inside TS generic definitions). - Fixed links to `@stylistic` docs to link to the latest docs instead of an older version that we weren't even using. Testing Done: - Built the plugin. - Ran tests. - Used this from all of our other packages.
ymzpvrzovplrzkrtoqmwvpmmxqpumqkt
Update @beanbag/eslint-plugin to use modern config and plugin layout.
When I updated the ESLint plugin to support version 9, I did so in only the most minimal way. This ended up requiring that consumers install an additional package (`@eslint/eslintrc`) and use `FlatCompat` in their configurations. This change updates our plugin to actually be a modern plugin with modern shared configuration: - Each of our predefined config layers is itself a flat config. - Configs are exported as `plugin.configs.XXX`. - Our cascading glob configs have been updated to use `**/...`, which makes it properly detect said files no matter where they are. This means we no longer have to do things like unversally include tests globals, since the jasmine block will be loaded when its supposed to be. - Moved some things from `devDependencies` to `dependencies` to reduce what consumers have to install themselves. There are also some changes to the build process: - Use rollup instead of invoking babel directly. - Provide ESM and CJS exports in addition to UMD. - Generate and provide type definitions. I've also made a couple tweaks to the rules themselves: - Added some additional stuff to indent ignore rules to avoid issues with complex generic class definitions. - Switch ES6 `quotes` rule to use `@stylistic/quotes`. - Add a configuration for `@typescript-eslint/no-unused-vars` to match the JS one, and added underscore prefixes to allow us to ignore things even that aren't parameters or locals (for example, inside TS generic definitions). - Fixed links to `@stylistic` docs to link to the latest docs instead of an older version that we weren't even using. Testing Done: - Built the plugin. - Ran tests. - Used this from all of our other packages.
ymzpvrzovplrzkrtoqmwvpmmxqpumqkt

Checks run (2 succeeded)

flake8 passed.
JSHint passed.