Skip to content

Commit 290ab93

Browse files
feat: added granular flat TypeScript configs
1 parent 394b85f commit 290ab93

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
@@ -67,6 +67,38 @@ const config = [
6767
export default config;
6868
```
6969

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

src/index.js

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,65 @@ const createRecommendedTypeScriptFlavorRuleset = (warnOrError, flatName) => {
246246
};
247247
};
248248

249+
/**
250+
* @param {string[]} ruleNames
251+
*/
252+
const createStandaloneRulesetFactory = (ruleNames) => {
253+
/**
254+
* @param {"warn"|"error"} warnOrError
255+
* @param {string} [flatName]
256+
* @returns {import('eslint').Linter.FlatConfig}
257+
*/
258+
return (warnOrError, flatName) => {
259+
return {
260+
name: 'jsdoc/' + flatName,
261+
plugins: { jsdoc: index },
262+
rules: Object.fromEntries(ruleNames.map(ruleName => [ruleName, warnOrError])),
263+
};
264+
};
265+
}
266+
267+
const createLogicalTypescriptRuleset = createStandaloneRulesetFactory([
268+
'jsdoc/check-access',
269+
'jsdoc/check-param-names',
270+
'jsdoc/check-property-names',
271+
'jsdoc/check-tag-names',
272+
'jsdoc/check-template-names',
273+
'jsdoc/check-types',
274+
'jsdoc/check-values',
275+
'jsdoc/empty-tags',
276+
'jsdoc/implements-on-classes',
277+
'jsdoc/require-returns-check',
278+
'jsdoc/require-yields-check',
279+
'jsdoc/no-defaults',
280+
'jsdoc/no-multi-asterisks',
281+
'jsdoc/no-types',
282+
'jsdoc/no-undefined-types',
283+
'jsdoc/valid-types',
284+
]);
285+
286+
const createRequirementsTypeScriptRuleset = createStandaloneRulesetFactory([
287+
'jsdoc/require-example',
288+
'jsdoc/require-jsdoc',
289+
'jsdoc/require-param',
290+
'jsdoc/require-param-description',
291+
'jsdoc/require-param-name',
292+
'jsdoc/require-property',
293+
'jsdoc/require-property-description',
294+
'jsdoc/require-property-name',
295+
'jsdoc/require-returns',
296+
'jsdoc/require-returns-description',
297+
'jsdoc/require-yields',
298+
]);
299+
300+
const createStylisticTypeScriptRuleset = createStandaloneRulesetFactory([
301+
'jsdoc/check-alignment',
302+
'jsdoc/lines-before-block',
303+
'jsdoc/multiline-blocks',
304+
'jsdoc/no-multi-asterisks',
305+
'jsdoc/tag-lines',
306+
]);
307+
249308
/* c8 ignore next 3 -- TS */
250309
if (!index.configs) {
251310
throw new Error('TypeScript guard');
@@ -265,4 +324,11 @@ index.configs['flat/recommended-typescript-error'] = createRecommendedTypeScript
265324
index.configs['flat/recommended-typescript-flavor'] = createRecommendedTypeScriptFlavorRuleset('warn', 'flat/recommended-typescript-flavor');
266325
index.configs['flat/recommended-typescript-flavor-error'] = createRecommendedTypeScriptFlavorRuleset('error', 'flat/recommended-typescript-flavor-error');
267326

327+
index.configs['flat/logical-typescript'] = createLogicalTypescriptRuleset('warn', 'flat/logical-typescript');
328+
index.configs['flat/logical-typescript-error'] = createLogicalTypescriptRuleset('error', 'flat/logical-typescript-error');
329+
index.configs['flat/requirements-typescript'] = createRequirementsTypeScriptRuleset('warn', 'flat/requirements-typescript');
330+
index.configs['flat/requirements-typescript-error'] = createRequirementsTypeScriptRuleset('error', 'flat/requirements-typescript-error');
331+
index.configs['flat/stylistic-typescript'] = createStylisticTypeScriptRuleset('warn', 'flat/stylistic-typescript');
332+
index.configs['flat/stylistic-typescript-error'] = createStylisticTypeScriptRuleset('error', 'flat/stylistic-typescript-error');
333+
268334
export default index;

0 commit comments

Comments
 (0)