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 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:
@@ -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{4}'(?<oldRule>[^']*)': [^,]*,/gv,
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