eslint-plugin-jsdoc 54.7.0 → 55.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +75 -9
- package/dist/generateRule.cjs +1 -1
- package/dist/generateRule.cjs.map +1 -1
- package/dist/index-cjs.cjs +409 -0
- package/dist/index-cjs.cjs.map +1 -0
- package/dist/index.cjs +44 -394
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +15 -10
- package/dist/index.d.ts.map +1 -1
- package/package.json +6 -8
- package/src/index-cjs.js +528 -0
- package/src/index.js +62 -517
package/README.md
CHANGED
|
@@ -12,7 +12,8 @@ JSDoc linting rules for ESLint.
|
|
|
12
12
|
* [eslint-plugin-jsdoc](#user-content-eslint-plugin-jsdoc)
|
|
13
13
|
* [Installation](#user-content-eslint-plugin-jsdoc-installation)
|
|
14
14
|
* [Configuration](#user-content-eslint-plugin-jsdoc-configuration)
|
|
15
|
-
* [Flat config](#user-content-eslint-plugin-jsdoc-configuration-flat-config)
|
|
15
|
+
* [Flat config (procedural)](#user-content-eslint-plugin-jsdoc-configuration-flat-config-procedural)
|
|
16
|
+
* [Flat config (declarative)](#user-content-eslint-plugin-jsdoc-configuration-flat-config-declarative)
|
|
16
17
|
* [`eslintrc`](#user-content-eslint-plugin-jsdoc-configuration-eslintrc)
|
|
17
18
|
* [Options](#user-content-eslint-plugin-jsdoc-options)
|
|
18
19
|
* [Settings](#user-content-eslint-plugin-jsdoc-settings)
|
|
@@ -43,9 +44,73 @@ npm install --save-dev eslint-plugin-jsdoc
|
|
|
43
44
|
<a name="eslint-plugin-jsdoc-configuration"></a>
|
|
44
45
|
## Configuration
|
|
45
46
|
|
|
46
|
-
<a name="user-content-eslint-plugin-jsdoc-configuration-flat-config"></a>
|
|
47
|
-
<a name="eslint-plugin-jsdoc-configuration-flat-config"></a>
|
|
48
|
-
### Flat config
|
|
47
|
+
<a name="user-content-eslint-plugin-jsdoc-configuration-flat-config-procedural"></a>
|
|
48
|
+
<a name="eslint-plugin-jsdoc-configuration-flat-config-procedural"></a>
|
|
49
|
+
### Flat config (procedural)
|
|
50
|
+
|
|
51
|
+
This is the currently recommended approach.
|
|
52
|
+
|
|
53
|
+
```js
|
|
54
|
+
import {jsdoc} from 'eslint-plugin-jsdoc';
|
|
55
|
+
|
|
56
|
+
export default [
|
|
57
|
+
...jsdoc({
|
|
58
|
+
config: 'flat/recommended',
|
|
59
|
+
})
|
|
60
|
+
];
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Or with settings supplied:
|
|
64
|
+
|
|
65
|
+
```js
|
|
66
|
+
import {jsdoc} from 'eslint-plugin-jsdoc';
|
|
67
|
+
|
|
68
|
+
export default [
|
|
69
|
+
...jsdoc({
|
|
70
|
+
config: 'flat/recommended',
|
|
71
|
+
// Uncomment this if you wish your `settings` to overwrite the config's own settings;
|
|
72
|
+
// otherwise, the default behavior is to merge recursively
|
|
73
|
+
// mergeSettings: false,
|
|
74
|
+
settings: {
|
|
75
|
+
// Do not add a `jsdoc` child object here as you would for regular ESLint `settings`
|
|
76
|
+
structuredTags: {
|
|
77
|
+
see: {
|
|
78
|
+
name: 'namepath-referencing',
|
|
79
|
+
required: [
|
|
80
|
+
'name',
|
|
81
|
+
],
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
/*
|
|
85
|
+
// Since the recommended config has been chosen, the above settings will
|
|
86
|
+
// be merged by default with the following (which are tags that are
|
|
87
|
+
// being allowed and requiring a type):
|
|
88
|
+
structuredTags: {
|
|
89
|
+
next: {
|
|
90
|
+
required: [
|
|
91
|
+
'type',
|
|
92
|
+
],
|
|
93
|
+
},
|
|
94
|
+
throws: {
|
|
95
|
+
required: [
|
|
96
|
+
'type',
|
|
97
|
+
],
|
|
98
|
+
},
|
|
99
|
+
yields: {
|
|
100
|
+
required: [
|
|
101
|
+
'type',
|
|
102
|
+
],
|
|
103
|
+
},
|
|
104
|
+
},
|
|
105
|
+
*/
|
|
106
|
+
}
|
|
107
|
+
})
|
|
108
|
+
];
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
<a name="user-content-eslint-plugin-jsdoc-configuration-flat-config-declarative"></a>
|
|
112
|
+
<a name="eslint-plugin-jsdoc-configuration-flat-config-declarative"></a>
|
|
113
|
+
### Flat config (declarative)
|
|
49
114
|
|
|
50
115
|
```js
|
|
51
116
|
import jsdoc from 'eslint-plugin-jsdoc';
|
|
@@ -56,6 +121,7 @@ const config = [
|
|
|
56
121
|
// other configuration objects...
|
|
57
122
|
{
|
|
58
123
|
files: ['**/*.js'],
|
|
124
|
+
// `plugins` here is not necessary if including the above config
|
|
59
125
|
plugins: {
|
|
60
126
|
jsdoc,
|
|
61
127
|
},
|
|
@@ -77,8 +143,8 @@ The general starting rulesets you can extend from in flat config are:
|
|
|
77
143
|
- `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
144
|
- `jsdoc.configs['flat/recommended-typescript-flavor-error']`: The same, reporting with failing errors instead of mere warnings
|
|
79
145
|
|
|
80
|
-
<a name="user-content-eslint-plugin-jsdoc-configuration-flat-config-granular-flat-configs"></a>
|
|
81
|
-
<a name="eslint-plugin-jsdoc-configuration-flat-config-granular-flat-configs"></a>
|
|
146
|
+
<a name="user-content-eslint-plugin-jsdoc-configuration-flat-config-declarative-granular-flat-configs"></a>
|
|
147
|
+
<a name="eslint-plugin-jsdoc-configuration-flat-config-declarative-granular-flat-configs"></a>
|
|
82
148
|
#### Granular Flat Configs
|
|
83
149
|
|
|
84
150
|
There also exist several more granular, standalone TypeScript rulesets you can extend from.
|
|
@@ -94,7 +160,7 @@ These each only enable mostly or only rules from the recommended starting rules:
|
|
|
94
160
|
- `jsdoc.configs['flat/logical-typescript-error']`: for TypeScript files, with reports set to error
|
|
95
161
|
- `jsdoc.configs['flat/logical-typescript-flavor']`: for files using JavaScript syntax and JSDoc types, with reports set to warn
|
|
96
162
|
- `jsdoc.configs['flat/logical-typescript-flavor-error']`: for files using JavaScript syntax and JSDoc types, with reports set to error
|
|
97
|
-
- **Requirements**: rules that enforce tags exist
|
|
163
|
+
- **Requirements**: rules that enforce tags exist or have or don't have types
|
|
98
164
|
- `jsdoc.configs['flat/requirements-typescript']`: for TypeScript files, with reports set to warn
|
|
99
165
|
- `jsdoc.configs['flat/requirements-typescript-error']`: for TypeScript files, with reports set to error
|
|
100
166
|
- `jsdoc.configs['flat/requirements-typescript-flavor']`: for files using JavaScript syntax and JSDoc types, with reports set to warn
|
|
@@ -117,8 +183,8 @@ export default [
|
|
|
117
183
|
];
|
|
118
184
|
```
|
|
119
185
|
|
|
120
|
-
<a name="user-content-eslint-plugin-jsdoc-configuration-flat-config-granular-flat-configs-why-certain-rules-were-excluded-from-the-granular-configs"></a>
|
|
121
|
-
<a name="eslint-plugin-jsdoc-configuration-flat-config-granular-flat-configs-why-certain-rules-were-excluded-from-the-granular-configs"></a>
|
|
186
|
+
<a name="user-content-eslint-plugin-jsdoc-configuration-flat-config-declarative-granular-flat-configs-why-certain-rules-were-excluded-from-the-granular-configs"></a>
|
|
187
|
+
<a name="eslint-plugin-jsdoc-configuration-flat-config-declarative-granular-flat-configs-why-certain-rules-were-excluded-from-the-granular-configs"></a>
|
|
122
188
|
##### Why certain rules were excluded from the granular configs
|
|
123
189
|
|
|
124
190
|
A few rules were left out of the granular configs. Here is why:
|
package/dist/generateRule.cjs
CHANGED
|
@@ -221,7 +221,7 @@ export default iterateJsdoc(({
|
|
|
221
221
|
await replaceInOrder({
|
|
222
222
|
checkName: 'index rules',
|
|
223
223
|
newLine: `${' '.repeat(4)}'${ruleName}': ${camelCasedRuleName},`,
|
|
224
|
-
oldRegex: /\n\s{
|
|
224
|
+
oldRegex: /\n\s{2}'(?<oldRule>[^']*)': [^,]*,/gv,
|
|
225
225
|
path: './src/index.js'
|
|
226
226
|
});
|
|
227
227
|
await Promise.resolve().then(() => _interopRequireWildcard(require('./generateDocs.js')));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateRule.cjs","names":["_camelcase","_interopRequireDefault","require","_fs","_promises","_openEditor","_path","e","__esModule","default","_interopRequireWildcard","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ruleName","options","process","argv","recommended","includes","console","error","test","ruleNamesPath","ruleNames","JSON","parse","fs","readFile","push","sort","writeFile","stringify","log","ruleTemplate","camelCasedRuleName","camelCase","rulePath","existsSync","ruleTestTemplate","ruleTestPath","ruleReadmeTemplate","ruleReadmePath","replaceInOrder","checkName","newLine","oldIsCamel","oldRegex","path","offsets","readme","replace","matchedLine","n1","offset","str","oldRule","oldRuleB","alreadyIncluded","itemIndex","findIndex","item","undefined","pop","length","slice","repeat","Promise","resolve","then","chdir","__dirname","open"],"sources":["../src/bin/generateRule.js"],"sourcesContent":["/* eslint-disable no-console -- CLI */\n\nimport camelCase from 'camelcase';\nimport {\n existsSync,\n} from 'fs';\nimport fs from 'fs/promises';\n/**\n * @example\n * ```shell\n * pnpm run create-rule my-new-rule -- --recommended\n * ```\n */\nimport open from 'open-editor';\nimport {\n resolve,\n} from 'path';\n\n// Todo: Would ideally have prompts, e.g., to ask for whether\n// type was problem/layout, etc.\n\nconst [\n , , ruleName,\n ...options\n] = process.argv;\n\nconst recommended = options.includes('--recommended');\n\n(async () => {\n if (!ruleName) {\n console.error('Please supply a rule name');\n\n return;\n }\n\n if ((/[A-Z]/v).test(ruleName)) {\n console.error('Please ensure the rule has no capital letters');\n\n return;\n }\n\n const ruleNamesPath = './test/rules/ruleNames.json';\n // @ts-expect-error Older types?\n const ruleNames = JSON.parse(await fs.readFile(\n ruleNamesPath,\n ));\n if (!ruleNames.includes(ruleName)) {\n ruleNames.push(ruleName);\n ruleNames.sort();\n }\n\n await fs.writeFile(ruleNamesPath, JSON.stringify(ruleNames, null, 2) + '\\n');\n console.log('ruleNames', ruleNames);\n\n const ruleTemplate = `import iterateJsdoc from '../iterateJsdoc.js';\n\nexport default iterateJsdoc(({\n context,\n utils,\n}) => {\n // Rule here\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: '',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/${ruleName}.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n // Option properties here (or remove the object)\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n`;\n\n const camelCasedRuleName = camelCase(ruleName);\n\n const rulePath = `./src/rules/${camelCasedRuleName}.js`;\n\n if (!existsSync(rulePath)) {\n await fs.writeFile(rulePath, ruleTemplate);\n }\n\n const ruleTestTemplate = `export default {\n invalid: [\n {\n code: \\`\n \\`,\n errors: [\n {\n line: 2,\n message: '',\n },\n ],\n },\n ],\n valid: [\n {\n code: \\`\n \\`,\n },\n ],\n};\n`;\n\n const ruleTestPath = `./test/rules/assertions/${camelCasedRuleName}.js`;\n if (!existsSync(ruleTestPath)) {\n await fs.writeFile(ruleTestPath, ruleTestTemplate);\n }\n\n const ruleReadmeTemplate = `# \\`${ruleName}\\`\n\n|||\n|---|---|\n|Context|everywhere|\n|Tags|\\`\\`|\n|Recommended|${recommended ? 'true' : 'false'}|\n|Settings||\n|Options||\n\n## Failing examples\n\n<!-- assertions-failing ${camelCasedRuleName} -->\n\n## Passing examples\n\n<!-- assertions-passing ${camelCasedRuleName} -->\n`;\n\n const ruleReadmePath = `./.README/rules/${ruleName}.md`;\n if (!existsSync(ruleReadmePath)) {\n await fs.writeFile(ruleReadmePath, ruleReadmeTemplate);\n }\n\n /**\n * @param {object} cfg\n * @param {string} cfg.path\n * @param {RegExp} cfg.oldRegex\n * @param {string} cfg.checkName\n * @param {string} cfg.newLine\n * @param {boolean} [cfg.oldIsCamel]\n * @returns {Promise<void>}\n */\n const replaceInOrder = async ({\n checkName,\n newLine,\n oldIsCamel,\n oldRegex,\n path,\n }) => {\n /**\n * @typedef {number} Integer\n */\n /**\n * @typedef {{\n * matchedLine: string,\n * offset: Integer,\n * oldRule: string,\n * }} OffsetInfo\n */\n /**\n * @type {OffsetInfo[]}\n */\n const offsets = [];\n\n let readme = await fs.readFile(path, 'utf8');\n readme.replace(\n oldRegex,\n /**\n * @param {string} matchedLine\n * @param {string} n1\n * @param {Integer} offset\n * @param {string} str\n * @param {object} groups\n * @param {string} groups.oldRule\n * @returns {string}\n */\n (matchedLine, n1, offset, str, {\n oldRule,\n }) => {\n offsets.push({\n matchedLine,\n offset,\n oldRule,\n });\n\n return matchedLine;\n },\n );\n\n offsets.sort(({\n oldRule,\n }, {\n oldRule: oldRuleB,\n }) => {\n return oldRule < oldRuleB ? -1 : (oldRule > oldRuleB ? 1 : 0);\n });\n\n let alreadyIncluded = false;\n const itemIndex = offsets.findIndex(({\n oldRule,\n }) => {\n alreadyIncluded ||= oldIsCamel ? camelCasedRuleName === oldRule : ruleName === oldRule;\n\n return oldIsCamel ? camelCasedRuleName < oldRule : ruleName < oldRule;\n });\n let item = itemIndex !== undefined && offsets[itemIndex];\n if (item && itemIndex === 0 &&\n\n // This property would not always be sufficient but in this case it is.\n oldIsCamel\n ) {\n item.offset = 0;\n }\n\n if (!item) {\n item = /** @type {OffsetInfo} */ (offsets.pop());\n item.offset += item.matchedLine.length;\n }\n\n if (alreadyIncluded) {\n console.log(`Rule name is already present in ${checkName}.`);\n } else {\n readme = readme.slice(0, item.offset) +\n (item.offset ? '\\n' : '') +\n newLine +\n (item.offset ? '' : '\\n') +\n readme.slice(item.offset);\n\n await fs.writeFile(path, readme);\n }\n };\n\n // await replaceInOrder({\n // checkName: 'README',\n // newLine: `{\"gitdown\": \"include\", \"file\": \"./rules/${ruleName}.md\"}`,\n // oldRegex: /\\n\\{\"gitdown\": \"include\", \"file\": \".\\/rules\\/(?<oldRule>[^.]*).md\"\\}/gv,\n // path: './.README/README.md',\n // });\n\n await replaceInOrder({\n checkName: 'index import',\n newLine: `import ${camelCasedRuleName} from './rules/${camelCasedRuleName}.js';`,\n oldIsCamel: true,\n oldRegex: /\\nimport (?<oldRule>[^ ]*) from '.\\/rules\\/\\1\\.js';/gv,\n path: './src/index.js',\n });\n\n await replaceInOrder({\n checkName: 'index recommended',\n newLine: `${' '.repeat(6)}'jsdoc/${ruleName}': ${recommended ? 'warnOrError' : '\\'off\\''},`,\n oldRegex: /\\n\\s{6}'jsdoc\\/(?<oldRule>[^']*)': .*?,/gv,\n path: './src/index.js',\n });\n\n await replaceInOrder({\n checkName: 'index rules',\n newLine: `${' '.repeat(4)}'${ruleName}': ${camelCasedRuleName},`,\n oldRegex: /\\n\\s{4}'(?<oldRule>[^']*)': [^,]*,/gv,\n path: './src/index.js',\n });\n\n await import('./generateDocs.js');\n\n /*\n console.log('Paths to open for further editing\\n');\n console.log(`open ${ruleReadmePath}`);\n console.log(`open ${rulePath}`);\n console.log(`open ${ruleTestPath}\\n`);\n */\n\n // Set chdir as somehow still in operation from other test\n process.chdir(resolve(import.meta.dirname, '../../'));\n await open([\n // Could even add editor line column numbers like `${rulePath}:1:1`\n ruleReadmePath,\n ruleTestPath,\n rulePath,\n ]);\n})();\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"generateRule.cjs","names":["_camelcase","_interopRequireDefault","require","_fs","_promises","_openEditor","_path","e","__esModule","default","_interopRequireWildcard","t","WeakMap","r","n","o","i","f","__proto__","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","ruleName","options","process","argv","recommended","includes","console","error","test","ruleNamesPath","ruleNames","JSON","parse","fs","readFile","push","sort","writeFile","stringify","log","ruleTemplate","camelCasedRuleName","camelCase","rulePath","existsSync","ruleTestTemplate","ruleTestPath","ruleReadmeTemplate","ruleReadmePath","replaceInOrder","checkName","newLine","oldIsCamel","oldRegex","path","offsets","readme","replace","matchedLine","n1","offset","str","oldRule","oldRuleB","alreadyIncluded","itemIndex","findIndex","item","undefined","pop","length","slice","repeat","Promise","resolve","then","chdir","__dirname","open"],"sources":["../src/bin/generateRule.js"],"sourcesContent":["/* eslint-disable no-console -- CLI */\n\nimport camelCase from 'camelcase';\nimport {\n existsSync,\n} from 'fs';\nimport fs from 'fs/promises';\n/**\n * @example\n * ```shell\n * pnpm run create-rule my-new-rule -- --recommended\n * ```\n */\nimport open from 'open-editor';\nimport {\n resolve,\n} from 'path';\n\n// Todo: Would ideally have prompts, e.g., to ask for whether\n// type was problem/layout, etc.\n\nconst [\n , , ruleName,\n ...options\n] = process.argv;\n\nconst recommended = options.includes('--recommended');\n\n(async () => {\n if (!ruleName) {\n console.error('Please supply a rule name');\n\n return;\n }\n\n if ((/[A-Z]/v).test(ruleName)) {\n console.error('Please ensure the rule has no capital letters');\n\n return;\n }\n\n const ruleNamesPath = './test/rules/ruleNames.json';\n // @ts-expect-error Older types?\n const ruleNames = JSON.parse(await fs.readFile(\n ruleNamesPath,\n ));\n if (!ruleNames.includes(ruleName)) {\n ruleNames.push(ruleName);\n ruleNames.sort();\n }\n\n await fs.writeFile(ruleNamesPath, JSON.stringify(ruleNames, null, 2) + '\\n');\n console.log('ruleNames', ruleNames);\n\n const ruleTemplate = `import iterateJsdoc from '../iterateJsdoc.js';\n\nexport default iterateJsdoc(({\n context,\n utils,\n}) => {\n // Rule here\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: '',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/${ruleName}.md#repos-sticky-header',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n // Option properties here (or remove the object)\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n`;\n\n const camelCasedRuleName = camelCase(ruleName);\n\n const rulePath = `./src/rules/${camelCasedRuleName}.js`;\n\n if (!existsSync(rulePath)) {\n await fs.writeFile(rulePath, ruleTemplate);\n }\n\n const ruleTestTemplate = `export default {\n invalid: [\n {\n code: \\`\n \\`,\n errors: [\n {\n line: 2,\n message: '',\n },\n ],\n },\n ],\n valid: [\n {\n code: \\`\n \\`,\n },\n ],\n};\n`;\n\n const ruleTestPath = `./test/rules/assertions/${camelCasedRuleName}.js`;\n if (!existsSync(ruleTestPath)) {\n await fs.writeFile(ruleTestPath, ruleTestTemplate);\n }\n\n const ruleReadmeTemplate = `# \\`${ruleName}\\`\n\n|||\n|---|---|\n|Context|everywhere|\n|Tags|\\`\\`|\n|Recommended|${recommended ? 'true' : 'false'}|\n|Settings||\n|Options||\n\n## Failing examples\n\n<!-- assertions-failing ${camelCasedRuleName} -->\n\n## Passing examples\n\n<!-- assertions-passing ${camelCasedRuleName} -->\n`;\n\n const ruleReadmePath = `./.README/rules/${ruleName}.md`;\n if (!existsSync(ruleReadmePath)) {\n await fs.writeFile(ruleReadmePath, ruleReadmeTemplate);\n }\n\n /**\n * @param {object} cfg\n * @param {string} cfg.path\n * @param {RegExp} cfg.oldRegex\n * @param {string} cfg.checkName\n * @param {string} cfg.newLine\n * @param {boolean} [cfg.oldIsCamel]\n * @returns {Promise<void>}\n */\n const replaceInOrder = async ({\n checkName,\n newLine,\n oldIsCamel,\n oldRegex,\n path,\n }) => {\n /**\n * @typedef {number} Integer\n */\n /**\n * @typedef {{\n * matchedLine: string,\n * offset: Integer,\n * oldRule: string,\n * }} OffsetInfo\n */\n /**\n * @type {OffsetInfo[]}\n */\n const offsets = [];\n\n let readme = await fs.readFile(path, 'utf8');\n readme.replace(\n oldRegex,\n /**\n * @param {string} matchedLine\n * @param {string} n1\n * @param {Integer} offset\n * @param {string} str\n * @param {object} groups\n * @param {string} groups.oldRule\n * @returns {string}\n */\n (matchedLine, n1, offset, str, {\n oldRule,\n }) => {\n offsets.push({\n matchedLine,\n offset,\n oldRule,\n });\n\n return matchedLine;\n },\n );\n\n offsets.sort(({\n oldRule,\n }, {\n oldRule: oldRuleB,\n }) => {\n return oldRule < oldRuleB ? -1 : (oldRule > oldRuleB ? 1 : 0);\n });\n\n let alreadyIncluded = false;\n const itemIndex = offsets.findIndex(({\n oldRule,\n }) => {\n alreadyIncluded ||= oldIsCamel ? camelCasedRuleName === oldRule : ruleName === oldRule;\n\n return oldIsCamel ? camelCasedRuleName < oldRule : ruleName < oldRule;\n });\n let item = itemIndex !== undefined && offsets[itemIndex];\n if (item && itemIndex === 0 &&\n\n // This property would not always be sufficient but in this case it is.\n oldIsCamel\n ) {\n item.offset = 0;\n }\n\n if (!item) {\n item = /** @type {OffsetInfo} */ (offsets.pop());\n item.offset += item.matchedLine.length;\n }\n\n if (alreadyIncluded) {\n console.log(`Rule name is already present in ${checkName}.`);\n } else {\n readme = readme.slice(0, item.offset) +\n (item.offset ? '\\n' : '') +\n newLine +\n (item.offset ? '' : '\\n') +\n readme.slice(item.offset);\n\n await fs.writeFile(path, readme);\n }\n };\n\n // await replaceInOrder({\n // checkName: 'README',\n // newLine: `{\"gitdown\": \"include\", \"file\": \"./rules/${ruleName}.md\"}`,\n // oldRegex: /\\n\\{\"gitdown\": \"include\", \"file\": \".\\/rules\\/(?<oldRule>[^.]*).md\"\\}/gv,\n // path: './.README/README.md',\n // });\n\n await replaceInOrder({\n checkName: 'index import',\n newLine: `import ${camelCasedRuleName} from './rules/${camelCasedRuleName}.js';`,\n oldIsCamel: true,\n oldRegex: /\\nimport (?<oldRule>[^ ]*) from '.\\/rules\\/\\1\\.js';/gv,\n path: './src/index.js',\n });\n\n await replaceInOrder({\n checkName: 'index recommended',\n newLine: `${' '.repeat(6)}'jsdoc/${ruleName}': ${recommended ? 'warnOrError' : '\\'off\\''},`,\n oldRegex: /\\n\\s{6}'jsdoc\\/(?<oldRule>[^']*)': .*?,/gv,\n path: './src/index.js',\n });\n\n await replaceInOrder({\n checkName: 'index rules',\n newLine: `${' '.repeat(4)}'${ruleName}': ${camelCasedRuleName},`,\n oldRegex: /\\n\\s{2}'(?<oldRule>[^']*)': [^,]*,/gv,\n path: './src/index.js',\n });\n\n await import('./generateDocs.js');\n\n /*\n console.log('Paths to open for further editing\\n');\n console.log(`open ${ruleReadmePath}`);\n console.log(`open ${rulePath}`);\n console.log(`open ${ruleTestPath}\\n`);\n */\n\n // Set chdir as somehow still in operation from other test\n process.chdir(resolve(import.meta.dirname, '../../'));\n await open([\n // Could even add editor line column numbers like `${rulePath}:1:1`\n ruleReadmePath,\n ruleTestPath,\n rulePath,\n ]);\n})();\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,409 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
var _getJsdocProcessorPlugin = require("./getJsdocProcessorPlugin.cjs");
|
|
8
|
+
var _checkAccess = _interopRequireDefault(require("./rules/checkAccess.cjs"));
|
|
9
|
+
var _checkAlignment = _interopRequireDefault(require("./rules/checkAlignment.cjs"));
|
|
10
|
+
var _checkExamples = _interopRequireDefault(require("./rules/checkExamples.cjs"));
|
|
11
|
+
var _checkIndentation = _interopRequireDefault(require("./rules/checkIndentation.cjs"));
|
|
12
|
+
var _checkLineAlignment = _interopRequireDefault(require("./rules/checkLineAlignment.cjs"));
|
|
13
|
+
var _checkParamNames = _interopRequireDefault(require("./rules/checkParamNames.cjs"));
|
|
14
|
+
var _checkPropertyNames = _interopRequireDefault(require("./rules/checkPropertyNames.cjs"));
|
|
15
|
+
var _checkSyntax = _interopRequireDefault(require("./rules/checkSyntax.cjs"));
|
|
16
|
+
var _checkTagNames = _interopRequireDefault(require("./rules/checkTagNames.cjs"));
|
|
17
|
+
var _checkTemplateNames = _interopRequireDefault(require("./rules/checkTemplateNames.cjs"));
|
|
18
|
+
var _checkTypes = _interopRequireDefault(require("./rules/checkTypes.cjs"));
|
|
19
|
+
var _checkValues = _interopRequireDefault(require("./rules/checkValues.cjs"));
|
|
20
|
+
var _convertToJsdocComments = _interopRequireDefault(require("./rules/convertToJsdocComments.cjs"));
|
|
21
|
+
var _emptyTags = _interopRequireDefault(require("./rules/emptyTags.cjs"));
|
|
22
|
+
var _implementsOnClasses = _interopRequireDefault(require("./rules/implementsOnClasses.cjs"));
|
|
23
|
+
var _importsAsDependencies = _interopRequireDefault(require("./rules/importsAsDependencies.cjs"));
|
|
24
|
+
var _informativeDocs = _interopRequireDefault(require("./rules/informativeDocs.cjs"));
|
|
25
|
+
var _linesBeforeBlock = _interopRequireDefault(require("./rules/linesBeforeBlock.cjs"));
|
|
26
|
+
var _matchDescription = _interopRequireDefault(require("./rules/matchDescription.cjs"));
|
|
27
|
+
var _matchName = _interopRequireDefault(require("./rules/matchName.cjs"));
|
|
28
|
+
var _multilineBlocks = _interopRequireDefault(require("./rules/multilineBlocks.cjs"));
|
|
29
|
+
var _noBadBlocks = _interopRequireDefault(require("./rules/noBadBlocks.cjs"));
|
|
30
|
+
var _noBlankBlockDescriptions = _interopRequireDefault(require("./rules/noBlankBlockDescriptions.cjs"));
|
|
31
|
+
var _noBlankBlocks = _interopRequireDefault(require("./rules/noBlankBlocks.cjs"));
|
|
32
|
+
var _noDefaults = _interopRequireDefault(require("./rules/noDefaults.cjs"));
|
|
33
|
+
var _noMissingSyntax = _interopRequireDefault(require("./rules/noMissingSyntax.cjs"));
|
|
34
|
+
var _noMultiAsterisks = _interopRequireDefault(require("./rules/noMultiAsterisks.cjs"));
|
|
35
|
+
var _noRestrictedSyntax = _interopRequireDefault(require("./rules/noRestrictedSyntax.cjs"));
|
|
36
|
+
var _noTypes = _interopRequireDefault(require("./rules/noTypes.cjs"));
|
|
37
|
+
var _noUndefinedTypes = _interopRequireDefault(require("./rules/noUndefinedTypes.cjs"));
|
|
38
|
+
var _requireAsteriskPrefix = _interopRequireDefault(require("./rules/requireAsteriskPrefix.cjs"));
|
|
39
|
+
var _requireDescription = _interopRequireDefault(require("./rules/requireDescription.cjs"));
|
|
40
|
+
var _requireDescriptionCompleteSentence = _interopRequireDefault(require("./rules/requireDescriptionCompleteSentence.cjs"));
|
|
41
|
+
var _requireExample = _interopRequireDefault(require("./rules/requireExample.cjs"));
|
|
42
|
+
var _requireFileOverview = _interopRequireDefault(require("./rules/requireFileOverview.cjs"));
|
|
43
|
+
var _requireHyphenBeforeParamDescription = _interopRequireDefault(require("./rules/requireHyphenBeforeParamDescription.cjs"));
|
|
44
|
+
var _requireJsdoc = _interopRequireDefault(require("./rules/requireJsdoc.cjs"));
|
|
45
|
+
var _requireParam = _interopRequireDefault(require("./rules/requireParam.cjs"));
|
|
46
|
+
var _requireParamDescription = _interopRequireDefault(require("./rules/requireParamDescription.cjs"));
|
|
47
|
+
var _requireParamName = _interopRequireDefault(require("./rules/requireParamName.cjs"));
|
|
48
|
+
var _requireParamType = _interopRequireDefault(require("./rules/requireParamType.cjs"));
|
|
49
|
+
var _requireProperty = _interopRequireDefault(require("./rules/requireProperty.cjs"));
|
|
50
|
+
var _requirePropertyDescription = _interopRequireDefault(require("./rules/requirePropertyDescription.cjs"));
|
|
51
|
+
var _requirePropertyName = _interopRequireDefault(require("./rules/requirePropertyName.cjs"));
|
|
52
|
+
var _requirePropertyType = _interopRequireDefault(require("./rules/requirePropertyType.cjs"));
|
|
53
|
+
var _requireReturns = _interopRequireDefault(require("./rules/requireReturns.cjs"));
|
|
54
|
+
var _requireReturnsCheck = _interopRequireDefault(require("./rules/requireReturnsCheck.cjs"));
|
|
55
|
+
var _requireReturnsDescription = _interopRequireDefault(require("./rules/requireReturnsDescription.cjs"));
|
|
56
|
+
var _requireReturnsType = _interopRequireDefault(require("./rules/requireReturnsType.cjs"));
|
|
57
|
+
var _requireTemplate = _interopRequireDefault(require("./rules/requireTemplate.cjs"));
|
|
58
|
+
var _requireThrows = _interopRequireDefault(require("./rules/requireThrows.cjs"));
|
|
59
|
+
var _requireYields = _interopRequireDefault(require("./rules/requireYields.cjs"));
|
|
60
|
+
var _requireYieldsCheck = _interopRequireDefault(require("./rules/requireYieldsCheck.cjs"));
|
|
61
|
+
var _sortTags = _interopRequireDefault(require("./rules/sortTags.cjs"));
|
|
62
|
+
var _tagLines = _interopRequireDefault(require("./rules/tagLines.cjs"));
|
|
63
|
+
var _textEscaping = _interopRequireDefault(require("./rules/textEscaping.cjs"));
|
|
64
|
+
var _validTypes = _interopRequireDefault(require("./rules/validTypes.cjs"));
|
|
65
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
66
|
+
/* eslint-disable jsdoc/valid-types -- Bug */
|
|
67
|
+
/**
|
|
68
|
+
* @typedef {"recommended" | "stylistic" | "contents" | "logical" | "requirements"} ConfigGroups
|
|
69
|
+
* @typedef {"" | "-typescript" | "-typescript-flavor"} ConfigVariants
|
|
70
|
+
* @typedef {"" | "-error"} ErrorLevelVariants
|
|
71
|
+
* @type {import('eslint').ESLint.Plugin & {
|
|
72
|
+
* configs: Record<`flat/${ConfigGroups}${ConfigVariants}${ErrorLevelVariants}`,
|
|
73
|
+
* import('eslint').Linter.Config>
|
|
74
|
+
* }}
|
|
75
|
+
*/
|
|
76
|
+
const index = {};
|
|
77
|
+
/* eslint-enable jsdoc/valid-types -- Bug */
|
|
78
|
+
index.configs = {};
|
|
79
|
+
index.rules = {
|
|
80
|
+
'check-access': _checkAccess.default,
|
|
81
|
+
'check-alignment': _checkAlignment.default,
|
|
82
|
+
'check-examples': _checkExamples.default,
|
|
83
|
+
'check-indentation': _checkIndentation.default,
|
|
84
|
+
'check-line-alignment': _checkLineAlignment.default,
|
|
85
|
+
'check-param-names': _checkParamNames.default,
|
|
86
|
+
'check-property-names': _checkPropertyNames.default,
|
|
87
|
+
'check-syntax': _checkSyntax.default,
|
|
88
|
+
'check-tag-names': _checkTagNames.default,
|
|
89
|
+
'check-template-names': _checkTemplateNames.default,
|
|
90
|
+
'check-types': _checkTypes.default,
|
|
91
|
+
'check-values': _checkValues.default,
|
|
92
|
+
'convert-to-jsdoc-comments': _convertToJsdocComments.default,
|
|
93
|
+
'empty-tags': _emptyTags.default,
|
|
94
|
+
'implements-on-classes': _implementsOnClasses.default,
|
|
95
|
+
'imports-as-dependencies': _importsAsDependencies.default,
|
|
96
|
+
'informative-docs': _informativeDocs.default,
|
|
97
|
+
'lines-before-block': _linesBeforeBlock.default,
|
|
98
|
+
'match-description': _matchDescription.default,
|
|
99
|
+
'match-name': _matchName.default,
|
|
100
|
+
'multiline-blocks': _multilineBlocks.default,
|
|
101
|
+
'no-bad-blocks': _noBadBlocks.default,
|
|
102
|
+
'no-blank-block-descriptions': _noBlankBlockDescriptions.default,
|
|
103
|
+
'no-blank-blocks': _noBlankBlocks.default,
|
|
104
|
+
'no-defaults': _noDefaults.default,
|
|
105
|
+
'no-missing-syntax': _noMissingSyntax.default,
|
|
106
|
+
'no-multi-asterisks': _noMultiAsterisks.default,
|
|
107
|
+
'no-restricted-syntax': _noRestrictedSyntax.default,
|
|
108
|
+
'no-types': _noTypes.default,
|
|
109
|
+
'no-undefined-types': _noUndefinedTypes.default,
|
|
110
|
+
'require-asterisk-prefix': _requireAsteriskPrefix.default,
|
|
111
|
+
'require-description': _requireDescription.default,
|
|
112
|
+
'require-description-complete-sentence': _requireDescriptionCompleteSentence.default,
|
|
113
|
+
'require-example': _requireExample.default,
|
|
114
|
+
'require-file-overview': _requireFileOverview.default,
|
|
115
|
+
'require-hyphen-before-param-description': _requireHyphenBeforeParamDescription.default,
|
|
116
|
+
'require-jsdoc': _requireJsdoc.default,
|
|
117
|
+
'require-param': _requireParam.default,
|
|
118
|
+
'require-param-description': _requireParamDescription.default,
|
|
119
|
+
'require-param-name': _requireParamName.default,
|
|
120
|
+
'require-param-type': _requireParamType.default,
|
|
121
|
+
'require-property': _requireProperty.default,
|
|
122
|
+
'require-property-description': _requirePropertyDescription.default,
|
|
123
|
+
'require-property-name': _requirePropertyName.default,
|
|
124
|
+
'require-property-type': _requirePropertyType.default,
|
|
125
|
+
'require-returns': _requireReturns.default,
|
|
126
|
+
'require-returns-check': _requireReturnsCheck.default,
|
|
127
|
+
'require-returns-description': _requireReturnsDescription.default,
|
|
128
|
+
'require-returns-type': _requireReturnsType.default,
|
|
129
|
+
'require-template': _requireTemplate.default,
|
|
130
|
+
'require-throws': _requireThrows.default,
|
|
131
|
+
'require-yields': _requireYields.default,
|
|
132
|
+
'require-yields-check': _requireYieldsCheck.default,
|
|
133
|
+
'sort-tags': _sortTags.default,
|
|
134
|
+
'tag-lines': _tagLines.default,
|
|
135
|
+
'text-escaping': _textEscaping.default,
|
|
136
|
+
'valid-types': _validTypes.default
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* @param {"warn"|"error"} warnOrError
|
|
141
|
+
* @param {string} [flatName]
|
|
142
|
+
* @returns {import('eslint').Linter.Config}
|
|
143
|
+
*/
|
|
144
|
+
const createRecommendedRuleset = (warnOrError, flatName) => {
|
|
145
|
+
return {
|
|
146
|
+
...(flatName ? {
|
|
147
|
+
name: 'jsdoc/' + flatName
|
|
148
|
+
} : {}),
|
|
149
|
+
// @ts-expect-error Ok
|
|
150
|
+
plugins: flatName ? {
|
|
151
|
+
jsdoc: index
|
|
152
|
+
} : ['jsdoc'],
|
|
153
|
+
rules: {
|
|
154
|
+
'jsdoc/check-access': warnOrError,
|
|
155
|
+
'jsdoc/check-alignment': warnOrError,
|
|
156
|
+
'jsdoc/check-examples': 'off',
|
|
157
|
+
'jsdoc/check-indentation': 'off',
|
|
158
|
+
'jsdoc/check-line-alignment': 'off',
|
|
159
|
+
'jsdoc/check-param-names': warnOrError,
|
|
160
|
+
'jsdoc/check-property-names': warnOrError,
|
|
161
|
+
'jsdoc/check-syntax': 'off',
|
|
162
|
+
'jsdoc/check-tag-names': warnOrError,
|
|
163
|
+
'jsdoc/check-template-names': 'off',
|
|
164
|
+
'jsdoc/check-types': warnOrError,
|
|
165
|
+
'jsdoc/check-values': warnOrError,
|
|
166
|
+
'jsdoc/convert-to-jsdoc-comments': 'off',
|
|
167
|
+
'jsdoc/empty-tags': warnOrError,
|
|
168
|
+
'jsdoc/implements-on-classes': warnOrError,
|
|
169
|
+
'jsdoc/imports-as-dependencies': 'off',
|
|
170
|
+
'jsdoc/informative-docs': 'off',
|
|
171
|
+
'jsdoc/lines-before-block': 'off',
|
|
172
|
+
'jsdoc/match-description': 'off',
|
|
173
|
+
'jsdoc/match-name': 'off',
|
|
174
|
+
'jsdoc/multiline-blocks': warnOrError,
|
|
175
|
+
'jsdoc/no-bad-blocks': 'off',
|
|
176
|
+
'jsdoc/no-blank-block-descriptions': 'off',
|
|
177
|
+
'jsdoc/no-blank-blocks': 'off',
|
|
178
|
+
'jsdoc/no-defaults': warnOrError,
|
|
179
|
+
'jsdoc/no-missing-syntax': 'off',
|
|
180
|
+
'jsdoc/no-multi-asterisks': warnOrError,
|
|
181
|
+
'jsdoc/no-restricted-syntax': 'off',
|
|
182
|
+
'jsdoc/no-types': 'off',
|
|
183
|
+
'jsdoc/no-undefined-types': warnOrError,
|
|
184
|
+
'jsdoc/require-asterisk-prefix': 'off',
|
|
185
|
+
'jsdoc/require-description': 'off',
|
|
186
|
+
'jsdoc/require-description-complete-sentence': 'off',
|
|
187
|
+
'jsdoc/require-example': 'off',
|
|
188
|
+
'jsdoc/require-file-overview': 'off',
|
|
189
|
+
'jsdoc/require-hyphen-before-param-description': 'off',
|
|
190
|
+
'jsdoc/require-jsdoc': warnOrError,
|
|
191
|
+
'jsdoc/require-param': warnOrError,
|
|
192
|
+
'jsdoc/require-param-description': warnOrError,
|
|
193
|
+
'jsdoc/require-param-name': warnOrError,
|
|
194
|
+
'jsdoc/require-param-type': warnOrError,
|
|
195
|
+
'jsdoc/require-property': warnOrError,
|
|
196
|
+
'jsdoc/require-property-description': warnOrError,
|
|
197
|
+
'jsdoc/require-property-name': warnOrError,
|
|
198
|
+
'jsdoc/require-property-type': warnOrError,
|
|
199
|
+
'jsdoc/require-returns': warnOrError,
|
|
200
|
+
'jsdoc/require-returns-check': warnOrError,
|
|
201
|
+
'jsdoc/require-returns-description': warnOrError,
|
|
202
|
+
'jsdoc/require-returns-type': warnOrError,
|
|
203
|
+
'jsdoc/require-template': 'off',
|
|
204
|
+
'jsdoc/require-throws': 'off',
|
|
205
|
+
'jsdoc/require-yields': warnOrError,
|
|
206
|
+
'jsdoc/require-yields-check': warnOrError,
|
|
207
|
+
'jsdoc/sort-tags': 'off',
|
|
208
|
+
'jsdoc/tag-lines': warnOrError,
|
|
209
|
+
'jsdoc/text-escaping': 'off',
|
|
210
|
+
'jsdoc/valid-types': warnOrError
|
|
211
|
+
}
|
|
212
|
+
};
|
|
213
|
+
};
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* @param {"warn"|"error"} warnOrError
|
|
217
|
+
* @param {string} [flatName]
|
|
218
|
+
* @returns {import('eslint').Linter.Config}
|
|
219
|
+
*/
|
|
220
|
+
const createRecommendedTypeScriptRuleset = (warnOrError, flatName) => {
|
|
221
|
+
const ruleset = createRecommendedRuleset(warnOrError, flatName);
|
|
222
|
+
return {
|
|
223
|
+
...ruleset,
|
|
224
|
+
rules: {
|
|
225
|
+
...ruleset.rules,
|
|
226
|
+
/* eslint-disable @stylistic/indent -- Extra indent to avoid use by auto-rule-editing */
|
|
227
|
+
'jsdoc/check-tag-names': [warnOrError, {
|
|
228
|
+
typed: true
|
|
229
|
+
}],
|
|
230
|
+
'jsdoc/no-types': warnOrError,
|
|
231
|
+
'jsdoc/no-undefined-types': 'off',
|
|
232
|
+
'jsdoc/require-param-type': 'off',
|
|
233
|
+
'jsdoc/require-property-type': 'off',
|
|
234
|
+
'jsdoc/require-returns-type': 'off'
|
|
235
|
+
/* eslint-enable @stylistic/indent */
|
|
236
|
+
}
|
|
237
|
+
};
|
|
238
|
+
};
|
|
239
|
+
|
|
240
|
+
/**
|
|
241
|
+
* @param {"warn"|"error"} warnOrError
|
|
242
|
+
* @param {string} [flatName]
|
|
243
|
+
* @returns {import('eslint').Linter.Config}
|
|
244
|
+
*/
|
|
245
|
+
const createRecommendedTypeScriptFlavorRuleset = (warnOrError, flatName) => {
|
|
246
|
+
const ruleset = createRecommendedRuleset(warnOrError, flatName);
|
|
247
|
+
return {
|
|
248
|
+
...ruleset,
|
|
249
|
+
rules: {
|
|
250
|
+
...ruleset.rules,
|
|
251
|
+
/* eslint-disable @stylistic/indent -- Extra indent to avoid use by auto-rule-editing */
|
|
252
|
+
'jsdoc/no-undefined-types': 'off'
|
|
253
|
+
/* eslint-enable @stylistic/indent */
|
|
254
|
+
}
|
|
255
|
+
};
|
|
256
|
+
};
|
|
257
|
+
|
|
258
|
+
/**
|
|
259
|
+
* @param {(string | unknown[])[]} ruleNames
|
|
260
|
+
*/
|
|
261
|
+
const createStandaloneRulesetFactory = ruleNames => {
|
|
262
|
+
/**
|
|
263
|
+
* @param {"warn"|"error"} warnOrError
|
|
264
|
+
* @param {string} [flatName]
|
|
265
|
+
* @returns {import('eslint').Linter.Config}
|
|
266
|
+
*/
|
|
267
|
+
return (warnOrError, flatName) => {
|
|
268
|
+
return {
|
|
269
|
+
name: 'jsdoc/' + flatName,
|
|
270
|
+
plugins: {
|
|
271
|
+
jsdoc: index
|
|
272
|
+
},
|
|
273
|
+
rules: Object.fromEntries(ruleNames.map(ruleName => {
|
|
274
|
+
return typeof ruleName === 'string' ? [ruleName, warnOrError] : [ruleName[0], [warnOrError, ...ruleName.slice(1)]];
|
|
275
|
+
}))
|
|
276
|
+
};
|
|
277
|
+
};
|
|
278
|
+
};
|
|
279
|
+
const contentsRules = ['jsdoc/informative-docs', 'jsdoc/match-description', 'jsdoc/no-blank-block-descriptions', 'jsdoc/no-blank-blocks', ['jsdoc/text-escaping', {
|
|
280
|
+
escapeHTML: true
|
|
281
|
+
}]];
|
|
282
|
+
const createContentsTypescriptRuleset = createStandaloneRulesetFactory(contentsRules);
|
|
283
|
+
const createContentsTypescriptFlavorRuleset = createStandaloneRulesetFactory(contentsRules);
|
|
284
|
+
const logicalRules = ['jsdoc/check-access', 'jsdoc/check-param-names', 'jsdoc/check-property-names', 'jsdoc/check-syntax', 'jsdoc/check-tag-names', 'jsdoc/check-template-names', 'jsdoc/check-types', 'jsdoc/check-values', 'jsdoc/empty-tags', 'jsdoc/implements-on-classes', 'jsdoc/require-returns-check', 'jsdoc/require-yields-check', 'jsdoc/no-bad-blocks', 'jsdoc/no-defaults', 'jsdoc/no-types', 'jsdoc/no-undefined-types', 'jsdoc/valid-types'];
|
|
285
|
+
const createLogicalTypescriptRuleset = createStandaloneRulesetFactory(logicalRules);
|
|
286
|
+
const createLogicalTypescriptFlavorRuleset = createStandaloneRulesetFactory(logicalRules);
|
|
287
|
+
const requirementsRules = ['jsdoc/require-example', 'jsdoc/require-jsdoc', 'jsdoc/require-param', 'jsdoc/require-param-description', 'jsdoc/require-param-name', 'jsdoc/require-property', 'jsdoc/require-property-description', 'jsdoc/require-property-name', 'jsdoc/require-returns', 'jsdoc/require-returns-description', 'jsdoc/require-yields'];
|
|
288
|
+
const createRequirementsTypeScriptRuleset = createStandaloneRulesetFactory(requirementsRules);
|
|
289
|
+
const createRequirementsTypeScriptFlavorRuleset = createStandaloneRulesetFactory([...requirementsRules, 'jsdoc/require-param-type', 'jsdoc/require-property-type', 'jsdoc/require-returns-type', 'jsdoc/require-template']);
|
|
290
|
+
const stylisticRules = ['jsdoc/check-alignment', 'jsdoc/check-line-alignment', 'jsdoc/lines-before-block', 'jsdoc/multiline-blocks', 'jsdoc/no-multi-asterisks', 'jsdoc/require-asterisk-prefix', ['jsdoc/require-hyphen-before-param-description', 'never'], 'jsdoc/tag-lines'];
|
|
291
|
+
const createStylisticTypeScriptRuleset = createStandaloneRulesetFactory(stylisticRules);
|
|
292
|
+
const createStylisticTypeScriptFlavorRuleset = createStandaloneRulesetFactory(stylisticRules);
|
|
293
|
+
|
|
294
|
+
/* c8 ignore next 3 -- TS */
|
|
295
|
+
if (!index.configs) {
|
|
296
|
+
throw new Error('TypeScript guard');
|
|
297
|
+
}
|
|
298
|
+
index.configs.recommended = createRecommendedRuleset('warn');
|
|
299
|
+
index.configs['recommended-error'] = createRecommendedRuleset('error');
|
|
300
|
+
index.configs['recommended-typescript'] = createRecommendedTypeScriptRuleset('warn');
|
|
301
|
+
index.configs['recommended-typescript-error'] = createRecommendedTypeScriptRuleset('error');
|
|
302
|
+
index.configs['recommended-typescript-flavor'] = createRecommendedTypeScriptFlavorRuleset('warn');
|
|
303
|
+
index.configs['recommended-typescript-flavor-error'] = createRecommendedTypeScriptFlavorRuleset('error');
|
|
304
|
+
index.configs['flat/recommended'] = createRecommendedRuleset('warn', 'flat/recommended');
|
|
305
|
+
index.configs['flat/recommended-error'] = createRecommendedRuleset('error', 'flat/recommended-error');
|
|
306
|
+
index.configs['flat/recommended-typescript'] = createRecommendedTypeScriptRuleset('warn', 'flat/recommended-typescript');
|
|
307
|
+
index.configs['flat/recommended-typescript-error'] = createRecommendedTypeScriptRuleset('error', 'flat/recommended-typescript-error');
|
|
308
|
+
index.configs['flat/recommended-typescript-flavor'] = createRecommendedTypeScriptFlavorRuleset('warn', 'flat/recommended-typescript-flavor');
|
|
309
|
+
index.configs['flat/recommended-typescript-flavor-error'] = createRecommendedTypeScriptFlavorRuleset('error', 'flat/recommended-typescript-flavor-error');
|
|
310
|
+
index.configs['flat/contents-typescript'] = createContentsTypescriptRuleset('warn', 'flat/contents-typescript');
|
|
311
|
+
index.configs['flat/contents-typescript-error'] = createContentsTypescriptRuleset('error', 'flat/contents-typescript-error');
|
|
312
|
+
index.configs['flat/contents-typescript-flavor'] = createContentsTypescriptFlavorRuleset('warn', 'flat/contents-typescript-flavor');
|
|
313
|
+
index.configs['flat/contents-typescript-flavor-error'] = createContentsTypescriptFlavorRuleset('error', 'flat/contents-typescript-error-flavor');
|
|
314
|
+
index.configs['flat/logical-typescript'] = createLogicalTypescriptRuleset('warn', 'flat/logical-typescript');
|
|
315
|
+
index.configs['flat/logical-typescript-error'] = createLogicalTypescriptRuleset('error', 'flat/logical-typescript-error');
|
|
316
|
+
index.configs['flat/logical-typescript-flavor'] = createLogicalTypescriptFlavorRuleset('warn', 'flat/logical-typescript-flavor');
|
|
317
|
+
index.configs['flat/logical-typescript-flavor-error'] = createLogicalTypescriptFlavorRuleset('error', 'flat/logical-typescript-error-flavor');
|
|
318
|
+
index.configs['flat/requirements-typescript'] = createRequirementsTypeScriptRuleset('warn', 'flat/requirements-typescript');
|
|
319
|
+
index.configs['flat/requirements-typescript-error'] = createRequirementsTypeScriptRuleset('error', 'flat/requirements-typescript-error');
|
|
320
|
+
index.configs['flat/requirements-typescript-flavor'] = createRequirementsTypeScriptFlavorRuleset('warn', 'flat/requirements-typescript-flavor');
|
|
321
|
+
index.configs['flat/requirements-typescript-flavor-error'] = createRequirementsTypeScriptFlavorRuleset('error', 'flat/requirements-typescript-error-flavor');
|
|
322
|
+
index.configs['flat/stylistic-typescript'] = createStylisticTypeScriptRuleset('warn', 'flat/stylistic-typescript');
|
|
323
|
+
index.configs['flat/stylistic-typescript-error'] = createStylisticTypeScriptRuleset('error', 'flat/stylistic-typescript-error');
|
|
324
|
+
index.configs['flat/stylistic-typescript-flavor'] = createStylisticTypeScriptFlavorRuleset('warn', 'flat/stylistic-typescript-flavor');
|
|
325
|
+
index.configs['flat/stylistic-typescript-flavor-error'] = createStylisticTypeScriptFlavorRuleset('error', 'flat/stylistic-typescript-error-flavor');
|
|
326
|
+
index.configs.examples = /** @type {import('eslint').Linter.Config[]} */[{
|
|
327
|
+
files: ['**/*.js'],
|
|
328
|
+
name: 'jsdoc/examples/processor',
|
|
329
|
+
plugins: {
|
|
330
|
+
examples: (0, _getJsdocProcessorPlugin.getJsdocProcessorPlugin)()
|
|
331
|
+
},
|
|
332
|
+
processor: 'examples/examples'
|
|
333
|
+
}, {
|
|
334
|
+
files: ['**/*.md/*.js'],
|
|
335
|
+
name: 'jsdoc/examples/rules',
|
|
336
|
+
rules: {
|
|
337
|
+
// "always" newline rule at end unlikely in sample code
|
|
338
|
+
'eol-last': 0,
|
|
339
|
+
// Wouldn't generally expect example paths to resolve relative to JS file
|
|
340
|
+
'import/no-unresolved': 0,
|
|
341
|
+
// Snippets likely too short to always include import/export info
|
|
342
|
+
'import/unambiguous': 0,
|
|
343
|
+
'jsdoc/require-file-overview': 0,
|
|
344
|
+
// The end of a multiline comment would end the comment the example is in.
|
|
345
|
+
'jsdoc/require-jsdoc': 0,
|
|
346
|
+
// Unlikely to have inadvertent debugging within examples
|
|
347
|
+
'no-console': 0,
|
|
348
|
+
// Often wish to start `@example` code after newline; also may use
|
|
349
|
+
// empty lines for spacing
|
|
350
|
+
'no-multiple-empty-lines': 0,
|
|
351
|
+
// Many variables in examples will be `undefined`
|
|
352
|
+
'no-undef': 0,
|
|
353
|
+
// Common to define variables for clarity without always using them
|
|
354
|
+
'no-unused-vars': 0,
|
|
355
|
+
// See import/no-unresolved
|
|
356
|
+
'node/no-missing-import': 0,
|
|
357
|
+
'node/no-missing-require': 0,
|
|
358
|
+
// Can generally look nicer to pad a little even if code imposes more stringency
|
|
359
|
+
'padded-blocks': 0
|
|
360
|
+
}
|
|
361
|
+
}];
|
|
362
|
+
index.configs['default-expressions'] = /** @type {import('eslint').Linter.Config[]} */[{
|
|
363
|
+
files: ['**/*.js'],
|
|
364
|
+
name: 'jsdoc/default-expressions/processor',
|
|
365
|
+
plugins: {
|
|
366
|
+
examples: (0, _getJsdocProcessorPlugin.getJsdocProcessorPlugin)({
|
|
367
|
+
checkDefaults: true,
|
|
368
|
+
checkParams: true,
|
|
369
|
+
checkProperties: true
|
|
370
|
+
})
|
|
371
|
+
},
|
|
372
|
+
processor: 'examples/examples'
|
|
373
|
+
}, {
|
|
374
|
+
files: ['**/*.jsdoc-defaults', '**/*.jsdoc-params', '**/*.jsdoc-properties'],
|
|
375
|
+
name: 'jsdoc/default-expressions/rules',
|
|
376
|
+
rules: {
|
|
377
|
+
...index.configs.examples[1].rules,
|
|
378
|
+
'chai-friendly/no-unused-expressions': 0,
|
|
379
|
+
'no-empty-function': 0,
|
|
380
|
+
'no-new': 0,
|
|
381
|
+
'no-unused-expressions': 0,
|
|
382
|
+
quotes: ['error', 'double'],
|
|
383
|
+
semi: ['error', 'never'],
|
|
384
|
+
strict: 0
|
|
385
|
+
}
|
|
386
|
+
}];
|
|
387
|
+
index.configs['examples-and-default-expressions'] = /** @type {import('eslint').Linter.Config[]} */[{
|
|
388
|
+
name: 'jsdoc/examples-and-default-expressions',
|
|
389
|
+
plugins: {
|
|
390
|
+
examples: (0, _getJsdocProcessorPlugin.getJsdocProcessorPlugin)({
|
|
391
|
+
checkDefaults: true,
|
|
392
|
+
checkParams: true,
|
|
393
|
+
checkProperties: true
|
|
394
|
+
})
|
|
395
|
+
}
|
|
396
|
+
}, ...index.configs.examples.map(config => {
|
|
397
|
+
return {
|
|
398
|
+
...config,
|
|
399
|
+
plugins: {}
|
|
400
|
+
};
|
|
401
|
+
}), ...index.configs['default-expressions'].map(config => {
|
|
402
|
+
return {
|
|
403
|
+
...config,
|
|
404
|
+
plugins: {}
|
|
405
|
+
};
|
|
406
|
+
})];
|
|
407
|
+
var _default = exports.default = index;
|
|
408
|
+
module.exports = exports.default;
|
|
409
|
+
//# sourceMappingURL=index-cjs.cjs.map
|