Description
Which packages would you like to change?
-
@eslint/compat
-
@eslint/config-array
-
@eslint/config-helpers
-
@eslint/core
-
@eslint/migrate-config
-
@eslint/object-schema
-
@eslint/plugin-kit
What problem do you want to solve?
Right now, there's no standard factory function for writing ESLint plugins. https://eslint.org/docs/latest/extend/plugins provides suggested starting objects but:
- It's easy to mistype, forget fields, etc. in plain objects
- Having a factory function makes it easier to give types-directed suggestions in editors and type checking
- The function could abstract away the -IMO confusing- computed
get()
er and/orObject.assign
folks have to do to get circular references working in the objects - It could also apply common patterns and/or optimizations for users so they don't have to:
- Common pattern: generating configs based on
meta.docs.recommended
or other properties - Optimizations: Enhancement: Support Lazy Loading Rules typescript-eslint/typescript-eslint#11029
- Common pattern: generating configs based on
What do you think is the correct solution?
How about an @eslint/plugin-utils
package with a definePlugin
export?
import { definePlugin } from "@eslint/plugin-utils";
export default definePlugin({
meta: {
name: "eslint-plugin-example",
version: "1.2.3",
},
rules: {
"dollar-sign": {
meta: {
docs: {
recommended: true,
}
},
create(context) {
// rule implementation ...
},
},
},
});
That meta.docs.recommended
could be used to generate a configs.recommended
in the standard format(s) preferred by flat config.
Participation
- I am willing to submit a pull request for this change.
Additional comments
@eslint/plugin-kit
exists but it's really more of a "languages" kit. I separately tried searching plugin-kit
, plugin-utils
, and similar terms on ESLint's issue trackers. The closest mention I could find was eslint/eslint#4301 (comment). I have a vague memory of this being discussed somewhere previously, but can't remember where...?
I'd be happy to write up an RFC if it's a direction the project would be interested in.
Metadata
Metadata
Assignees
Labels
Type
Projects
Status