Skip to content

Commit 918dbed

Browse files
committed
feat: support Flat ESLint config; fixes #1131
1 parent 48cc6be commit 918dbed

File tree

3 files changed

+78
-10
lines changed

3 files changed

+78
-10
lines changed

.README/README.md

+25
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,31 @@ npm install --save-dev eslint-plugin-jsdoc
2727

2828
## Configuration
2929

30+
### Flat config
31+
32+
```js
33+
import jsdoc from 'eslint-plugin-jsdoc';
34+
35+
const config = [
36+
// configuration included in plugin
37+
jsdoc.configs['flat/recommended'],
38+
// other configuration objects...
39+
{
40+
files: ['**/*.js'],
41+
plugins: {
42+
jsdoc,
43+
},
44+
rules: {
45+
'jsdoc/require-description': 'warn'
46+
}
47+
}
48+
];
49+
50+
export default config;
51+
```
52+
53+
### `eslintrc`
54+
3055
Add `plugins` section to [.eslintrc.*](https://eslint.org/docs/user-guide/configuring#configuration-file-formats)
3156
and specify `eslint-plugin-jsdoc` as a plugin.
3257

README.md

+31
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ JSDoc linting rules for ESLint.
1212
* [eslint-plugin-jsdoc](#user-content-eslint-plugin-jsdoc)
1313
* [Installation](#user-content-eslint-plugin-jsdoc-installation)
1414
* [Configuration](#user-content-eslint-plugin-jsdoc-configuration)
15+
* [Flat config](#user-content-eslint-plugin-jsdoc-configuration-flat-config)
16+
* [`eslintrc`](#user-content-eslint-plugin-jsdoc-configuration-eslintrc)
1517
* [Options](#user-content-eslint-plugin-jsdoc-options)
1618
* [Settings](#user-content-eslint-plugin-jsdoc-settings)
1719
* [Advanced](#user-content-eslint-plugin-jsdoc-advanced)
@@ -40,6 +42,35 @@ npm install --save-dev eslint-plugin-jsdoc
4042
<a name="eslint-plugin-jsdoc-configuration"></a>
4143
## Configuration
4244

45+
<a name="user-content-eslint-plugin-jsdoc-configuration-flat-config"></a>
46+
<a name="eslint-plugin-jsdoc-configuration-flat-config"></a>
47+
### Flat config
48+
49+
```js
50+
import jsdoc from 'eslint-plugin-jsdoc';
51+
52+
const config = [
53+
// configuration included in plugin
54+
jsdoc.configs['flat/recommended'],
55+
// other configuration objects...
56+
{
57+
files: ['**/*.js'],
58+
plugins: {
59+
jsdoc,
60+
},
61+
rules: {
62+
'jsdoc/require-description': 'warn'
63+
}
64+
}
65+
];
66+
67+
export default config;
68+
```
69+
70+
<a name="user-content-eslint-plugin-jsdoc-configuration-eslintrc"></a>
71+
<a name="eslint-plugin-jsdoc-configuration-eslintrc"></a>
72+
### <code>eslintrc</code>
73+
4374
Add `plugins` section to [.eslintrc.*](https://eslint.org/docs/user-guide/configuring#configuration-file-formats)
4475
and specify `eslint-plugin-jsdoc` as a plugin.
4576

src/index.js

+22-10
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ import validTypes from './rules/validTypes.js';
5454

5555
/**
5656
* @type {import('eslint').ESLint.Plugin & {
57-
* configs: Record<string, import('eslint').ESLint.ConfigData>
57+
* configs: Record<string, import('eslint').ESLint.ConfigData|{}>
5858
* }}
5959
*/
6060
const index = {
@@ -118,11 +118,14 @@ const index = {
118118

119119
/**
120120
* @param {"warn"|"error"} warnOrError
121-
* @returns {import('eslint').ESLint.ConfigData}
121+
* @param {boolean} [flat]
122+
* @returns {import('eslint').ESLint.ConfigData | {plugins: {}, rules: {}}}
122123
*/
123-
const createRecommendedRuleset = (warnOrError) => {
124+
const createRecommendedRuleset = (warnOrError, flat) => {
124125
return {
125-
plugins: [
126+
plugins: flat ? {
127+
jsdoc: index,
128+
} : [
126129
'jsdoc',
127130
],
128131
rules: {
@@ -185,10 +188,11 @@ const createRecommendedRuleset = (warnOrError) => {
185188

186189
/**
187190
* @param {"warn"|"error"} warnOrError
188-
* @returns {import('eslint').ESLint.ConfigData}
191+
* @param {boolean} [flat]
192+
* @returns {import('eslint').ESLint.ConfigData|{}}
189193
*/
190-
const createRecommendedTypeScriptRuleset = (warnOrError) => {
191-
const ruleset = createRecommendedRuleset(warnOrError);
194+
const createRecommendedTypeScriptRuleset = (warnOrError, flat) => {
195+
const ruleset = createRecommendedRuleset(warnOrError, flat);
192196

193197
return {
194198
...ruleset,
@@ -212,10 +216,11 @@ const createRecommendedTypeScriptRuleset = (warnOrError) => {
212216

213217
/**
214218
* @param {"warn"|"error"} warnOrError
215-
* @returns {import('eslint').ESLint.ConfigData}
219+
* @param {boolean} [flat]
220+
* @returns {import('eslint').ESLint.ConfigData|{}}
216221
*/
217-
const createRecommendedTypeScriptFlavorRuleset = (warnOrError) => {
218-
const ruleset = createRecommendedRuleset(warnOrError);
222+
const createRecommendedTypeScriptFlavorRuleset = (warnOrError, flat) => {
223+
const ruleset = createRecommendedRuleset(warnOrError, flat);
219224

220225
return {
221226
...ruleset,
@@ -240,4 +245,11 @@ index.configs['recommended-typescript-error'] = createRecommendedTypeScriptRules
240245
index.configs['recommended-typescript-flavor'] = createRecommendedTypeScriptFlavorRuleset('warn');
241246
index.configs['recommended-typescript-flavor-error'] = createRecommendedTypeScriptFlavorRuleset('error');
242247

248+
index.configs['flat/recommended'] = createRecommendedRuleset('warn', true);
249+
index.configs['flat/recommended-error'] = createRecommendedRuleset('error', true);
250+
index.configs['flat/recommended-typescript'] = createRecommendedTypeScriptRuleset('warn', true);
251+
index.configs['flat/recommended-typescript-error'] = createRecommendedTypeScriptRuleset('error', true);
252+
index.configs['flat/recommended-typescript-flavor'] = createRecommendedTypeScriptFlavorRuleset('warn', true);
253+
index.configs['flat/recommended-typescript-flavor-error'] = createRecommendedTypeScriptFlavorRuleset('error', true);
254+
243255
export default index;

0 commit comments

Comments
 (0)