Skip to content

Commit f2b1c1d

Browse files
feat: added granular flat TypeScript configs
1 parent 1cae2cb commit f2b1c1d

File tree

2 files changed

+98
-0
lines changed

2 files changed

+98
-0
lines changed

README.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,38 @@ const config = [
6868
export default config;
6969
```
7070

71+
The general starting rulesets you can extend from in flat config are:
72+
73+
* `jsdoc.configs['flat/recommended']`: Recommended starting rules for enforcing proper tag values, that common tags exist, and that tags are formatted and styled consistently
74+
* `jsdoc.configs['flat/recommended-error']`: The same, reporting with failing errors instead of mere warnings
75+
* `jsdoc.configs['flat/recommended-typescript']`: A similar recommended starting list, adjusted for projects using TypeScript syntax (and not just "typescript" `mode`)
76+
* `jsdoc.configs['flat/recommended-typescript-error']`: The same, reporting with failing errors instead of mere warnings
77+
* `jsdoc.configs['flat/recommended-typescript-flavor']`: A similar recommended starting list, adjusted for projects using JavaScript syntax (source files that are still `.js`) but using TypeScript flavor within JSDoc (i.e., the default "typescript" `mode` in `eslint-plugin-jsdoc`)
78+
* `jsdoc.configs['flat/recommended-typescript-flavor-error']`: The same, reporting with failing errors instead of mere warnings
79+
80+
#### Granular Flat Configs
81+
82+
There also exist several more granular, standalone TypeScript rulesets you can extend from.
83+
These each only enable a subset of the recommended starting rules:
84+
85+
* `jsdoc.configs['flat/logical-typescript']`: Includes only the rules that enforce proper tag values
86+
* `jsdoc.configs['flat/logical-typescript-error']`: The same, reporting with failing errors instead of mere warnings
87+
* `jsdoc.configs['flat/requirements-typescript']`: Includes only the rules that enforce tags exist
88+
* `jsdoc.configs['flat/requirements-typescript-error']`: The same, reporting with failing errors instead of mere warnings
89+
* `jsdoc.configs['flat/stylistic-typescript']`: Includes only the rules that enforce clear, consistent tag formatting and styles
90+
* `jsdoc.configs['flat/stylistic-typescript-error']`: The same, reporting with failing errors instead of mere warnings
91+
92+
For example, to enforce only that any JSDoc tags are valid and styled consistently, without enforcing that they must always exist:
93+
94+
```js
95+
import jsdoc from 'eslint-plugin-jsdoc';
96+
97+
export default [
98+
jsdoc.configs['flat/logical-typescript-error'],
99+
jsdoc.configs['flat/stylistic-typescript-error'],
100+
];
101+
```
102+
71103
<a name="user-content-eslint-plugin-jsdoc-configuration-eslintrc"></a>
72104
<a name="eslint-plugin-jsdoc-configuration-eslintrc"></a>
73105
### <code>eslintrc</code>

src/index.js

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,65 @@ const createRecommendedTypeScriptFlavorRuleset = (warnOrError, flatName) => {
260260
};
261261
};
262262

263+
/**
264+
* @param {string[]} ruleNames
265+
*/
266+
const createStandaloneRulesetFactory = (ruleNames) => {
267+
/**
268+
* @param {"warn"|"error"} warnOrError
269+
* @param {string} [flatName]
270+
* @returns {import('eslint').Linter.FlatConfig}
271+
*/
272+
return (warnOrError, flatName) => {
273+
return {
274+
name: 'jsdoc/' + flatName,
275+
plugins: { jsdoc: index },
276+
rules: Object.fromEntries(ruleNames.map(ruleName => [ruleName, warnOrError])),
277+
};
278+
};
279+
}
280+
281+
const createLogicalTypescriptRuleset = createStandaloneRulesetFactory([
282+
'jsdoc/check-access',
283+
'jsdoc/check-param-names',
284+
'jsdoc/check-property-names',
285+
'jsdoc/check-tag-names',
286+
'jsdoc/check-template-names',
287+
'jsdoc/check-types',
288+
'jsdoc/check-values',
289+
'jsdoc/empty-tags',
290+
'jsdoc/implements-on-classes',
291+
'jsdoc/require-returns-check',
292+
'jsdoc/require-yields-check',
293+
'jsdoc/no-defaults',
294+
'jsdoc/no-multi-asterisks',
295+
'jsdoc/no-types',
296+
'jsdoc/no-undefined-types',
297+
'jsdoc/valid-types',
298+
]);
299+
300+
const createRequirementsTypeScriptRuleset = createStandaloneRulesetFactory([
301+
'jsdoc/require-example',
302+
'jsdoc/require-jsdoc',
303+
'jsdoc/require-param',
304+
'jsdoc/require-param-description',
305+
'jsdoc/require-param-name',
306+
'jsdoc/require-property',
307+
'jsdoc/require-property-description',
308+
'jsdoc/require-property-name',
309+
'jsdoc/require-returns',
310+
'jsdoc/require-returns-description',
311+
'jsdoc/require-yields',
312+
]);
313+
314+
const createStylisticTypeScriptRuleset = createStandaloneRulesetFactory([
315+
'jsdoc/check-alignment',
316+
'jsdoc/lines-before-block',
317+
'jsdoc/multiline-blocks',
318+
'jsdoc/no-multi-asterisks',
319+
'jsdoc/tag-lines',
320+
]);
321+
263322
/* c8 ignore next 3 -- TS */
264323
if (!index.configs) {
265324
throw new Error('TypeScript guard');
@@ -279,6 +338,13 @@ index.configs['flat/recommended-typescript-error'] = createRecommendedTypeScript
279338
index.configs['flat/recommended-typescript-flavor'] = createRecommendedTypeScriptFlavorRuleset('warn', 'flat/recommended-typescript-flavor');
280339
index.configs['flat/recommended-typescript-flavor-error'] = createRecommendedTypeScriptFlavorRuleset('error', 'flat/recommended-typescript-flavor-error');
281340

341+
index.configs['flat/logical-typescript'] = createLogicalTypescriptRuleset('warn', 'flat/logical-typescript');
342+
index.configs['flat/logical-typescript-error'] = createLogicalTypescriptRuleset('error', 'flat/logical-typescript-error');
343+
index.configs['flat/requirements-typescript'] = createRequirementsTypeScriptRuleset('warn', 'flat/requirements-typescript');
344+
index.configs['flat/requirements-typescript-error'] = createRequirementsTypeScriptRuleset('error', 'flat/requirements-typescript-error');
345+
index.configs['flat/stylistic-typescript'] = createStylisticTypeScriptRuleset('warn', 'flat/stylistic-typescript');
346+
index.configs['flat/stylistic-typescript-error'] = createStylisticTypeScriptRuleset('error', 'flat/stylistic-typescript-error');
347+
282348
index.configs.examples = /** @type {import('eslint').Linter.FlatConfig[]} */ ([
283349
{
284350
name: 'jsdoc/examples/processor',

0 commit comments

Comments
 (0)