ota-meshi / eslint-plugin-regexp

ESLint plugin for finding regex mistakes and style guide violations.

Home Page:https://ota-meshi.github.io/eslint-plugin-regexp/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Support flat config (eslint.config.js)

fisker opened this issue · comments

I'm still wondering how best practice is to export a new shareable configuration 🤔
I would like to export using the same method as the popular eslint-plugin, but I don't know what it is yet.

Otherwise, I can think of the following method:

  • Use configs.recommended namespace.
    plugin.configs.recommended is reserved for legacy configurations.
    I don't want to change it for backwards compatibility.
  • Use a new namespace.
    I don't want to use names like plugin.flatConfigs.recommended, and plugin.configs.flatRecommended. "Flat" quickly becomes meaningless.
    Also, I think it is difficult to understand the difference between config and configs.
    I'm not sure what namespace to use instead that would be easier for people to use.
  • Use new *.js file.
    e.g. import { recommended } from 'eslint-plugin-regexp/configs'.
  • Make plugin.configs an object-like function with properties.
    e.g. plugin.configs('recommended').

eslint-plugin-unicorn decide to use plugin.configs['flat/recommended'], its used in ESLint blog post, see also discussion.

Thank you for sharing the discussion! I will check it.

This is just a note of my research.
I looked into how each plugin supported flat configurations. By the way, none of the plugins I maintain support flat configurations yet.

plugin.configs['flat/recommended']

import recommended from 'eslint-plugin-x/configs/recommended'

Renamed legacy configurations (Breaking change)

Not supported yet (PR is open)

Not supported yet


Unorganized notes

It looks like eslint-config-standard has dropped support for legacy configurations.
https://github.com/standard/eslint-config-standard

Note: @typescript-eslint is using a new package because we have both the plugin and the parser. It does also help us out as we don't even need to think about the problem cos it comes for free heh.

The advice from upstream is the breaking change approach - though I don't like it, personally as it's making second class citizens of users not on flat configs.

There's no specific reason that you need to make it available on the .config export of your package. You could also do it as a different exported name, or a separate path (eslint-plugin-regexp/config).

Unicorn didn't use /config because this requires exports to be added in package.json, since it should support both import and require.