From 918dbed99f74702b06f317d4632b58c9ba84f9c7 Mon Sep 17 00:00:00 2001 From: Brett Zamir Date: Thu, 17 Aug 2023 17:03:23 -0700 Subject: [PATCH] feat: support Flat ESLint config; fixes #1131 --- .README/README.md | 25 +++++++++++++++++++++++++ README.md | 31 +++++++++++++++++++++++++++++++ src/index.js | 32 ++++++++++++++++++++++---------- 3 files changed, 78 insertions(+), 10 deletions(-) diff --git a/.README/README.md b/.README/README.md index 2487576c0..691fc30b8 100644 --- a/.README/README.md +++ b/.README/README.md @@ -27,6 +27,31 @@ npm install --save-dev eslint-plugin-jsdoc ## Configuration +### Flat config + +```js +import jsdoc from 'eslint-plugin-jsdoc'; + +const config = [ + // configuration included in plugin + jsdoc.configs['flat/recommended'], + // other configuration objects... + { + files: ['**/*.js'], + plugins: { + jsdoc, + }, + rules: { + 'jsdoc/require-description': 'warn' + } + } +]; + +export default config; +``` + +### `eslintrc` + Add `plugins` section to [.eslintrc.*](https://eslint.org/docs/user-guide/configuring#configuration-file-formats) and specify `eslint-plugin-jsdoc` as a plugin. diff --git a/README.md b/README.md index cb1108b32..a96bc2e72 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,8 @@ JSDoc linting rules for ESLint. * [eslint-plugin-jsdoc](#user-content-eslint-plugin-jsdoc) * [Installation](#user-content-eslint-plugin-jsdoc-installation) * [Configuration](#user-content-eslint-plugin-jsdoc-configuration) + * [Flat config](#user-content-eslint-plugin-jsdoc-configuration-flat-config) + * [`eslintrc`](#user-content-eslint-plugin-jsdoc-configuration-eslintrc) * [Options](#user-content-eslint-plugin-jsdoc-options) * [Settings](#user-content-eslint-plugin-jsdoc-settings) * [Advanced](#user-content-eslint-plugin-jsdoc-advanced) @@ -40,6 +42,35 @@ npm install --save-dev eslint-plugin-jsdoc ## Configuration + + +### Flat config + +```js +import jsdoc from 'eslint-plugin-jsdoc'; + +const config = [ + // configuration included in plugin + jsdoc.configs['flat/recommended'], + // other configuration objects... + { + files: ['**/*.js'], + plugins: { + jsdoc, + }, + rules: { + 'jsdoc/require-description': 'warn' + } + } +]; + +export default config; +``` + + + +### eslintrc + Add `plugins` section to [.eslintrc.*](https://eslint.org/docs/user-guide/configuring#configuration-file-formats) and specify `eslint-plugin-jsdoc` as a plugin. diff --git a/src/index.js b/src/index.js index 490fbb611..6ed3d59c8 100644 --- a/src/index.js +++ b/src/index.js @@ -54,7 +54,7 @@ import validTypes from './rules/validTypes.js'; /** * @type {import('eslint').ESLint.Plugin & { - * configs: Record + * configs: Record * }} */ const index = { @@ -118,11 +118,14 @@ const index = { /** * @param {"warn"|"error"} warnOrError - * @returns {import('eslint').ESLint.ConfigData} + * @param {boolean} [flat] + * @returns {import('eslint').ESLint.ConfigData | {plugins: {}, rules: {}}} */ -const createRecommendedRuleset = (warnOrError) => { +const createRecommendedRuleset = (warnOrError, flat) => { return { - plugins: [ + plugins: flat ? { + jsdoc: index, + } : [ 'jsdoc', ], rules: { @@ -185,10 +188,11 @@ const createRecommendedRuleset = (warnOrError) => { /** * @param {"warn"|"error"} warnOrError - * @returns {import('eslint').ESLint.ConfigData} + * @param {boolean} [flat] + * @returns {import('eslint').ESLint.ConfigData|{}} */ -const createRecommendedTypeScriptRuleset = (warnOrError) => { - const ruleset = createRecommendedRuleset(warnOrError); +const createRecommendedTypeScriptRuleset = (warnOrError, flat) => { + const ruleset = createRecommendedRuleset(warnOrError, flat); return { ...ruleset, @@ -212,10 +216,11 @@ const createRecommendedTypeScriptRuleset = (warnOrError) => { /** * @param {"warn"|"error"} warnOrError - * @returns {import('eslint').ESLint.ConfigData} + * @param {boolean} [flat] + * @returns {import('eslint').ESLint.ConfigData|{}} */ -const createRecommendedTypeScriptFlavorRuleset = (warnOrError) => { - const ruleset = createRecommendedRuleset(warnOrError); +const createRecommendedTypeScriptFlavorRuleset = (warnOrError, flat) => { + const ruleset = createRecommendedRuleset(warnOrError, flat); return { ...ruleset, @@ -240,4 +245,11 @@ index.configs['recommended-typescript-error'] = createRecommendedTypeScriptRules index.configs['recommended-typescript-flavor'] = createRecommendedTypeScriptFlavorRuleset('warn'); index.configs['recommended-typescript-flavor-error'] = createRecommendedTypeScriptFlavorRuleset('error'); +index.configs['flat/recommended'] = createRecommendedRuleset('warn', true); +index.configs['flat/recommended-error'] = createRecommendedRuleset('error', true); +index.configs['flat/recommended-typescript'] = createRecommendedTypeScriptRuleset('warn', true); +index.configs['flat/recommended-typescript-error'] = createRecommendedTypeScriptRuleset('error', true); +index.configs['flat/recommended-typescript-flavor'] = createRecommendedTypeScriptFlavorRuleset('warn', true); +index.configs['flat/recommended-typescript-flavor-error'] = createRecommendedTypeScriptFlavorRuleset('error', true); + export default index;