eslint-plugin-jsdoc 44.0.0 → 44.0.2

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.
@@ -11,17 +11,25 @@ const WarnSettings = function () {
11
11
  /**
12
12
  * Warn only once for each context and setting
13
13
  *
14
- * @param {object} context
14
+ * @param {import('eslint').Rule.RuleContext} context
15
15
  * @param {string} setting
16
+ * @returns {boolean}
16
17
  */
17
18
  hasBeenWarned(context, setting) {
18
- return warnedSettings.has(context) && warnedSettings.get(context).has(setting);
19
+ return warnedSettings.has(context) && /** @type {Set<string>} */warnedSettings.get(context).has(setting);
19
20
  },
21
+ /**
22
+ * @param {import('eslint').Rule.RuleContext} context
23
+ * @param {string} setting
24
+ * @returns {void}
25
+ */
20
26
  markSettingAsWarned(context, setting) {
21
27
  // istanbul ignore else
22
28
  if (!warnedSettings.has(context)) {
23
29
  warnedSettings.set(context, new Set());
24
30
  }
31
+
32
+ /** @type {Set<string>} */
25
33
  warnedSettings.get(context).add(setting);
26
34
  }
27
35
  };
@@ -1 +1 @@
1
- {"version":3,"file":"WarnSettings.js","names":["WarnSettings","warnedSettings","WeakMap","hasBeenWarned","context","setting","has","get","markSettingAsWarned","set","Set","add","_default","exports","default","module"],"sources":["../src/WarnSettings.js"],"sourcesContent":["const WarnSettings = function () {\n /** @type {WeakMap<object, Set<string>>} */\n const warnedSettings = new WeakMap();\n\n return {\n /**\n * Warn only once for each context and setting\n *\n * @param {object} context\n * @param {string} setting\n */\n hasBeenWarned (context, setting) {\n return warnedSettings.has(context) && warnedSettings.get(context).has(setting);\n },\n\n markSettingAsWarned (context, setting) {\n // istanbul ignore else\n if (!warnedSettings.has(context)) {\n warnedSettings.set(context, new Set());\n }\n\n warnedSettings.get(context).add(setting);\n },\n };\n};\n\nexport default WarnSettings;\n"],"mappings":";;;;;;AAAA,MAAMA,YAAY,GAAG,SAAAA,CAAA,EAAY;EAC/B;EACA,MAAMC,cAAc,GAAG,IAAIC,OAAO,CAAC,CAAC;EAEpC,OAAO;IACL;AACJ;AACA;AACA;AACA;AACA;IACIC,aAAaA,CAAEC,OAAO,EAAEC,OAAO,EAAE;MAC/B,OAAOJ,cAAc,CAACK,GAAG,CAACF,OAAO,CAAC,IAAIH,cAAc,CAACM,GAAG,CAACH,OAAO,CAAC,CAACE,GAAG,CAACD,OAAO,CAAC;IAChF,CAAC;IAEDG,mBAAmBA,CAAEJ,OAAO,EAAEC,OAAO,EAAE;MACrC;MACA,IAAI,CAACJ,cAAc,CAACK,GAAG,CAACF,OAAO,CAAC,EAAE;QAChCH,cAAc,CAACQ,GAAG,CAACL,OAAO,EAAE,IAAIM,GAAG,CAAC,CAAC,CAAC;MACxC;MAEAT,cAAc,CAACM,GAAG,CAACH,OAAO,CAAC,CAACO,GAAG,CAACN,OAAO,CAAC;IAC1C;EACF,CAAC;AACH,CAAC;AAAC,IAAAO,QAAA,GAEaZ,YAAY;AAAAa,OAAA,CAAAC,OAAA,GAAAF,QAAA;AAAAG,MAAA,CAAAF,OAAA,GAAAA,OAAA,CAAAC,OAAA"}
1
+ {"version":3,"file":"WarnSettings.js","names":["WarnSettings","warnedSettings","WeakMap","hasBeenWarned","context","setting","has","get","markSettingAsWarned","set","Set","add","_default","exports","default","module"],"sources":["../src/WarnSettings.js"],"sourcesContent":["const WarnSettings = function () {\n /** @type {WeakMap<object, Set<string>>} */\n const warnedSettings = new WeakMap();\n\n return {\n /**\n * Warn only once for each context and setting\n *\n * @param {import('eslint').Rule.RuleContext} context\n * @param {string} setting\n * @returns {boolean}\n */\n hasBeenWarned (context, setting) {\n return warnedSettings.has(context) && /** @type {Set<string>} */ (\n warnedSettings.get(context)\n ).has(setting);\n },\n\n /**\n * @param {import('eslint').Rule.RuleContext} context\n * @param {string} setting\n * @returns {void}\n */\n markSettingAsWarned (context, setting) {\n // istanbul ignore else\n if (!warnedSettings.has(context)) {\n warnedSettings.set(context, new Set());\n }\n\n /** @type {Set<string>} */ (warnedSettings.get(context)).add(setting);\n },\n };\n};\n\nexport default WarnSettings;\n"],"mappings":";;;;;;AAAA,MAAMA,YAAY,GAAG,SAAAA,CAAA,EAAY;EAC/B;EACA,MAAMC,cAAc,GAAG,IAAIC,OAAO,CAAC,CAAC;EAEpC,OAAO;IACL;AACJ;AACA;AACA;AACA;AACA;AACA;IACIC,aAAaA,CAAEC,OAAO,EAAEC,OAAO,EAAE;MAC/B,OAAOJ,cAAc,CAACK,GAAG,CAACF,OAAO,CAAC,IAAI,0BACpCH,cAAc,CAACM,GAAG,CAACH,OAAO,CAAC,CAC3BE,GAAG,CAACD,OAAO,CAAC;IAChB,CAAC;IAED;AACJ;AACA;AACA;AACA;IACIG,mBAAmBA,CAAEJ,OAAO,EAAEC,OAAO,EAAE;MACrC;MACA,IAAI,CAACJ,cAAc,CAACK,GAAG,CAACF,OAAO,CAAC,EAAE;QAChCH,cAAc,CAACQ,GAAG,CAACL,OAAO,EAAE,IAAIM,GAAG,CAAC,CAAC,CAAC;MACxC;;MAEA;MAA4BT,cAAc,CAACM,GAAG,CAACH,OAAO,CAAC,CAAEO,GAAG,CAACN,OAAO,CAAC;IACvE;EACF,CAAC;AACH,CAAC;AAAC,IAAAO,QAAA,GAEaZ,YAAY;AAAAa,OAAA,CAAAC,OAAA,GAAAF,QAAA;AAAAG,MAAA,CAAAF,OAAA,GAAAA,OAAA,CAAAC,OAAA"}
@@ -14,8 +14,8 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
14
14
  * npm run create-rule my-new-rule -- --recommended
15
15
  * ```
16
16
  */
17
- // Todo: Would ideally have prompts, e.g., to ask for whether type was problem/layout, etc.
18
-
17
+ // Todo: Would ideally have prompts, e.g., to ask for whether
18
+ // type was problem/layout, etc.
19
19
  const [,, ruleName, ...options] = process.argv;
20
20
  const recommended = options.includes('--recommended');
21
21
  (async () => {
@@ -108,6 +108,16 @@ export default iterateJsdoc(({
108
108
  if (!(0, _fs.existsSync)(ruleReadmePath)) {
109
109
  await _promises.default.writeFile(ruleReadmePath, ruleReadmeTemplate);
110
110
  }
111
+
112
+ /**
113
+ * @param {object} cfg
114
+ * @param {string} cfg.path
115
+ * @param {RegExp} cfg.oldRegex
116
+ * @param {string} cfg.checkName
117
+ * @param {string} cfg.newLine
118
+ * @param {boolean} [cfg.oldIsCamel]
119
+ * @returns {Promise<void>}
120
+ */
111
121
  const replaceInOrder = async ({
112
122
  path,
113
123
  oldRegex,
@@ -115,9 +125,32 @@ export default iterateJsdoc(({
115
125
  newLine,
116
126
  oldIsCamel
117
127
  }) => {
128
+ /**
129
+ * @typedef {number} Integer
130
+ */
131
+ /**
132
+ * @typedef {{
133
+ * matchedLine: string,
134
+ * offset: Integer,
135
+ * oldRule: string,
136
+ * }} OffsetInfo
137
+ */
138
+ /**
139
+ * @type {OffsetInfo[]}
140
+ */
118
141
  const offsets = [];
119
142
  let readme = await _promises.default.readFile(path, 'utf8');
120
- readme.replace(oldRegex, (matchedLine, n1, offset, str, {
143
+ readme.replace(oldRegex,
144
+ /**
145
+ * @param {string} matchedLine
146
+ * @param {string} n1
147
+ * @param {Integer} offset
148
+ * @param {string} str
149
+ * @param {object} groups
150
+ * @param {string} groups.oldRule
151
+ * @returns {string}
152
+ */
153
+ (matchedLine, n1, offset, str, {
121
154
  oldRule
122
155
  }) => {
123
156
  offsets.push({
@@ -125,13 +158,13 @@ export default iterateJsdoc(({
125
158
  offset,
126
159
  oldRule
127
160
  });
161
+ return matchedLine;
128
162
  });
129
163
  offsets.sort(({
130
164
  oldRule
131
165
  }, {
132
166
  oldRule: oldRuleB
133
167
  }) => {
134
- // eslint-disable-next-line no-extra-parens
135
168
  return oldRule < oldRuleB ? -1 : oldRule > oldRuleB ? 1 : 0;
136
169
  });
137
170
  let alreadyIncluded = false;
@@ -148,7 +181,7 @@ export default iterateJsdoc(({
148
181
  item.offset = 0;
149
182
  }
150
183
  if (!item) {
151
- item = offsets.pop();
184
+ item = /** @type {OffsetInfo} */offsets.pop();
152
185
  item.offset += item.matchedLine.length;
153
186
  }
154
187
  if (alreadyIncluded) {
@@ -158,12 +191,14 @@ export default iterateJsdoc(({
158
191
  await _promises.default.writeFile(path, readme);
159
192
  }
160
193
  };
161
- await replaceInOrder({
162
- checkName: 'README',
163
- newLine: `{"gitdown": "include", "file": "./rules/${ruleName}.md"}`,
164
- oldRegex: /\n\{"gitdown": "include", "file": ".\/rules\/(?<oldRule>[^.]*).md"\}/gu,
165
- path: './.README/README.md'
166
- });
194
+
195
+ // await replaceInOrder({
196
+ // checkName: 'README',
197
+ // newLine: `{"gitdown": "include", "file": "./rules/${ruleName}.md"}`,
198
+ // oldRegex: /\n\{"gitdown": "include", "file": ".\/rules\/(?<oldRule>[^.]*).md"\}/gu,
199
+ // path: './.README/README.md',
200
+ // });
201
+
167
202
  await replaceInOrder({
168
203
  checkName: 'index import',
169
204
  newLine: `import ${camelCasedRuleName} from './rules/${camelCasedRuleName}';`,
@@ -183,7 +218,7 @@ export default iterateJsdoc(({
183
218
  oldRegex: /\n\s{4}'(?<oldRule>[^']*)': [^,]*,/gu,
184
219
  path: './src/index.js'
185
220
  });
186
- await Promise.resolve().then(() => _interopRequireWildcard(require('./generateReadme.js')));
221
+ await Promise.resolve().then(() => _interopRequireWildcard(require('./generateDocs.js')));
187
222
 
188
223
  /*
189
224
  console.log('Paths to open for further editing\n');
@@ -1 +1 @@
1
- {"version":3,"file":"generateRule.js","names":["_fs","require","_promises","_interopRequireDefault","_path","_camelcase","_openEditor","obj","__esModule","default","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","_interopRequireWildcard","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","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","path","oldRegex","checkName","newLine","oldIsCamel","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\n/**\n * @example\n *\n * ```shell\n * npm run create-rule my-new-rule -- --recommended\n * ```\n */\n\nimport {\n existsSync,\n} from 'fs';\nimport fs from 'fs/promises';\nimport {\n resolve,\n} from 'path';\nimport camelCase from 'camelcase';\nimport open from 'open-editor';\n\n// Todo: Would ideally have prompts, e.g., to ask for whether 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]/u).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 const ruleNames = JSON.parse(await fs.readFile(\n ruleNamesPath, 'utf8',\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';\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#eslint-plugin-jsdoc-rules-${ruleName}',\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<!-- assertions ${camelCasedRuleName} -->\n`;\n\n const ruleReadmePath = `./.README/rules/${ruleName}.md`;\n if (!existsSync(ruleReadmePath)) {\n await fs.writeFile(ruleReadmePath, ruleReadmeTemplate);\n }\n\n const replaceInOrder = async ({\n path,\n oldRegex,\n checkName,\n newLine,\n oldIsCamel,\n }) => {\n const offsets = [];\n\n let readme = await fs.readFile(path, 'utf8');\n readme.replace(\n oldRegex,\n (matchedLine, n1, offset, str, {\n oldRule,\n }) => {\n offsets.push({\n matchedLine,\n offset,\n oldRule,\n });\n },\n );\n\n offsets.sort(({\n oldRule,\n }, {\n oldRule: oldRuleB,\n }) => {\n // eslint-disable-next-line no-extra-parens\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 = 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\"\\}/gu,\n path: './.README/README.md',\n });\n\n await replaceInOrder({\n checkName: 'index import',\n newLine: `import ${camelCasedRuleName} from './rules/${camelCasedRuleName}';`,\n oldIsCamel: true,\n oldRegex: /\\nimport (?<oldRule>[^ ]*) from '.\\/rules\\/\\1';/gu,\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>[^']*)': .*?,/gu,\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>[^']*)': [^,]*,/gu,\n path: './src/index.js',\n });\n\n await import('./generateReadme.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(__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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"}
1
+ {"version":3,"file":"generateRule.js","names":["_fs","require","_promises","_interopRequireDefault","_path","_camelcase","_openEditor","obj","__esModule","default","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","_interopRequireWildcard","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","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","path","oldRegex","checkName","newLine","oldIsCamel","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\n/**\n * @example\n *\n * ```shell\n * npm run create-rule my-new-rule -- --recommended\n * ```\n */\n\nimport {\n existsSync,\n} from 'fs';\nimport fs from 'fs/promises';\nimport {\n resolve,\n} from 'path';\nimport camelCase from 'camelcase';\nimport open from 'open-editor';\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]/u).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 const ruleNames = JSON.parse(await fs.readFile(\n ruleNamesPath, 'utf8',\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';\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#eslint-plugin-jsdoc-rules-${ruleName}',\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<!-- assertions ${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 path,\n oldRegex,\n checkName,\n newLine,\n oldIsCamel,\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\"\\}/gu,\n // path: './.README/README.md',\n // });\n\n await replaceInOrder({\n checkName: 'index import',\n newLine: `import ${camelCasedRuleName} from './rules/${camelCasedRuleName}';`,\n oldIsCamel: true,\n oldRegex: /\\nimport (?<oldRule>[^ ]*) from '.\\/rules\\/\\1';/gu,\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>[^']*)': .*?,/gu,\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>[^']*)': [^,]*,/gu,\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(__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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"}
@@ -0,0 +1,12 @@
1
+ declare module 'gitdown' {
2
+ interface Gitdown {
3
+ setConfig: (info: {
4
+ gitinfo: {
5
+ defaultBranchName: string,
6
+ gitPath: string
7
+ }
8
+ }) => void
9
+ get: () => string
10
+ }
11
+ export function readFile(path: string): Gitdown
12
+ }
@@ -14,8 +14,8 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
14
14
  * npm run create-rule my-new-rule -- --recommended
15
15
  * ```
16
16
  */
17
- // Todo: Would ideally have prompts, e.g., to ask for whether type was problem/layout, etc.
18
-
17
+ // Todo: Would ideally have prompts, e.g., to ask for whether
18
+ // type was problem/layout, etc.
19
19
  const [,, ruleName, ...options] = process.argv;
20
20
  const recommended = options.includes('--recommended');
21
21
  (async () => {
@@ -108,6 +108,16 @@ export default iterateJsdoc(({
108
108
  if (!(0, _fs.existsSync)(ruleReadmePath)) {
109
109
  await _promises.default.writeFile(ruleReadmePath, ruleReadmeTemplate);
110
110
  }
111
+
112
+ /**
113
+ * @param {object} cfg
114
+ * @param {string} cfg.path
115
+ * @param {RegExp} cfg.oldRegex
116
+ * @param {string} cfg.checkName
117
+ * @param {string} cfg.newLine
118
+ * @param {boolean} [cfg.oldIsCamel]
119
+ * @returns {Promise<void>}
120
+ */
111
121
  const replaceInOrder = async ({
112
122
  path,
113
123
  oldRegex,
@@ -115,9 +125,32 @@ export default iterateJsdoc(({
115
125
  newLine,
116
126
  oldIsCamel
117
127
  }) => {
128
+ /**
129
+ * @typedef {number} Integer
130
+ */
131
+ /**
132
+ * @typedef {{
133
+ * matchedLine: string,
134
+ * offset: Integer,
135
+ * oldRule: string,
136
+ * }} OffsetInfo
137
+ */
138
+ /**
139
+ * @type {OffsetInfo[]}
140
+ */
118
141
  const offsets = [];
119
142
  let readme = await _promises.default.readFile(path, 'utf8');
120
- readme.replace(oldRegex, (matchedLine, n1, offset, str, {
143
+ readme.replace(oldRegex,
144
+ /**
145
+ * @param {string} matchedLine
146
+ * @param {string} n1
147
+ * @param {Integer} offset
148
+ * @param {string} str
149
+ * @param {object} groups
150
+ * @param {string} groups.oldRule
151
+ * @returns {string}
152
+ */
153
+ (matchedLine, n1, offset, str, {
121
154
  oldRule
122
155
  }) => {
123
156
  offsets.push({
@@ -125,13 +158,13 @@ export default iterateJsdoc(({
125
158
  offset,
126
159
  oldRule
127
160
  });
161
+ return matchedLine;
128
162
  });
129
163
  offsets.sort(({
130
164
  oldRule
131
165
  }, {
132
166
  oldRule: oldRuleB
133
167
  }) => {
134
- // eslint-disable-next-line no-extra-parens
135
168
  return oldRule < oldRuleB ? -1 : oldRule > oldRuleB ? 1 : 0;
136
169
  });
137
170
  let alreadyIncluded = false;
@@ -148,7 +181,7 @@ export default iterateJsdoc(({
148
181
  item.offset = 0;
149
182
  }
150
183
  if (!item) {
151
- item = offsets.pop();
184
+ item = /** @type {OffsetInfo} */offsets.pop();
152
185
  item.offset += item.matchedLine.length;
153
186
  }
154
187
  if (alreadyIncluded) {
@@ -158,12 +191,14 @@ export default iterateJsdoc(({
158
191
  await _promises.default.writeFile(path, readme);
159
192
  }
160
193
  };
161
- await replaceInOrder({
162
- checkName: 'README',
163
- newLine: `{"gitdown": "include", "file": "./rules/${ruleName}.md"}`,
164
- oldRegex: /\n\{"gitdown": "include", "file": ".\/rules\/(?<oldRule>[^.]*).md"\}/gu,
165
- path: './.README/README.md'
166
- });
194
+
195
+ // await replaceInOrder({
196
+ // checkName: 'README',
197
+ // newLine: `{"gitdown": "include", "file": "./rules/${ruleName}.md"}`,
198
+ // oldRegex: /\n\{"gitdown": "include", "file": ".\/rules\/(?<oldRule>[^.]*).md"\}/gu,
199
+ // path: './.README/README.md',
200
+ // });
201
+
167
202
  await replaceInOrder({
168
203
  checkName: 'index import',
169
204
  newLine: `import ${camelCasedRuleName} from './rules/${camelCasedRuleName}';`,
@@ -183,7 +218,7 @@ export default iterateJsdoc(({
183
218
  oldRegex: /\n\s{4}'(?<oldRule>[^']*)': [^,]*,/gu,
184
219
  path: './src/index.js'
185
220
  });
186
- await Promise.resolve().then(() => _interopRequireWildcard(require('./generateReadme.js')));
221
+ await Promise.resolve().then(() => _interopRequireWildcard(require('./generateDocs.js')));
187
222
 
188
223
  /*
189
224
  console.log('Paths to open for further editing\n');
@@ -1 +1 @@
1
- {"version":3,"file":"generateRule.js","names":["_fs","require","_promises","_interopRequireDefault","_path","_camelcase","_openEditor","obj","__esModule","default","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","_interopRequireWildcard","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","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","path","oldRegex","checkName","newLine","oldIsCamel","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\n/**\n * @example\n *\n * ```shell\n * npm run create-rule my-new-rule -- --recommended\n * ```\n */\n\nimport {\n existsSync,\n} from 'fs';\nimport fs from 'fs/promises';\nimport {\n resolve,\n} from 'path';\nimport camelCase from 'camelcase';\nimport open from 'open-editor';\n\n// Todo: Would ideally have prompts, e.g., to ask for whether 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]/u).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 const ruleNames = JSON.parse(await fs.readFile(\n ruleNamesPath, 'utf8',\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';\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#eslint-plugin-jsdoc-rules-${ruleName}',\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<!-- assertions ${camelCasedRuleName} -->\n`;\n\n const ruleReadmePath = `./.README/rules/${ruleName}.md`;\n if (!existsSync(ruleReadmePath)) {\n await fs.writeFile(ruleReadmePath, ruleReadmeTemplate);\n }\n\n const replaceInOrder = async ({\n path,\n oldRegex,\n checkName,\n newLine,\n oldIsCamel,\n }) => {\n const offsets = [];\n\n let readme = await fs.readFile(path, 'utf8');\n readme.replace(\n oldRegex,\n (matchedLine, n1, offset, str, {\n oldRule,\n }) => {\n offsets.push({\n matchedLine,\n offset,\n oldRule,\n });\n },\n );\n\n offsets.sort(({\n oldRule,\n }, {\n oldRule: oldRuleB,\n }) => {\n // eslint-disable-next-line no-extra-parens\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 = 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\"\\}/gu,\n path: './.README/README.md',\n });\n\n await replaceInOrder({\n checkName: 'index import',\n newLine: `import ${camelCasedRuleName} from './rules/${camelCasedRuleName}';`,\n oldIsCamel: true,\n oldRegex: /\\nimport (?<oldRule>[^ ]*) from '.\\/rules\\/\\1';/gu,\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>[^']*)': .*?,/gu,\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>[^']*)': [^,]*,/gu,\n path: './src/index.js',\n });\n\n await import('./generateReadme.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(__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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"}
1
+ {"version":3,"file":"generateRule.js","names":["_fs","require","_promises","_interopRequireDefault","_path","_camelcase","_openEditor","obj","__esModule","default","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","_interopRequireWildcard","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","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","path","oldRegex","checkName","newLine","oldIsCamel","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\n/**\n * @example\n *\n * ```shell\n * npm run create-rule my-new-rule -- --recommended\n * ```\n */\n\nimport {\n existsSync,\n} from 'fs';\nimport fs from 'fs/promises';\nimport {\n resolve,\n} from 'path';\nimport camelCase from 'camelcase';\nimport open from 'open-editor';\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]/u).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 const ruleNames = JSON.parse(await fs.readFile(\n ruleNamesPath, 'utf8',\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';\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#eslint-plugin-jsdoc-rules-${ruleName}',\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<!-- assertions ${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 path,\n oldRegex,\n checkName,\n newLine,\n oldIsCamel,\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\"\\}/gu,\n // path: './.README/README.md',\n // });\n\n await replaceInOrder({\n checkName: 'index import',\n newLine: `import ${camelCasedRuleName} from './rules/${camelCasedRuleName}';`,\n oldIsCamel: true,\n oldRegex: /\\nimport (?<oldRule>[^ ]*) from '.\\/rules\\/\\1';/gu,\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>[^']*)': .*?,/gu,\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>[^']*)': [^,]*,/gu,\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(__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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"}
package/dist/index.js CHANGED
@@ -58,7 +58,12 @@ var _textEscaping = _interopRequireDefault(require("./rules/textEscaping"));
58
58
  var _validTypes = _interopRequireDefault(require("./rules/validTypes"));
59
59
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
60
60
  const index = {
61
+ /* eslint-disable jsdoc/no-undefined-types -- Bug */
62
+ /**
63
+ * @type {Record<string, import('eslint').ESLint.ConfigData<import('eslint').Linter.RulesRecord>>}
64
+ */
61
65
  configs: {},
66
+ /* eslint-enable jsdoc/no-undefined-types -- Bug */
62
67
  rules: {
63
68
  'check-access': _checkAccess.default,
64
69
  'check-alignment': _checkAlignment.default,
@@ -114,6 +119,11 @@ const index = {
114
119
  'valid-types': _validTypes.default
115
120
  }
116
121
  };
122
+
123
+ /**
124
+ * @param {"warn"|"error"} warnOrError
125
+ * @returns {import('eslint').ESLint.ConfigData}
126
+ */
117
127
  const createRecommendedRuleset = warnOrError => {
118
128
  return {
119
129
  plugins: ['jsdoc'],
@@ -173,6 +183,11 @@ const createRecommendedRuleset = warnOrError => {
173
183
  }
174
184
  };
175
185
  };
186
+
187
+ /**
188
+ * @param {"warn"|"error"} warnOrError
189
+ * @returns {import('eslint').ESLint.ConfigData}
190
+ */
176
191
  const createRecommendedTypeScriptRuleset = warnOrError => {
177
192
  const ruleset = createRecommendedRuleset(warnOrError);
178
193
  return {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["_checkAccess","_interopRequireDefault","require","_checkAlignment","_checkExamples","_checkIndentation","_checkLineAlignment","_checkParamNames","_checkPropertyNames","_checkSyntax","_checkTagNames","_checkTypes","_checkValues","_emptyTags","_implementsOnClasses","_informativeDocs","_matchDescription","_matchName","_multilineBlocks","_noBadBlocks","_noBlankBlockDescriptions","_noBlankBlocks","_noDefaults","_noMissingSyntax","_noMultiAsterisks","_noRestrictedSyntax","_noTypes","_noUndefinedTypes","_requireAsteriskPrefix","_requireDescription","_requireDescriptionCompleteSentence","_requireExample","_requireFileOverview","_requireHyphenBeforeParamDescription","_requireJsdoc","_requireParam","_requireParamDescription","_requireParamName","_requireParamType","_requireProperty","_requirePropertyDescription","_requirePropertyName","_requirePropertyType","_requireReturns","_requireReturnsCheck","_requireReturnsDescription","_requireReturnsType","_requireThrows","_requireYields","_requireYieldsCheck","_sortTags","_tagLines","_textEscaping","_validTypes","obj","__esModule","default","index","configs","rules","checkAccess","checkAlignment","checkExamples","checkIndentation","checkLineAlignment","checkParamNames","checkPropertyNames","checkSyntax","checkTagNames","checkTypes","checkValues","emptyTags","implementsOnClasses","informativeDocs","matchDescription","matchName","multilineBlocks","noBadBlocks","noBlankBlockDescriptions","noBlankBlocks","noDefaults","noMissingSyntax","noMultiAsterisks","noRestrictedSyntax","noTypes","noUndefinedTypes","requireAsteriskPrefix","requireDescription","requireDescriptionCompleteSentence","requireExample","requireFileOverview","requireHyphenBeforeParamDescription","requireJsdoc","requireParam","requireParamDescription","requireParamName","requireParamType","requireProperty","requirePropertyDescription","requirePropertyName","requirePropertyType","requireReturns","requireReturnsCheck","requireReturnsDescription","requireReturnsType","requireThrows","requireYields","requireYieldsCheck","sortTags","tagLines","textEscaping","validTypes","createRecommendedRuleset","warnOrError","plugins","createRecommendedTypeScriptRuleset","ruleset","typed","recommended","_default","exports","module"],"sources":["../src/index.js"],"sourcesContent":["import checkAccess from './rules/checkAccess';\nimport checkAlignment from './rules/checkAlignment';\nimport checkExamples from './rules/checkExamples';\nimport checkIndentation from './rules/checkIndentation';\nimport checkLineAlignment from './rules/checkLineAlignment';\nimport checkParamNames from './rules/checkParamNames';\nimport checkPropertyNames from './rules/checkPropertyNames';\nimport checkSyntax from './rules/checkSyntax';\nimport checkTagNames from './rules/checkTagNames';\nimport checkTypes from './rules/checkTypes';\nimport checkValues from './rules/checkValues';\nimport emptyTags from './rules/emptyTags';\nimport implementsOnClasses from './rules/implementsOnClasses';\nimport informativeDocs from './rules/informativeDocs';\nimport matchDescription from './rules/matchDescription';\nimport matchName from './rules/matchName';\nimport multilineBlocks from './rules/multilineBlocks';\nimport noBadBlocks from './rules/noBadBlocks';\nimport noBlankBlockDescriptions from './rules/noBlankBlockDescriptions';\nimport noBlankBlocks from './rules/noBlankBlocks';\nimport noDefaults from './rules/noDefaults';\nimport noMissingSyntax from './rules/noMissingSyntax';\nimport noMultiAsterisks from './rules/noMultiAsterisks';\nimport noRestrictedSyntax from './rules/noRestrictedSyntax';\nimport noTypes from './rules/noTypes';\nimport noUndefinedTypes from './rules/noUndefinedTypes';\nimport requireAsteriskPrefix from './rules/requireAsteriskPrefix';\nimport requireDescription from './rules/requireDescription';\nimport requireDescriptionCompleteSentence from './rules/requireDescriptionCompleteSentence';\nimport requireExample from './rules/requireExample';\nimport requireFileOverview from './rules/requireFileOverview';\nimport requireHyphenBeforeParamDescription from './rules/requireHyphenBeforeParamDescription';\nimport requireJsdoc from './rules/requireJsdoc';\nimport requireParam from './rules/requireParam';\nimport requireParamDescription from './rules/requireParamDescription';\nimport requireParamName from './rules/requireParamName';\nimport requireParamType from './rules/requireParamType';\nimport requireProperty from './rules/requireProperty';\nimport requirePropertyDescription from './rules/requirePropertyDescription';\nimport requirePropertyName from './rules/requirePropertyName';\nimport requirePropertyType from './rules/requirePropertyType';\nimport requireReturns from './rules/requireReturns';\nimport requireReturnsCheck from './rules/requireReturnsCheck';\nimport requireReturnsDescription from './rules/requireReturnsDescription';\nimport requireReturnsType from './rules/requireReturnsType';\nimport requireThrows from './rules/requireThrows';\nimport requireYields from './rules/requireYields';\nimport requireYieldsCheck from './rules/requireYieldsCheck';\nimport sortTags from './rules/sortTags';\nimport tagLines from './rules/tagLines';\nimport textEscaping from './rules/textEscaping';\nimport validTypes from './rules/validTypes';\n\nconst index = {\n configs: {},\n rules: {\n 'check-access': checkAccess,\n 'check-alignment': checkAlignment,\n 'check-examples': checkExamples,\n 'check-indentation': checkIndentation,\n 'check-line-alignment': checkLineAlignment,\n 'check-param-names': checkParamNames,\n 'check-property-names': checkPropertyNames,\n 'check-syntax': checkSyntax,\n 'check-tag-names': checkTagNames,\n 'check-types': checkTypes,\n 'check-values': checkValues,\n 'empty-tags': emptyTags,\n 'implements-on-classes': implementsOnClasses,\n 'informative-docs': informativeDocs,\n 'match-description': matchDescription,\n 'match-name': matchName,\n 'multiline-blocks': multilineBlocks,\n 'no-bad-blocks': noBadBlocks,\n 'no-blank-block-descriptions': noBlankBlockDescriptions,\n 'no-blank-blocks': noBlankBlocks,\n 'no-defaults': noDefaults,\n 'no-missing-syntax': noMissingSyntax,\n 'no-multi-asterisks': noMultiAsterisks,\n 'no-restricted-syntax': noRestrictedSyntax,\n 'no-types': noTypes,\n 'no-undefined-types': noUndefinedTypes,\n 'require-asterisk-prefix': requireAsteriskPrefix,\n 'require-description': requireDescription,\n 'require-description-complete-sentence': requireDescriptionCompleteSentence,\n 'require-example': requireExample,\n 'require-file-overview': requireFileOverview,\n 'require-hyphen-before-param-description': requireHyphenBeforeParamDescription,\n 'require-jsdoc': requireJsdoc,\n 'require-param': requireParam,\n 'require-param-description': requireParamDescription,\n 'require-param-name': requireParamName,\n 'require-param-type': requireParamType,\n 'require-property': requireProperty,\n 'require-property-description': requirePropertyDescription,\n 'require-property-name': requirePropertyName,\n 'require-property-type': requirePropertyType,\n 'require-returns': requireReturns,\n 'require-returns-check': requireReturnsCheck,\n 'require-returns-description': requireReturnsDescription,\n 'require-returns-type': requireReturnsType,\n 'require-throws': requireThrows,\n 'require-yields': requireYields,\n 'require-yields-check': requireYieldsCheck,\n 'sort-tags': sortTags,\n 'tag-lines': tagLines,\n 'text-escaping': textEscaping,\n 'valid-types': validTypes,\n },\n};\n\nconst createRecommendedRuleset = (warnOrError) => {\n return {\n plugins: [\n 'jsdoc',\n ],\n rules: {\n 'jsdoc/check-access': warnOrError,\n 'jsdoc/check-alignment': warnOrError,\n 'jsdoc/check-examples': 'off',\n 'jsdoc/check-indentation': 'off',\n 'jsdoc/check-line-alignment': 'off',\n 'jsdoc/check-param-names': warnOrError,\n 'jsdoc/check-property-names': warnOrError,\n 'jsdoc/check-syntax': 'off',\n 'jsdoc/check-tag-names': warnOrError,\n 'jsdoc/check-types': warnOrError,\n 'jsdoc/check-values': warnOrError,\n 'jsdoc/empty-tags': warnOrError,\n 'jsdoc/implements-on-classes': warnOrError,\n 'jsdoc/informative-docs': 'off',\n 'jsdoc/match-description': 'off',\n 'jsdoc/match-name': 'off',\n 'jsdoc/multiline-blocks': warnOrError,\n 'jsdoc/no-bad-blocks': 'off',\n 'jsdoc/no-blank-block-descriptions': 'off',\n 'jsdoc/no-blank-blocks': 'off',\n 'jsdoc/no-defaults': 'off',\n 'jsdoc/no-missing-syntax': 'off',\n 'jsdoc/no-multi-asterisks': warnOrError,\n 'jsdoc/no-restricted-syntax': 'off',\n 'jsdoc/no-types': 'off',\n 'jsdoc/no-undefined-types': warnOrError,\n 'jsdoc/require-asterisk-prefix': 'off',\n 'jsdoc/require-description': 'off',\n 'jsdoc/require-description-complete-sentence': 'off',\n 'jsdoc/require-example': 'off',\n 'jsdoc/require-file-overview': 'off',\n 'jsdoc/require-hyphen-before-param-description': 'off',\n 'jsdoc/require-jsdoc': warnOrError,\n 'jsdoc/require-param': warnOrError,\n 'jsdoc/require-param-description': warnOrError,\n 'jsdoc/require-param-name': warnOrError,\n 'jsdoc/require-param-type': warnOrError,\n 'jsdoc/require-property': warnOrError,\n 'jsdoc/require-property-description': warnOrError,\n 'jsdoc/require-property-name': warnOrError,\n 'jsdoc/require-property-type': warnOrError,\n 'jsdoc/require-returns': warnOrError,\n 'jsdoc/require-returns-check': warnOrError,\n 'jsdoc/require-returns-description': warnOrError,\n 'jsdoc/require-returns-type': warnOrError,\n 'jsdoc/require-throws': 'off',\n 'jsdoc/require-yields': warnOrError,\n 'jsdoc/require-yields-check': warnOrError,\n 'jsdoc/sort-tags': 'off',\n 'jsdoc/tag-lines': warnOrError,\n 'jsdoc/text-escaping': 'off',\n 'jsdoc/valid-types': warnOrError,\n },\n };\n};\n\nconst createRecommendedTypeScriptRuleset = (warnOrError) => {\n const ruleset = createRecommendedRuleset(warnOrError);\n\n return {\n ...ruleset,\n rules: {\n ...ruleset.rules,\n /* eslint-disable indent -- Extra indent to avoid use by auto-rule-editing */\n 'jsdoc/check-tag-names': [\n warnOrError, {\n typed: true,\n },\n ],\n 'jsdoc/no-types': warnOrError,\n 'jsdoc/require-param-type': 'off',\n 'jsdoc/require-property-type': 'off',\n 'jsdoc/require-returns-type': 'off',\n /* eslint-enable indent */\n },\n };\n};\n\nindex.configs.recommended = createRecommendedRuleset('warn');\nindex.configs['recommended-error'] = createRecommendedRuleset('error');\nindex.configs['recommended-typescript'] = createRecommendedTypeScriptRuleset('warn');\nindex.configs['recommended-typescript-error'] = createRecommendedTypeScriptRuleset('error');\n\nexport default index;\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["_checkAccess","_interopRequireDefault","require","_checkAlignment","_checkExamples","_checkIndentation","_checkLineAlignment","_checkParamNames","_checkPropertyNames","_checkSyntax","_checkTagNames","_checkTypes","_checkValues","_emptyTags","_implementsOnClasses","_informativeDocs","_matchDescription","_matchName","_multilineBlocks","_noBadBlocks","_noBlankBlockDescriptions","_noBlankBlocks","_noDefaults","_noMissingSyntax","_noMultiAsterisks","_noRestrictedSyntax","_noTypes","_noUndefinedTypes","_requireAsteriskPrefix","_requireDescription","_requireDescriptionCompleteSentence","_requireExample","_requireFileOverview","_requireHyphenBeforeParamDescription","_requireJsdoc","_requireParam","_requireParamDescription","_requireParamName","_requireParamType","_requireProperty","_requirePropertyDescription","_requirePropertyName","_requirePropertyType","_requireReturns","_requireReturnsCheck","_requireReturnsDescription","_requireReturnsType","_requireThrows","_requireYields","_requireYieldsCheck","_sortTags","_tagLines","_textEscaping","_validTypes","obj","__esModule","default","index","configs","rules","checkAccess","checkAlignment","checkExamples","checkIndentation","checkLineAlignment","checkParamNames","checkPropertyNames","checkSyntax","checkTagNames","checkTypes","checkValues","emptyTags","implementsOnClasses","informativeDocs","matchDescription","matchName","multilineBlocks","noBadBlocks","noBlankBlockDescriptions","noBlankBlocks","noDefaults","noMissingSyntax","noMultiAsterisks","noRestrictedSyntax","noTypes","noUndefinedTypes","requireAsteriskPrefix","requireDescription","requireDescriptionCompleteSentence","requireExample","requireFileOverview","requireHyphenBeforeParamDescription","requireJsdoc","requireParam","requireParamDescription","requireParamName","requireParamType","requireProperty","requirePropertyDescription","requirePropertyName","requirePropertyType","requireReturns","requireReturnsCheck","requireReturnsDescription","requireReturnsType","requireThrows","requireYields","requireYieldsCheck","sortTags","tagLines","textEscaping","validTypes","createRecommendedRuleset","warnOrError","plugins","createRecommendedTypeScriptRuleset","ruleset","typed","recommended","_default","exports","module"],"sources":["../src/index.js"],"sourcesContent":["import checkAccess from './rules/checkAccess';\nimport checkAlignment from './rules/checkAlignment';\nimport checkExamples from './rules/checkExamples';\nimport checkIndentation from './rules/checkIndentation';\nimport checkLineAlignment from './rules/checkLineAlignment';\nimport checkParamNames from './rules/checkParamNames';\nimport checkPropertyNames from './rules/checkPropertyNames';\nimport checkSyntax from './rules/checkSyntax';\nimport checkTagNames from './rules/checkTagNames';\nimport checkTypes from './rules/checkTypes';\nimport checkValues from './rules/checkValues';\nimport emptyTags from './rules/emptyTags';\nimport implementsOnClasses from './rules/implementsOnClasses';\nimport informativeDocs from './rules/informativeDocs';\nimport matchDescription from './rules/matchDescription';\nimport matchName from './rules/matchName';\nimport multilineBlocks from './rules/multilineBlocks';\nimport noBadBlocks from './rules/noBadBlocks';\nimport noBlankBlockDescriptions from './rules/noBlankBlockDescriptions';\nimport noBlankBlocks from './rules/noBlankBlocks';\nimport noDefaults from './rules/noDefaults';\nimport noMissingSyntax from './rules/noMissingSyntax';\nimport noMultiAsterisks from './rules/noMultiAsterisks';\nimport noRestrictedSyntax from './rules/noRestrictedSyntax';\nimport noTypes from './rules/noTypes';\nimport noUndefinedTypes from './rules/noUndefinedTypes';\nimport requireAsteriskPrefix from './rules/requireAsteriskPrefix';\nimport requireDescription from './rules/requireDescription';\nimport requireDescriptionCompleteSentence from './rules/requireDescriptionCompleteSentence';\nimport requireExample from './rules/requireExample';\nimport requireFileOverview from './rules/requireFileOverview';\nimport requireHyphenBeforeParamDescription from './rules/requireHyphenBeforeParamDescription';\nimport requireJsdoc from './rules/requireJsdoc';\nimport requireParam from './rules/requireParam';\nimport requireParamDescription from './rules/requireParamDescription';\nimport requireParamName from './rules/requireParamName';\nimport requireParamType from './rules/requireParamType';\nimport requireProperty from './rules/requireProperty';\nimport requirePropertyDescription from './rules/requirePropertyDescription';\nimport requirePropertyName from './rules/requirePropertyName';\nimport requirePropertyType from './rules/requirePropertyType';\nimport requireReturns from './rules/requireReturns';\nimport requireReturnsCheck from './rules/requireReturnsCheck';\nimport requireReturnsDescription from './rules/requireReturnsDescription';\nimport requireReturnsType from './rules/requireReturnsType';\nimport requireThrows from './rules/requireThrows';\nimport requireYields from './rules/requireYields';\nimport requireYieldsCheck from './rules/requireYieldsCheck';\nimport sortTags from './rules/sortTags';\nimport tagLines from './rules/tagLines';\nimport textEscaping from './rules/textEscaping';\nimport validTypes from './rules/validTypes';\n\nconst index = {\n /* eslint-disable jsdoc/no-undefined-types -- Bug */\n /**\n * @type {Record<string, import('eslint').ESLint.ConfigData<import('eslint').Linter.RulesRecord>>}\n */\n configs: {},\n /* eslint-enable jsdoc/no-undefined-types -- Bug */\n rules: {\n 'check-access': checkAccess,\n 'check-alignment': checkAlignment,\n 'check-examples': checkExamples,\n 'check-indentation': checkIndentation,\n 'check-line-alignment': checkLineAlignment,\n 'check-param-names': checkParamNames,\n 'check-property-names': checkPropertyNames,\n 'check-syntax': checkSyntax,\n 'check-tag-names': checkTagNames,\n 'check-types': checkTypes,\n 'check-values': checkValues,\n 'empty-tags': emptyTags,\n 'implements-on-classes': implementsOnClasses,\n 'informative-docs': informativeDocs,\n 'match-description': matchDescription,\n 'match-name': matchName,\n 'multiline-blocks': multilineBlocks,\n 'no-bad-blocks': noBadBlocks,\n 'no-blank-block-descriptions': noBlankBlockDescriptions,\n 'no-blank-blocks': noBlankBlocks,\n 'no-defaults': noDefaults,\n 'no-missing-syntax': noMissingSyntax,\n 'no-multi-asterisks': noMultiAsterisks,\n 'no-restricted-syntax': noRestrictedSyntax,\n 'no-types': noTypes,\n 'no-undefined-types': noUndefinedTypes,\n 'require-asterisk-prefix': requireAsteriskPrefix,\n 'require-description': requireDescription,\n 'require-description-complete-sentence': requireDescriptionCompleteSentence,\n 'require-example': requireExample,\n 'require-file-overview': requireFileOverview,\n 'require-hyphen-before-param-description': requireHyphenBeforeParamDescription,\n 'require-jsdoc': requireJsdoc,\n 'require-param': requireParam,\n 'require-param-description': requireParamDescription,\n 'require-param-name': requireParamName,\n 'require-param-type': requireParamType,\n 'require-property': requireProperty,\n 'require-property-description': requirePropertyDescription,\n 'require-property-name': requirePropertyName,\n 'require-property-type': requirePropertyType,\n 'require-returns': requireReturns,\n 'require-returns-check': requireReturnsCheck,\n 'require-returns-description': requireReturnsDescription,\n 'require-returns-type': requireReturnsType,\n 'require-throws': requireThrows,\n 'require-yields': requireYields,\n 'require-yields-check': requireYieldsCheck,\n 'sort-tags': sortTags,\n 'tag-lines': tagLines,\n 'text-escaping': textEscaping,\n 'valid-types': validTypes,\n },\n};\n\n/**\n * @param {\"warn\"|\"error\"} warnOrError\n * @returns {import('eslint').ESLint.ConfigData}\n */\nconst createRecommendedRuleset = (warnOrError) => {\n return {\n plugins: [\n 'jsdoc',\n ],\n rules: {\n 'jsdoc/check-access': warnOrError,\n 'jsdoc/check-alignment': warnOrError,\n 'jsdoc/check-examples': 'off',\n 'jsdoc/check-indentation': 'off',\n 'jsdoc/check-line-alignment': 'off',\n 'jsdoc/check-param-names': warnOrError,\n 'jsdoc/check-property-names': warnOrError,\n 'jsdoc/check-syntax': 'off',\n 'jsdoc/check-tag-names': warnOrError,\n 'jsdoc/check-types': warnOrError,\n 'jsdoc/check-values': warnOrError,\n 'jsdoc/empty-tags': warnOrError,\n 'jsdoc/implements-on-classes': warnOrError,\n 'jsdoc/informative-docs': 'off',\n 'jsdoc/match-description': 'off',\n 'jsdoc/match-name': 'off',\n 'jsdoc/multiline-blocks': warnOrError,\n 'jsdoc/no-bad-blocks': 'off',\n 'jsdoc/no-blank-block-descriptions': 'off',\n 'jsdoc/no-blank-blocks': 'off',\n 'jsdoc/no-defaults': 'off',\n 'jsdoc/no-missing-syntax': 'off',\n 'jsdoc/no-multi-asterisks': warnOrError,\n 'jsdoc/no-restricted-syntax': 'off',\n 'jsdoc/no-types': 'off',\n 'jsdoc/no-undefined-types': warnOrError,\n 'jsdoc/require-asterisk-prefix': 'off',\n 'jsdoc/require-description': 'off',\n 'jsdoc/require-description-complete-sentence': 'off',\n 'jsdoc/require-example': 'off',\n 'jsdoc/require-file-overview': 'off',\n 'jsdoc/require-hyphen-before-param-description': 'off',\n 'jsdoc/require-jsdoc': warnOrError,\n 'jsdoc/require-param': warnOrError,\n 'jsdoc/require-param-description': warnOrError,\n 'jsdoc/require-param-name': warnOrError,\n 'jsdoc/require-param-type': warnOrError,\n 'jsdoc/require-property': warnOrError,\n 'jsdoc/require-property-description': warnOrError,\n 'jsdoc/require-property-name': warnOrError,\n 'jsdoc/require-property-type': warnOrError,\n 'jsdoc/require-returns': warnOrError,\n 'jsdoc/require-returns-check': warnOrError,\n 'jsdoc/require-returns-description': warnOrError,\n 'jsdoc/require-returns-type': warnOrError,\n 'jsdoc/require-throws': 'off',\n 'jsdoc/require-yields': warnOrError,\n 'jsdoc/require-yields-check': warnOrError,\n 'jsdoc/sort-tags': 'off',\n 'jsdoc/tag-lines': warnOrError,\n 'jsdoc/text-escaping': 'off',\n 'jsdoc/valid-types': warnOrError,\n },\n };\n};\n\n/**\n * @param {\"warn\"|\"error\"} warnOrError\n * @returns {import('eslint').ESLint.ConfigData}\n */\nconst createRecommendedTypeScriptRuleset = (warnOrError) => {\n const ruleset = createRecommendedRuleset(warnOrError);\n\n return {\n ...ruleset,\n rules: {\n ...ruleset.rules,\n /* eslint-disable indent -- Extra indent to avoid use by auto-rule-editing */\n 'jsdoc/check-tag-names': [\n warnOrError, {\n typed: true,\n },\n ],\n 'jsdoc/no-types': warnOrError,\n 'jsdoc/require-param-type': 'off',\n 'jsdoc/require-property-type': 'off',\n 'jsdoc/require-returns-type': 'off',\n /* eslint-enable indent */\n },\n };\n};\n\nindex.configs.recommended = createRecommendedRuleset('warn');\nindex.configs['recommended-error'] = createRecommendedRuleset('error');\nindex.configs['recommended-typescript'] = createRecommendedTypeScriptRuleset('warn');\nindex.configs['recommended-typescript-error'] = createRecommendedTypeScriptRuleset('error');\n\nexport default index;\n"],"mappings":"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"}
@@ -492,7 +492,6 @@ const getUtils = (node, jsdoc, jsdocNode, settings, report, context, iteratingAl
492
492
  postName = '';
493
493
  } else if (postType) {
494
494
  postType = '';
495
- // eslint-disable-next-line no-inline-comments
496
495
  } else /* istanbul ignore else -- `comment-parser` prevents empty blocks currently per https://github.com/syavorsky/comment-parser/issues/128 */if (postTag) {
497
496
  postTag = '';
498
497
  }
@@ -1 +1 @@
1
- {"version":3,"file":"iterateJsdoc.js","names":["_jsdoccomment","require","_commentParser","_jsdocUtils","_interopRequireDefault","obj","__esModule","default","rewireSpecs","seedTokens","util","globalState","Map","getBasicUtils","context","tagNamePreference","mode","utils","reportSettings","message","report","loc","start","column","line","parseClosureTemplateTag","tag","jsdocUtils","pathDoesNotBeginWith","getPreferredTagNameObject","tagName","ret","getPreferredTagName","isObject","replacement","blocked","getUtils","node","jsdoc","jsdocNode","settings","iteratingAll","ruleConfig","indent","ancestors","getAncestors","sourceCode","getSourceCode","overrideReplacesDocs","ignoreReplacesDocs","implementsReplacesDocs","augmentsExtendsReplacesDocs","maxLines","minLines","isIteratingFunction","includes","type","isVirtualFunction","hasATag","stringify","tagBlock","specRewire","block","commentStringify","reportJSDoc","msg","handler","data","fixer","text","getText","lastLineBreakPos","slice","range","search","removeRange","test","charAt","replaceText","getRegexFromString","str","requiredFlags","getTagDescription","tg","returnArray","descriptions","source","some","tokens","end","lineEnd","postDelimiter","postTag","name","description","desc","push","join","setTagDescription","matcher","setter","finalIdx","idx","getDescription","lastDescriptionLine","tagsBegun","length","setBlockDescription","descLines","startIdx","endIdx","info","delimiter","undefined","splice","setDescriptionLines","changeTag","src","entries","setTag","number","removeTag","tagIndex","removeEmptyBlock","tagSourceOffset","tagSource","tags","lastIndex","firstNumber","tagIdx","sourceIndex","findIndex","srcNumber","spliceCount","ending","spliceIdx","item","addTag","targetTagName","_jsdoc$tags","_jsdoc$tags$source$","getFirstLine","firstLine","emptyTokens","prop","addLine","_jsdoc$source","addLines","numLines","makeLine","makeLines","Array","from","lines","makeMultiline","postName","postType","trimEnd","flattenRoots","params","getFunctionParameterNames","useDefaultObjectProperties","hasParams","isGenerator","generator","value","declaration","isConstructor","getJsdocTagsDeep","skipReportingBlockedTag","allowObjectReturn","defaultMessage","hasTag","getTags","isValidTag","definedTags","names","comparePaths","dropPathSegmentQuotes","avoidDocs","_context$options$","classHasTag","exemptSpeciaMethods","meta","schema","exemptedBy","options","getPresentTags","method","otherModeMaps","result","otherResult","otherModeMap","otherMode","every","getTagStructureForMode","mde","structuredTags","mayBeUndefinedTypeTag","hasValueOrExecutorHasNonEmptyResolveValue","anyPromiseAsReturn","allBranches","hasYieldValue","hasYieldReturnValue","hasThrowValue","isAsync","async","filterTags","tagList","filter","getTagsByType","hasOptionTag","Boolean","getClassNode","reverse","find","parent","getClassJsdoc","classNode","classJsdocNode","getJSDocComment","parseComment","classJsdoc","forEachPreferredTag","arrayHandler","matchingJsdocTags","matchingJsdocTag","getSettings","_context$settings$jsd","_context$settings$jsd2","_context$settings$jsd3","_context$settings$jsd4","_context$settings$jsd5","_context$settings$jsd6","_context$settings$jsd7","_context$settings$jsd8","_context$settings$jsd9","_context$settings$jsd10","_context$settings$jsd11","_context$settings$jsd12","_context$settings$jsd13","_context$settings$jsd14","ignorePrivate","ignoreInternal","Number","preferredTypes","exemptDestructuredRootsFromChecks","contexts","setTagStructure","overrideTagStructure","error","exports","makeReport","commentNode","fix","jsdocLoc","lineNumber","colNumber","iterate","iterator","state","checkInternal","checkPrivate","getIndentAndJSDoc","sourceLine","indnt","repeat","jsdc","iterateAllJsdocs","additiveCommentContexts","trackedJsdocs","Set","callIterator","jsdocNodes","lastCall","comment","selector","lastComment","exit","create","commentHandler","*:not(Program)","noTracking","has","nonComment","add","Program:exit","allComments","getAllComments","untrackedJSdoc","checkFile","iterateJsdoc","_ruleConfig$meta","metaType","TypeError","contextDefaults","contextSelected","matchContext","_context$options$2","_contexts","_contexts2","match","enforcedContexts","nonGlobalSettings","map","hasPlainAny","hasObjectAny","ctxt","checkJsdoc","contextObject","getContextObject","bind"],"sources":["../src/iterateJsdoc.js"],"sourcesContent":["import {\n getJSDocComment,\n commentHandler,\n parseComment,\n} from '@es-joy/jsdoccomment';\nimport {\n stringify as commentStringify,\n util,\n} from 'comment-parser';\nimport jsdocUtils from './jsdocUtils';\n\nconst {\n rewireSpecs,\n seedTokens,\n} = util;\n\n// todo: Change these `any` types once importing types properly.\n\n/**\n * Should use ESLint rule's typing.\n *\n * @typedef {any} EslintRuleMeta\n */\n\n/**\n * A plain object for tracking state as needed by rules across iterations.\n *\n * @typedef {any} StateObject\n */\n\n/**\n * The Node AST as supplied by the parser.\n *\n * @typedef {any} Node\n */\n\n/*\nconst {\n align as commentAlign,\n flow: commentFlow,\n indent: commentIndent,\n} = transforms;\n*/\n\nconst globalState = new Map();\n\nconst getBasicUtils = (context, {\n tagNamePreference,\n mode,\n}) => {\n const utils = {};\n utils.reportSettings = (message) => {\n context.report({\n loc: {\n start: {\n column: 1,\n line: 1,\n },\n },\n message,\n });\n };\n\n utils.parseClosureTemplateTag = (tag) => {\n return jsdocUtils.parseClosureTemplateTag(tag);\n };\n\n utils.pathDoesNotBeginWith = jsdocUtils.pathDoesNotBeginWith;\n\n utils.getPreferredTagNameObject = ({\n tagName,\n }) => {\n const ret = jsdocUtils.getPreferredTagName(context, mode, tagName, tagNamePreference);\n const isObject = ret && typeof ret === 'object';\n if (ret === false || isObject && !ret.replacement) {\n return {\n blocked: true,\n tagName,\n };\n }\n\n return ret;\n };\n\n return utils;\n};\n\nconst getUtils = (\n node,\n jsdoc,\n jsdocNode,\n settings,\n report,\n context,\n iteratingAll,\n ruleConfig,\n indent,\n) => {\n const ancestors = context.getAncestors();\n const sourceCode = context.getSourceCode();\n\n const utils = getBasicUtils(context, settings);\n\n const {\n tagNamePreference,\n overrideReplacesDocs,\n ignoreReplacesDocs,\n implementsReplacesDocs,\n augmentsExtendsReplacesDocs,\n maxLines,\n minLines,\n mode,\n } = settings;\n\n utils.isIteratingFunction = () => {\n return !iteratingAll || [\n 'MethodDefinition',\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n ].includes(node && node.type);\n };\n\n utils.isVirtualFunction = () => {\n return iteratingAll && utils.hasATag([\n 'callback', 'function', 'func', 'method',\n ]);\n };\n\n utils.stringify = (tagBlock, specRewire) => {\n let block;\n if (specRewire) {\n block = rewireSpecs(tagBlock);\n }\n\n return commentStringify(specRewire ? block : tagBlock);\n };\n\n utils.reportJSDoc = (msg, tag, handler, specRewire, data) => {\n report(msg, handler ? (fixer) => {\n handler();\n const replacement = utils.stringify(jsdoc, specRewire);\n\n if (!replacement) {\n const text = sourceCode.getText();\n const lastLineBreakPos = text.slice(\n 0, jsdocNode.range[0],\n ).search(/\\n[ \\t]*$/u);\n if (lastLineBreakPos > -1) {\n return fixer.removeRange([\n lastLineBreakPos, jsdocNode.range[1],\n ]);\n }\n\n return fixer.removeRange(\n (/\\s/u).test(text.charAt(jsdocNode.range[1])) ?\n [\n jsdocNode.range[0], jsdocNode.range[1] + 1,\n ] :\n jsdocNode.range,\n );\n }\n\n return fixer.replaceText(jsdocNode, replacement);\n } : null, tag, data);\n };\n\n utils.getRegexFromString = (str, requiredFlags) => {\n return jsdocUtils.getRegexFromString(str, requiredFlags);\n };\n\n utils.getTagDescription = (tg, returnArray) => {\n const descriptions = [];\n tg.source.some(({\n tokens: {\n end,\n lineEnd,\n postDelimiter,\n tag,\n postTag,\n name,\n type,\n description,\n },\n }) => {\n const desc = (\n tag && postTag ||\n !tag && !name && !type && postDelimiter || ''\n\n // Remove space\n ).slice(1) +\n (description || '') + (lineEnd || '');\n\n if (end) {\n if (desc) {\n descriptions.push(desc);\n }\n\n return true;\n }\n\n descriptions.push(desc);\n\n return false;\n });\n\n return returnArray ? descriptions : descriptions.join('\\n');\n };\n\n utils.setTagDescription = (tg, matcher, setter) => {\n let finalIdx = 0;\n tg.source.some(({\n tokens: {\n description,\n },\n }, idx) => {\n if (description && matcher.test(description)) {\n tg.source[idx].tokens.description = setter(description);\n finalIdx = idx;\n return true;\n }\n\n return false;\n });\n\n return finalIdx;\n };\n\n utils.getDescription = () => {\n const descriptions = [];\n let lastDescriptionLine = 0;\n let tagsBegun = false;\n jsdoc.source.some(({\n tokens: {\n description,\n tag,\n end,\n },\n }, idx) => {\n if (tag) {\n tagsBegun = true;\n }\n\n if (idx && (tag || end)) {\n lastDescriptionLine = idx - 1;\n if (!tagsBegun && description) {\n descriptions.push(description);\n }\n\n return true;\n }\n\n if (!tagsBegun && (idx || description)) {\n descriptions.push(description || (descriptions.length ? '' : '\\n'));\n }\n\n return false;\n });\n\n return {\n description: descriptions.join('\\n'),\n descriptions,\n lastDescriptionLine,\n };\n };\n\n utils.setBlockDescription = (setter) => {\n const descLines = [];\n let startIdx;\n let endIdx;\n let info;\n\n jsdoc.source.some(({\n tokens: {\n description,\n start,\n delimiter,\n postDelimiter,\n tag,\n end,\n },\n }, idx) => {\n if (delimiter === '/**') {\n return false;\n }\n\n if (startIdx === undefined) {\n startIdx = idx;\n info = {\n delimiter,\n postDelimiter,\n start,\n };\n }\n\n if (tag || end) {\n endIdx = idx;\n return true;\n }\n\n descLines.push(description);\n return false;\n });\n\n /* istanbul ignore else -- Won't be called if missing */\n if (descLines.length) {\n jsdoc.source.splice(\n startIdx, endIdx - startIdx, ...setter(info, seedTokens, descLines),\n );\n }\n };\n\n utils.setDescriptionLines = (matcher, setter) => {\n let finalIdx = 0;\n jsdoc.source.some(({\n tokens: {\n description,\n tag,\n end,\n },\n }, idx) => {\n // istanbul ignore if -- Already checked\n if (idx && (tag || end)) {\n return true;\n }\n\n if (description && matcher.test(description)) {\n jsdoc.source[idx].tokens.description = setter(description);\n finalIdx = idx;\n return true;\n }\n\n return false;\n });\n\n return finalIdx;\n };\n\n utils.changeTag = (tag, ...tokens) => {\n for (const [\n idx,\n src,\n ] of tag.source.entries()) {\n src.tokens = {\n ...src.tokens,\n ...tokens[idx],\n };\n }\n };\n\n utils.setTag = (tag, tokens) => {\n tag.source = [\n {\n // Or tag.source[0].number?\n number: tag.line,\n tokens: seedTokens({\n delimiter: '*',\n postDelimiter: ' ',\n start: indent + ' ',\n tag: '@' + tag.tag,\n ...tokens,\n }),\n },\n ];\n };\n\n utils.removeTag = (tagIndex, {\n removeEmptyBlock = false,\n tagSourceOffset = 0,\n } = {}) => {\n const {\n source: tagSource,\n } = jsdoc.tags[tagIndex];\n let lastIndex;\n const firstNumber = jsdoc.source[0].number;\n tagSource.some(({\n number,\n }, tagIdx) => {\n const sourceIndex = jsdoc.source.findIndex(({\n number: srcNumber,\n }) => {\n return number === srcNumber;\n });\n // istanbul ignore else\n if (sourceIndex > -1) {\n let spliceCount = 1;\n tagSource.slice(tagIdx + 1).some(({\n tokens: {\n tag,\n end: ending,\n },\n }) => {\n if (!tag && !ending) {\n spliceCount++;\n\n return false;\n }\n\n return true;\n });\n\n const spliceIdx = sourceIndex + tagSourceOffset;\n\n const {\n delimiter,\n end,\n } = jsdoc.source[spliceIdx].tokens;\n\n /* istanbul ignore if -- Currently want to clear entirely if removing tags */\n if (\n spliceIdx === 0 && jsdoc.tags.length >= 2 ||\n !removeEmptyBlock && (end || delimiter === '/**')\n ) {\n const {\n tokens,\n } = jsdoc.source[spliceIdx];\n for (const item of [\n 'postDelimiter',\n 'tag',\n 'postTag',\n 'type',\n 'postType',\n 'name',\n 'postName',\n 'description',\n ]) {\n tokens[item] = '';\n }\n } else {\n jsdoc.source.splice(spliceIdx, spliceCount - tagSourceOffset + (spliceIdx ? 0 : jsdoc.source.length));\n tagSource.splice(tagIdx + tagSourceOffset, spliceCount - tagSourceOffset + (spliceIdx ? 0 : jsdoc.source.length));\n }\n\n lastIndex = sourceIndex;\n\n return true;\n }\n\n // istanbul ignore next\n return false;\n });\n for (const [\n idx,\n src,\n ] of jsdoc.source.slice(lastIndex).entries()) {\n src.number = firstNumber + lastIndex + idx;\n }\n\n // Todo: Once rewiring of tags may be fixed in comment-parser to reflect missing tags,\n // this step should be added here (so that, e.g., if accessing `jsdoc.tags`,\n // such as to add a new tag, the correct information will be available)\n };\n\n utils.addTag = (\n targetTagName,\n number = (jsdoc.tags[jsdoc.tags.length - 1]?.source[0]?.number ?? jsdoc.source.findIndex(({\n tokens: {\n tag,\n },\n }) => {\n return tag;\n }) - 1) + 1,\n tokens = {},\n ) => {\n jsdoc.source.splice(number, 0, {\n number,\n source: '',\n tokens: seedTokens({\n delimiter: '*',\n postDelimiter: ' ',\n start: indent + ' ',\n tag: `@${targetTagName}`,\n ...tokens,\n }),\n });\n for (const src of jsdoc.source.slice(number + 1)) {\n src.number++;\n }\n };\n\n utils.getFirstLine = () => {\n let firstLine;\n for (const {\n number,\n tokens: {\n tag,\n },\n } of jsdoc.source) {\n if (tag) {\n firstLine = number;\n break;\n }\n }\n\n return firstLine;\n };\n\n utils.seedTokens = seedTokens;\n\n utils.emptyTokens = (tokens) => {\n for (const prop of [\n 'start',\n 'postDelimiter',\n 'tag',\n 'type',\n 'postType',\n 'postTag',\n 'name',\n 'postName',\n 'description',\n 'end',\n 'lineEnd',\n ]) {\n tokens[prop] = '';\n }\n };\n\n utils.addLine = (sourceIndex, tokens) => {\n const number = (jsdoc.source[sourceIndex - 1]?.number || 0) + 1;\n jsdoc.source.splice(sourceIndex, 0, {\n number,\n source: '',\n tokens: seedTokens(tokens),\n });\n\n for (const src of jsdoc.source.slice(number + 1)) {\n src.number++;\n }\n // If necessary, we can rewire the tags (misnamed method)\n // rewireSource(jsdoc);\n };\n\n utils.addLines = (tagIndex, tagSourceOffset, numLines) => {\n const {\n source: tagSource,\n } = jsdoc.tags[tagIndex];\n let lastIndex;\n const firstNumber = jsdoc.source[0].number;\n tagSource.some(({\n number,\n }) => {\n const makeLine = () => {\n return {\n number,\n source: '',\n tokens: seedTokens({\n delimiter: '*',\n start: indent + ' ',\n }),\n };\n };\n\n const makeLines = () => {\n return Array.from({\n length: numLines,\n }, makeLine);\n };\n\n const sourceIndex = jsdoc.source.findIndex(({\n number: srcNumber,\n tokens: {\n end,\n },\n }) => {\n return number === srcNumber && !end;\n });\n // istanbul ignore else\n if (sourceIndex > -1) {\n const lines = makeLines();\n jsdoc.source.splice(sourceIndex + tagSourceOffset, 0, ...lines);\n\n // tagSource.splice(tagIdx + 1, 0, ...makeLines());\n lastIndex = sourceIndex;\n\n return true;\n }\n\n // istanbul ignore next\n return false;\n });\n for (const [\n idx,\n src,\n ] of jsdoc.source.slice(lastIndex).entries()) {\n src.number = firstNumber + lastIndex + idx;\n }\n };\n\n utils.makeMultiline = () => {\n const {\n source: [\n {\n tokens,\n },\n ],\n } = jsdoc;\n const {\n postDelimiter,\n description,\n lineEnd,\n tag,\n name,\n type,\n } = tokens;\n\n let {\n tokens: {\n postName,\n postTag,\n postType,\n },\n } = jsdoc.source[0];\n\n // Strip trailing leftovers from single line ending\n if (!description) {\n if (postName) {\n postName = '';\n } else if (postType) {\n postType = '';\n // eslint-disable-next-line no-inline-comments\n } else /* istanbul ignore else -- `comment-parser` prevents empty blocks currently per https://github.com/syavorsky/comment-parser/issues/128 */ if (postTag) {\n postTag = '';\n }\n }\n\n utils.emptyTokens(tokens);\n\n utils.addLine(1, {\n delimiter: '*',\n\n // If a description were present, it may have whitespace attached\n // due to being at the end of the single line\n description: description.trimEnd(),\n name,\n postDelimiter,\n postName,\n postTag,\n postType,\n start: indent + ' ',\n tag,\n type,\n });\n utils.addLine(2, {\n end: '*/',\n lineEnd,\n start: indent + ' ',\n });\n };\n\n utils.flattenRoots = (params) => {\n return jsdocUtils.flattenRoots(params);\n };\n\n utils.getFunctionParameterNames = (useDefaultObjectProperties) => {\n return jsdocUtils.getFunctionParameterNames(node, useDefaultObjectProperties);\n };\n\n utils.hasParams = () => {\n return jsdocUtils.hasParams(node);\n };\n\n utils.isGenerator = () => {\n return node && (\n node.generator ||\n node.type === 'MethodDefinition' && node.value.generator ||\n [\n 'ExportNamedDeclaration', 'ExportDefaultDeclaration',\n ].includes(node.type) &&\n node.declaration.generator\n );\n };\n\n utils.isConstructor = () => {\n return jsdocUtils.isConstructor(node);\n };\n\n utils.getJsdocTagsDeep = (tagName) => {\n const name = utils.getPreferredTagName({\n tagName,\n });\n if (!name) {\n return false;\n }\n\n return jsdocUtils.getJsdocTagsDeep(jsdoc, name);\n };\n\n utils.getPreferredTagName = ({\n tagName,\n skipReportingBlockedTag = false,\n allowObjectReturn = false,\n defaultMessage = `Unexpected tag \\`@${tagName}\\``,\n }) => {\n const ret = jsdocUtils.getPreferredTagName(context, mode, tagName, tagNamePreference);\n const isObject = ret && typeof ret === 'object';\n if (utils.hasTag(tagName) && (ret === false || isObject && !ret.replacement)) {\n if (skipReportingBlockedTag) {\n return {\n blocked: true,\n tagName,\n };\n }\n\n const message = isObject && ret.message || defaultMessage;\n report(message, null, utils.getTags(tagName)[0]);\n\n return false;\n }\n\n return isObject && !allowObjectReturn ? ret.replacement : ret;\n };\n\n utils.isValidTag = (name, definedTags) => {\n return jsdocUtils.isValidTag(context, mode, name, definedTags);\n };\n\n utils.hasATag = (names) => {\n return jsdocUtils.hasATag(jsdoc, names);\n };\n\n utils.hasTag = (name) => {\n return jsdocUtils.hasTag(jsdoc, name);\n };\n\n utils.comparePaths = (name) => {\n return jsdocUtils.comparePaths(name);\n };\n\n utils.dropPathSegmentQuotes = (name) => {\n return jsdocUtils.dropPathSegmentQuotes(name);\n };\n\n utils.avoidDocs = () => {\n if (\n ignoreReplacesDocs !== false &&\n (utils.hasTag('ignore') || utils.classHasTag('ignore')) ||\n overrideReplacesDocs !== false &&\n (utils.hasTag('override') || utils.classHasTag('override')) ||\n implementsReplacesDocs !== false &&\n (utils.hasTag('implements') || utils.classHasTag('implements')) ||\n\n augmentsExtendsReplacesDocs &&\n (utils.hasATag([\n 'augments', 'extends',\n ]) ||\n utils.classHasTag('augments') ||\n utils.classHasTag('extends'))) {\n return true;\n }\n\n if (jsdocUtils.exemptSpeciaMethods(\n jsdoc, node, context, ruleConfig.meta.schema,\n )) {\n return true;\n }\n\n const exemptedBy = context.options[0]?.exemptedBy ?? [\n 'inheritDoc',\n ...mode === 'closure' ? [] : [\n 'inheritdoc',\n ],\n ];\n if (exemptedBy.length && utils.getPresentTags(exemptedBy).length) {\n return true;\n }\n\n return false;\n };\n\n for (const method of [\n 'tagMightHaveNamePosition',\n 'tagMightHaveTypePosition',\n ]) {\n utils[method] = (tagName, otherModeMaps) => {\n const result = jsdocUtils[method](tagName);\n if (result) {\n return true;\n }\n\n if (!otherModeMaps) {\n return false;\n }\n\n const otherResult = otherModeMaps.some((otherModeMap) => {\n return jsdocUtils[method](tagName, otherModeMap);\n });\n\n return otherResult ? {\n otherMode: true,\n } : false;\n };\n }\n\n for (const method of [\n 'tagMustHaveNamePosition',\n 'tagMustHaveTypePosition',\n 'tagMissingRequiredTypeOrNamepath',\n ]) {\n utils[method] = (tagName, otherModeMaps) => {\n const result = jsdocUtils[method](tagName);\n if (!result) {\n return false;\n }\n\n // if (!otherModeMaps) { return true; }\n\n const otherResult = otherModeMaps.every((otherModeMap) => {\n return jsdocUtils[method](tagName, otherModeMap);\n });\n\n return otherResult ? true : {\n otherMode: false,\n };\n };\n }\n\n for (const method of [\n 'isNamepathDefiningTag',\n 'tagMightHaveNamepath',\n ]) {\n utils[method] = (tagName) => {\n return jsdocUtils[method](tagName);\n };\n }\n\n utils.getTagStructureForMode = (mde) => {\n return jsdocUtils.getTagStructureForMode(mde, settings.structuredTags);\n };\n\n utils.mayBeUndefinedTypeTag = (tag) => {\n return jsdocUtils.mayBeUndefinedTypeTag(tag, settings.mode);\n };\n\n utils.hasValueOrExecutorHasNonEmptyResolveValue = (anyPromiseAsReturn, allBranches) => {\n return jsdocUtils.hasValueOrExecutorHasNonEmptyResolveValue(node, anyPromiseAsReturn, allBranches);\n };\n\n utils.hasYieldValue = () => {\n if ([\n 'ExportNamedDeclaration', 'ExportDefaultDeclaration',\n ].includes(node.type)) {\n return jsdocUtils.hasYieldValue(node.declaration);\n }\n\n return jsdocUtils.hasYieldValue(node);\n };\n\n utils.hasYieldReturnValue = () => {\n return jsdocUtils.hasYieldValue(node, true);\n };\n\n utils.hasThrowValue = () => {\n return jsdocUtils.hasThrowValue(node);\n };\n\n utils.isAsync = () => {\n return node.async;\n };\n\n utils.getTags = (tagName) => {\n return utils.filterTags((item) => {\n return item.tag === tagName;\n });\n };\n\n utils.getPresentTags = (tagList) => {\n return utils.filterTags((tag) => {\n return tagList.includes(tag.tag);\n });\n };\n\n utils.filterTags = (filter) => {\n return jsdocUtils.filterTags(jsdoc.tags, filter);\n };\n\n utils.getTagsByType = (tags) => {\n return jsdocUtils.getTagsByType(context, mode, tags, tagNamePreference);\n };\n\n utils.hasOptionTag = (tagName) => {\n const {\n tags,\n } = context.options[0] ?? {};\n\n return Boolean(tags && tags.includes(tagName));\n };\n\n utils.getClassNode = () => {\n return [\n ...ancestors, node,\n ].reverse().find((parent) => {\n return parent && [\n 'ClassDeclaration', 'ClassExpression',\n ].includes(parent.type);\n }) || null;\n };\n\n utils.getClassJsdoc = () => {\n const classNode = utils.getClassNode();\n\n if (!classNode) {\n return null;\n }\n\n const classJsdocNode = getJSDocComment(sourceCode, classNode, {\n maxLines,\n minLines,\n });\n\n if (classJsdocNode) {\n return parseComment(classJsdocNode, '');\n }\n\n return null;\n };\n\n utils.classHasTag = (tagName) => {\n const classJsdoc = utils.getClassJsdoc();\n\n return Boolean(classJsdoc) && jsdocUtils.hasTag(classJsdoc, tagName);\n };\n\n utils.forEachPreferredTag = (tagName, arrayHandler, skipReportingBlockedTag = false) => {\n const targetTagName = utils.getPreferredTagName({\n skipReportingBlockedTag,\n tagName,\n });\n if (!targetTagName ||\n skipReportingBlockedTag && targetTagName && typeof targetTagName === 'object'\n ) {\n return;\n }\n\n const matchingJsdocTags = jsdoc.tags.filter(({\n tag,\n }) => {\n return tag === targetTagName;\n });\n\n for (const matchingJsdocTag of matchingJsdocTags) {\n arrayHandler(matchingJsdocTag, targetTagName);\n }\n };\n\n return utils;\n};\n\nconst getSettings = (context) => {\n /* eslint-disable canonical/sort-keys */\n const settings = {\n // All rules\n ignorePrivate: Boolean(context.settings.jsdoc?.ignorePrivate),\n ignoreInternal: Boolean(context.settings.jsdoc?.ignoreInternal),\n maxLines: Number(context.settings.jsdoc?.maxLines ?? 1),\n minLines: Number(context.settings.jsdoc?.minLines ?? 0),\n\n // `check-tag-names` and many returns/param rules\n tagNamePreference: context.settings.jsdoc?.tagNamePreference ?? {},\n\n // `check-types` and `no-undefined-types`\n preferredTypes: context.settings.jsdoc?.preferredTypes ?? {},\n\n // `check-types`, `no-undefined-types`, `valid-types`\n structuredTags: context.settings.jsdoc?.structuredTags ?? {},\n\n // `require-param`, `require-description`, `require-example`,\n // `require-returns`, `require-throw`, `require-yields`\n overrideReplacesDocs: context.settings.jsdoc?.overrideReplacesDocs,\n ignoreReplacesDocs: context.settings.jsdoc?.ignoreReplacesDocs,\n implementsReplacesDocs: context.settings.jsdoc?.implementsReplacesDocs,\n augmentsExtendsReplacesDocs: context.settings.jsdoc?.augmentsExtendsReplacesDocs,\n\n // `require-param-type`, `require-param-description`\n exemptDestructuredRootsFromChecks: context.settings.jsdoc?.exemptDestructuredRootsFromChecks,\n\n // Many rules, e.g., `check-tag-names`\n mode: context.settings.jsdoc?.mode ?? 'typescript',\n\n // Many rules\n contexts: context.settings.jsdoc?.contexts,\n };\n /* eslint-enable canonical/sort-keys */\n\n jsdocUtils.setTagStructure(settings.mode);\n try {\n jsdocUtils.overrideTagStructure(settings.structuredTags);\n } catch (error) {\n context.report({\n loc: {\n start: {\n column: 1,\n line: 1,\n },\n },\n message: error.message,\n });\n\n return false;\n }\n\n return settings;\n};\n\n/**\n * Create the report function\n *\n * @param {object} context\n * @param {object} commentNode\n */\nconst makeReport = (context, commentNode) => {\n const report = (message, fix = null, jsdocLoc = null, data = null) => {\n let loc;\n\n if (jsdocLoc) {\n if (!('line' in jsdocLoc)) {\n jsdocLoc.line = jsdocLoc.source[0].number;\n }\n\n const lineNumber = commentNode.loc.start.line + jsdocLoc.line;\n\n loc = {\n end: {\n column: 0,\n line: lineNumber,\n },\n start: {\n column: 0,\n line: lineNumber,\n },\n };\n\n // Todo: Remove ignore once `check-examples` can be restored for ESLint 8+\n // istanbul ignore if\n if (jsdocLoc.column) {\n const colNumber = commentNode.loc.start.column + jsdocLoc.column;\n\n loc.end.column = colNumber;\n loc.start.column = colNumber;\n }\n }\n\n context.report({\n data,\n fix,\n loc,\n message,\n node: commentNode,\n });\n };\n\n return report;\n};\n\n/* eslint-disable jsdoc/no-undefined-types -- canonical still using an older version where not defined */\n/**\n * @typedef {ReturnType<typeof getUtils>} Utils\n * @typedef {ReturnType<typeof getSettings>} Settings\n * @typedef {(\n * arg: {\n * context: object,\n * sourceCode: object,\n * indent: string,\n * jsdoc: object,\n * jsdocNode: object,\n * node: Node | null,\n * report: ReturnType<typeof makeReport>,\n * settings: Settings,\n * utils: Utils,\n * }\n * ) => any } JsdocVisitor\n */\n/* eslint-enable jsdoc/no-undefined-types -- canonical still using an older version where not defined */\n\nconst iterate = (\n info,\n indent, jsdoc,\n ruleConfig, context, lines, jsdocNode, node, settings,\n sourceCode, iterator, state, iteratingAll,\n) => {\n const report = makeReport(context, jsdocNode);\n\n const utils = getUtils(\n node,\n jsdoc,\n jsdocNode,\n settings,\n report,\n context,\n iteratingAll,\n ruleConfig,\n indent,\n );\n\n if (\n !ruleConfig.checkInternal && settings.ignoreInternal &&\n utils.hasTag('internal')\n ) {\n return;\n }\n\n if (\n !ruleConfig.checkPrivate && settings.ignorePrivate &&\n (\n utils.hasTag('private') ||\n jsdoc.tags\n .filter(({\n tag,\n }) => {\n return tag === 'access';\n })\n .some(({\n description,\n }) => {\n return description === 'private';\n })\n )\n ) {\n return;\n }\n\n iterator({\n context,\n globalState,\n indent,\n info,\n iteratingAll,\n jsdoc,\n jsdocNode,\n node,\n report,\n settings,\n sourceCode,\n state,\n utils,\n });\n};\n\nconst getIndentAndJSDoc = function (lines, jsdocNode) {\n const sourceLine = lines[jsdocNode.loc.start.line - 1];\n const indnt = sourceLine.charAt(0).repeat(jsdocNode.loc.start.column);\n const jsdc = parseComment(jsdocNode, '');\n\n return [\n indnt, jsdc,\n ];\n};\n\n/**\n *\n * @typedef {{node: Node, state: StateObject}} NonCommentArgs\n */\n\n/**\n * Our internal dynamic set of utilities.\n *\n * @todo Document\n * @typedef {any} Utils\n */\n\n/**\n * @typedef {object} RuleConfig\n * @property {EslintRuleMeta} meta ESLint rule meta\n * @property {import('./jsdocUtils').DefaultContexts} [contextDefaults] Any default contexts\n * @property {true} [contextSelected] Whether to force a `contexts` check\n * @property {true} [iterateAllJsdocs] Whether to iterate all JSDoc blocks by default\n * regardless of context\n * @property {(context, state: StateObject, utils: Utils) => void} [exit] Handler to be executed\n * upon exiting iteration of program AST\n * @property {(NonCommentArgs) => void} [nonComment] Handler to be executed if rule wishes\n * to be supplied nodes without comments\n */\n\n/**\n * Create an eslint rule that iterates over all JSDocs, regardless of whether\n * they are attached to a function-like node.\n *\n * @param {JsdocVisitor} iterator\n * @param {RuleConfig} ruleConfig The rule's configuration\n * @param contexts The `contexts` containing relevant `comment` info.\n * @param {boolean} additiveCommentContexts If true, will have a separate\n * iteration for each matching comment context. Otherwise, will iterate\n * once if there is a single matching comment context.\n */\nconst iterateAllJsdocs = (iterator, ruleConfig, contexts, additiveCommentContexts) => {\n const trackedJsdocs = new Set();\n\n let handler;\n let settings;\n const callIterator = (context, node, jsdocNodes, state, lastCall) => {\n const sourceCode = context.getSourceCode();\n const {\n lines,\n } = sourceCode;\n\n const utils = getBasicUtils(context, settings);\n for (const jsdocNode of jsdocNodes) {\n if (!(/^\\/\\*\\*\\s/u).test(sourceCode.getText(jsdocNode))) {\n continue;\n }\n\n const [\n indent,\n jsdoc,\n ] = getIndentAndJSDoc(\n lines, jsdocNode,\n );\n\n if (additiveCommentContexts) {\n for (const [\n idx,\n {\n comment,\n },\n ] of contexts.entries()) {\n if (comment && handler(comment, jsdoc) === false) {\n continue;\n }\n\n iterate(\n {\n comment,\n lastIndex: idx,\n selector: node?.type,\n },\n indent,\n jsdoc,\n ruleConfig,\n context,\n lines,\n jsdocNode,\n node,\n settings,\n sourceCode,\n iterator,\n state,\n true,\n );\n }\n\n continue;\n }\n\n let lastComment;\n let lastIndex;\n // eslint-disable-next-line no-loop-func\n if (contexts && contexts.every(({\n comment,\n }, idx) => {\n lastComment = comment;\n lastIndex = idx;\n\n return comment && handler(comment, jsdoc) === false;\n })) {\n continue;\n }\n\n iterate(\n lastComment ? {\n comment: lastComment,\n lastIndex,\n selector: node?.type,\n } : {\n lastIndex,\n selector: node?.type,\n },\n indent,\n jsdoc,\n ruleConfig,\n context,\n lines,\n jsdocNode,\n node,\n settings,\n sourceCode,\n iterator,\n state,\n true,\n );\n }\n\n if (lastCall && ruleConfig.exit) {\n ruleConfig.exit({\n context,\n settings,\n state,\n utils,\n });\n }\n };\n\n return {\n create (context) {\n const sourceCode = context.getSourceCode();\n settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n if (contexts) {\n handler = commentHandler(settings);\n }\n\n const state = {};\n\n return {\n '*:not(Program)' (node) {\n const commentNode = getJSDocComment(sourceCode, node, settings);\n if (!ruleConfig.noTracking && trackedJsdocs.has(commentNode)) {\n return;\n }\n\n if (!commentNode) {\n if (ruleConfig.nonComment) {\n ruleConfig.nonComment({\n node,\n state,\n });\n }\n\n return;\n }\n\n trackedJsdocs.add(commentNode);\n callIterator(context, node, [\n commentNode,\n ], state);\n },\n 'Program:exit' () {\n const allComments = sourceCode.getAllComments();\n const untrackedJSdoc = allComments.filter((node) => {\n return !trackedJsdocs.has(node);\n });\n\n callIterator(context, null, untrackedJSdoc, state, true);\n },\n };\n },\n meta: ruleConfig.meta,\n };\n};\n\n/**\n * Create an eslint rule that iterates over all JSDocs, regardless of whether\n * they are attached to a function-like node.\n *\n * @param {JsdocVisitor} iterator\n * @param {RuleConfig} ruleConfig\n */\nconst checkFile = (iterator, ruleConfig) => {\n return {\n create (context) {\n const sourceCode = context.getSourceCode();\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n return {\n 'Program:exit' () {\n const allComments = sourceCode.getAllComments();\n const {\n lines,\n } = sourceCode;\n const utils = getBasicUtils(context, settings);\n\n iterator({\n allComments,\n context,\n lines,\n makeReport,\n settings,\n sourceCode,\n utils,\n });\n },\n };\n },\n meta: ruleConfig.meta,\n };\n};\n\nexport {\n getSettings,\n // eslint-disable-next-line unicorn/prefer-export-from -- Avoid experimental parser\n parseComment,\n};\n\n/**\n * @param {JsdocVisitor} iterator\n * @param {RuleConfig} ruleConfig\n */\nexport default function iterateJsdoc (iterator, ruleConfig) {\n const metaType = ruleConfig?.meta?.type;\n if (!metaType || ![\n 'problem', 'suggestion', 'layout',\n ].includes(metaType)) {\n throw new TypeError('Rule must include `meta.type` option (with value \"problem\", \"suggestion\", or \"layout\")');\n }\n\n if (typeof iterator !== 'function') {\n throw new TypeError('The iterator argument must be a function.');\n }\n\n if (ruleConfig.checkFile) {\n return checkFile(iterator, ruleConfig);\n }\n\n if (ruleConfig.iterateAllJsdocs) {\n return iterateAllJsdocs(iterator, ruleConfig);\n }\n\n return {\n /**\n * The entrypoint for the JSDoc rule.\n *\n * @param {*} context\n * a reference to the context which hold all important information\n * like settings and the sourcecode to check.\n * @returns {object}\n * a list with parser callback function.\n */\n create (context) {\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n let contexts;\n if (ruleConfig.contextDefaults || ruleConfig.contextSelected || ruleConfig.matchContext) {\n contexts = ruleConfig.matchContext && context.options[0]?.match ?\n context.options[0].match :\n jsdocUtils.enforcedContexts(context, ruleConfig.contextDefaults, ruleConfig.nonGlobalSettings ? {} : settings);\n\n if (contexts) {\n contexts = contexts.map((obj) => {\n if (typeof obj === 'object' && !obj.context) {\n return {\n ...obj,\n context: 'any',\n };\n }\n\n return obj;\n });\n }\n\n const hasPlainAny = contexts?.includes('any');\n const hasObjectAny = !hasPlainAny && contexts?.find((ctxt) => {\n return ctxt?.context === 'any';\n });\n if (hasPlainAny || hasObjectAny) {\n return iterateAllJsdocs(\n iterator, ruleConfig, hasObjectAny ? contexts : null, ruleConfig.matchContext,\n ).create(context);\n }\n }\n\n const sourceCode = context.getSourceCode();\n const {\n lines,\n } = sourceCode;\n\n const state = {};\n\n const checkJsdoc = (info, handler, node) => {\n const jsdocNode = getJSDocComment(sourceCode, node, settings);\n if (!jsdocNode) {\n return;\n }\n\n const [\n indent,\n jsdoc,\n ] = getIndentAndJSDoc(\n lines, jsdocNode,\n );\n\n if (\n // Note, `handler` should already be bound in its first argument\n // with these only to be called after the value of\n // `comment`\n handler && handler(jsdoc) === false\n ) {\n return;\n }\n\n iterate(\n info, indent, jsdoc, ruleConfig, context, lines, jsdocNode, node, settings, sourceCode, iterator, state,\n );\n };\n\n let contextObject = {};\n\n if (contexts && (\n ruleConfig.contextDefaults || ruleConfig.contextSelected || ruleConfig.matchContext\n )) {\n contextObject = jsdocUtils.getContextObject(\n contexts,\n checkJsdoc,\n commentHandler(settings),\n );\n } else {\n for (const prop of [\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n 'TSDeclareFunction',\n ]) {\n contextObject[prop] = checkJsdoc.bind(null, {\n selector: prop,\n }, null);\n }\n }\n\n if (ruleConfig.exit) {\n contextObject['Program:exit'] = () => {\n ruleConfig.exit({\n context,\n settings,\n state,\n });\n };\n }\n\n return contextObject;\n },\n meta: ruleConfig.meta,\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"iterateJsdoc.js","names":["_jsdoccomment","require","_commentParser","_jsdocUtils","_interopRequireDefault","obj","__esModule","default","rewireSpecs","seedTokens","util","globalState","Map","getBasicUtils","context","tagNamePreference","mode","utils","reportSettings","message","report","loc","start","column","line","parseClosureTemplateTag","tag","jsdocUtils","pathDoesNotBeginWith","getPreferredTagNameObject","tagName","ret","getPreferredTagName","isObject","replacement","blocked","getUtils","node","jsdoc","jsdocNode","settings","iteratingAll","ruleConfig","indent","ancestors","getAncestors","sourceCode","getSourceCode","overrideReplacesDocs","ignoreReplacesDocs","implementsReplacesDocs","augmentsExtendsReplacesDocs","maxLines","minLines","isIteratingFunction","includes","type","isVirtualFunction","hasATag","stringify","tagBlock","specRewire","block","commentStringify","reportJSDoc","msg","handler","data","fixer","text","getText","lastLineBreakPos","slice","range","search","removeRange","test","charAt","replaceText","getRegexFromString","str","requiredFlags","getTagDescription","tg","returnArray","descriptions","source","some","tokens","end","lineEnd","postDelimiter","postTag","name","description","desc","push","join","setTagDescription","matcher","setter","finalIdx","idx","getDescription","lastDescriptionLine","tagsBegun","length","setBlockDescription","descLines","startIdx","endIdx","info","delimiter","undefined","splice","setDescriptionLines","changeTag","src","entries","setTag","number","removeTag","tagIndex","removeEmptyBlock","tagSourceOffset","tagSource","tags","lastIndex","firstNumber","tagIdx","sourceIndex","findIndex","srcNumber","spliceCount","ending","spliceIdx","item","addTag","targetTagName","_jsdoc$tags","_jsdoc$tags$source$","getFirstLine","firstLine","emptyTokens","prop","addLine","_jsdoc$source","addLines","numLines","makeLine","makeLines","Array","from","lines","makeMultiline","postName","postType","trimEnd","flattenRoots","params","getFunctionParameterNames","useDefaultObjectProperties","hasParams","isGenerator","generator","value","declaration","isConstructor","getJsdocTagsDeep","skipReportingBlockedTag","allowObjectReturn","defaultMessage","hasTag","getTags","isValidTag","definedTags","names","comparePaths","dropPathSegmentQuotes","avoidDocs","_context$options$","classHasTag","exemptSpeciaMethods","meta","schema","exemptedBy","options","getPresentTags","method","otherModeMaps","result","otherResult","otherModeMap","otherMode","every","getTagStructureForMode","mde","structuredTags","mayBeUndefinedTypeTag","hasValueOrExecutorHasNonEmptyResolveValue","anyPromiseAsReturn","allBranches","hasYieldValue","hasYieldReturnValue","hasThrowValue","isAsync","async","filterTags","tagList","filter","getTagsByType","hasOptionTag","Boolean","getClassNode","reverse","find","parent","getClassJsdoc","classNode","classJsdocNode","getJSDocComment","parseComment","classJsdoc","forEachPreferredTag","arrayHandler","matchingJsdocTags","matchingJsdocTag","getSettings","_context$settings$jsd","_context$settings$jsd2","_context$settings$jsd3","_context$settings$jsd4","_context$settings$jsd5","_context$settings$jsd6","_context$settings$jsd7","_context$settings$jsd8","_context$settings$jsd9","_context$settings$jsd10","_context$settings$jsd11","_context$settings$jsd12","_context$settings$jsd13","_context$settings$jsd14","ignorePrivate","ignoreInternal","Number","preferredTypes","exemptDestructuredRootsFromChecks","contexts","setTagStructure","overrideTagStructure","error","exports","makeReport","commentNode","fix","jsdocLoc","lineNumber","colNumber","iterate","iterator","state","checkInternal","checkPrivate","getIndentAndJSDoc","sourceLine","indnt","repeat","jsdc","iterateAllJsdocs","additiveCommentContexts","trackedJsdocs","Set","callIterator","jsdocNodes","lastCall","comment","selector","lastComment","exit","create","commentHandler","*:not(Program)","noTracking","has","nonComment","add","Program:exit","allComments","getAllComments","untrackedJSdoc","checkFile","iterateJsdoc","_ruleConfig$meta","metaType","TypeError","contextDefaults","contextSelected","matchContext","_context$options$2","_contexts","_contexts2","match","enforcedContexts","nonGlobalSettings","map","hasPlainAny","hasObjectAny","ctxt","checkJsdoc","contextObject","getContextObject","bind"],"sources":["../src/iterateJsdoc.js"],"sourcesContent":["import {\n getJSDocComment,\n commentHandler,\n parseComment,\n} from '@es-joy/jsdoccomment';\nimport {\n stringify as commentStringify,\n util,\n} from 'comment-parser';\nimport jsdocUtils from './jsdocUtils';\n\nconst {\n rewireSpecs,\n seedTokens,\n} = util;\n\n// todo: Change these `any` types once importing types properly.\n\n/**\n * Should use ESLint rule's typing.\n *\n * @typedef {any} EslintRuleMeta\n */\n\n/**\n * A plain object for tracking state as needed by rules across iterations.\n *\n * @typedef {any} StateObject\n */\n\n/**\n * The Node AST as supplied by the parser.\n *\n * @typedef {any} Node\n */\n\n/*\nconst {\n align as commentAlign,\n flow: commentFlow,\n indent: commentIndent,\n} = transforms;\n*/\n\nconst globalState = new Map();\n\nconst getBasicUtils = (context, {\n tagNamePreference,\n mode,\n}) => {\n const utils = {};\n utils.reportSettings = (message) => {\n context.report({\n loc: {\n start: {\n column: 1,\n line: 1,\n },\n },\n message,\n });\n };\n\n utils.parseClosureTemplateTag = (tag) => {\n return jsdocUtils.parseClosureTemplateTag(tag);\n };\n\n utils.pathDoesNotBeginWith = jsdocUtils.pathDoesNotBeginWith;\n\n utils.getPreferredTagNameObject = ({\n tagName,\n }) => {\n const ret = jsdocUtils.getPreferredTagName(context, mode, tagName, tagNamePreference);\n const isObject = ret && typeof ret === 'object';\n if (ret === false || isObject && !ret.replacement) {\n return {\n blocked: true,\n tagName,\n };\n }\n\n return ret;\n };\n\n return utils;\n};\n\nconst getUtils = (\n node,\n jsdoc,\n jsdocNode,\n settings,\n report,\n context,\n iteratingAll,\n ruleConfig,\n indent,\n) => {\n const ancestors = context.getAncestors();\n const sourceCode = context.getSourceCode();\n\n const utils = getBasicUtils(context, settings);\n\n const {\n tagNamePreference,\n overrideReplacesDocs,\n ignoreReplacesDocs,\n implementsReplacesDocs,\n augmentsExtendsReplacesDocs,\n maxLines,\n minLines,\n mode,\n } = settings;\n\n utils.isIteratingFunction = () => {\n return !iteratingAll || [\n 'MethodDefinition',\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n ].includes(node && node.type);\n };\n\n utils.isVirtualFunction = () => {\n return iteratingAll && utils.hasATag([\n 'callback', 'function', 'func', 'method',\n ]);\n };\n\n utils.stringify = (tagBlock, specRewire) => {\n let block;\n if (specRewire) {\n block = rewireSpecs(tagBlock);\n }\n\n return commentStringify(specRewire ? block : tagBlock);\n };\n\n utils.reportJSDoc = (msg, tag, handler, specRewire, data) => {\n report(msg, handler ? (fixer) => {\n handler();\n const replacement = utils.stringify(jsdoc, specRewire);\n\n if (!replacement) {\n const text = sourceCode.getText();\n const lastLineBreakPos = text.slice(\n 0, jsdocNode.range[0],\n ).search(/\\n[ \\t]*$/u);\n if (lastLineBreakPos > -1) {\n return fixer.removeRange([\n lastLineBreakPos, jsdocNode.range[1],\n ]);\n }\n\n return fixer.removeRange(\n (/\\s/u).test(text.charAt(jsdocNode.range[1])) ?\n [\n jsdocNode.range[0], jsdocNode.range[1] + 1,\n ] :\n jsdocNode.range,\n );\n }\n\n return fixer.replaceText(jsdocNode, replacement);\n } : null, tag, data);\n };\n\n utils.getRegexFromString = (str, requiredFlags) => {\n return jsdocUtils.getRegexFromString(str, requiredFlags);\n };\n\n utils.getTagDescription = (tg, returnArray) => {\n const descriptions = [];\n tg.source.some(({\n tokens: {\n end,\n lineEnd,\n postDelimiter,\n tag,\n postTag,\n name,\n type,\n description,\n },\n }) => {\n const desc = (\n tag && postTag ||\n !tag && !name && !type && postDelimiter || ''\n\n // Remove space\n ).slice(1) +\n (description || '') + (lineEnd || '');\n\n if (end) {\n if (desc) {\n descriptions.push(desc);\n }\n\n return true;\n }\n\n descriptions.push(desc);\n\n return false;\n });\n\n return returnArray ? descriptions : descriptions.join('\\n');\n };\n\n utils.setTagDescription = (tg, matcher, setter) => {\n let finalIdx = 0;\n tg.source.some(({\n tokens: {\n description,\n },\n }, idx) => {\n if (description && matcher.test(description)) {\n tg.source[idx].tokens.description = setter(description);\n finalIdx = idx;\n return true;\n }\n\n return false;\n });\n\n return finalIdx;\n };\n\n utils.getDescription = () => {\n const descriptions = [];\n let lastDescriptionLine = 0;\n let tagsBegun = false;\n jsdoc.source.some(({\n tokens: {\n description,\n tag,\n end,\n },\n }, idx) => {\n if (tag) {\n tagsBegun = true;\n }\n\n if (idx && (tag || end)) {\n lastDescriptionLine = idx - 1;\n if (!tagsBegun && description) {\n descriptions.push(description);\n }\n\n return true;\n }\n\n if (!tagsBegun && (idx || description)) {\n descriptions.push(description || (descriptions.length ? '' : '\\n'));\n }\n\n return false;\n });\n\n return {\n description: descriptions.join('\\n'),\n descriptions,\n lastDescriptionLine,\n };\n };\n\n utils.setBlockDescription = (setter) => {\n const descLines = [];\n let startIdx;\n let endIdx;\n let info;\n\n jsdoc.source.some(({\n tokens: {\n description,\n start,\n delimiter,\n postDelimiter,\n tag,\n end,\n },\n }, idx) => {\n if (delimiter === '/**') {\n return false;\n }\n\n if (startIdx === undefined) {\n startIdx = idx;\n info = {\n delimiter,\n postDelimiter,\n start,\n };\n }\n\n if (tag || end) {\n endIdx = idx;\n return true;\n }\n\n descLines.push(description);\n return false;\n });\n\n /* istanbul ignore else -- Won't be called if missing */\n if (descLines.length) {\n jsdoc.source.splice(\n startIdx, endIdx - startIdx, ...setter(info, seedTokens, descLines),\n );\n }\n };\n\n utils.setDescriptionLines = (matcher, setter) => {\n let finalIdx = 0;\n jsdoc.source.some(({\n tokens: {\n description,\n tag,\n end,\n },\n }, idx) => {\n // istanbul ignore if -- Already checked\n if (idx && (tag || end)) {\n return true;\n }\n\n if (description && matcher.test(description)) {\n jsdoc.source[idx].tokens.description = setter(description);\n finalIdx = idx;\n return true;\n }\n\n return false;\n });\n\n return finalIdx;\n };\n\n utils.changeTag = (tag, ...tokens) => {\n for (const [\n idx,\n src,\n ] of tag.source.entries()) {\n src.tokens = {\n ...src.tokens,\n ...tokens[idx],\n };\n }\n };\n\n utils.setTag = (tag, tokens) => {\n tag.source = [\n {\n // Or tag.source[0].number?\n number: tag.line,\n tokens: seedTokens({\n delimiter: '*',\n postDelimiter: ' ',\n start: indent + ' ',\n tag: '@' + tag.tag,\n ...tokens,\n }),\n },\n ];\n };\n\n utils.removeTag = (tagIndex, {\n removeEmptyBlock = false,\n tagSourceOffset = 0,\n } = {}) => {\n const {\n source: tagSource,\n } = jsdoc.tags[tagIndex];\n let lastIndex;\n const firstNumber = jsdoc.source[0].number;\n tagSource.some(({\n number,\n }, tagIdx) => {\n const sourceIndex = jsdoc.source.findIndex(({\n number: srcNumber,\n }) => {\n return number === srcNumber;\n });\n // istanbul ignore else\n if (sourceIndex > -1) {\n let spliceCount = 1;\n tagSource.slice(tagIdx + 1).some(({\n tokens: {\n tag,\n end: ending,\n },\n }) => {\n if (!tag && !ending) {\n spliceCount++;\n\n return false;\n }\n\n return true;\n });\n\n const spliceIdx = sourceIndex + tagSourceOffset;\n\n const {\n delimiter,\n end,\n } = jsdoc.source[spliceIdx].tokens;\n\n /* istanbul ignore if -- Currently want to clear entirely if removing tags */\n if (\n spliceIdx === 0 && jsdoc.tags.length >= 2 ||\n !removeEmptyBlock && (end || delimiter === '/**')\n ) {\n const {\n tokens,\n } = jsdoc.source[spliceIdx];\n for (const item of [\n 'postDelimiter',\n 'tag',\n 'postTag',\n 'type',\n 'postType',\n 'name',\n 'postName',\n 'description',\n ]) {\n tokens[item] = '';\n }\n } else {\n jsdoc.source.splice(spliceIdx, spliceCount - tagSourceOffset + (spliceIdx ? 0 : jsdoc.source.length));\n tagSource.splice(tagIdx + tagSourceOffset, spliceCount - tagSourceOffset + (spliceIdx ? 0 : jsdoc.source.length));\n }\n\n lastIndex = sourceIndex;\n\n return true;\n }\n\n // istanbul ignore next\n return false;\n });\n for (const [\n idx,\n src,\n ] of jsdoc.source.slice(lastIndex).entries()) {\n src.number = firstNumber + lastIndex + idx;\n }\n\n // Todo: Once rewiring of tags may be fixed in comment-parser to reflect missing tags,\n // this step should be added here (so that, e.g., if accessing `jsdoc.tags`,\n // such as to add a new tag, the correct information will be available)\n };\n\n utils.addTag = (\n targetTagName,\n number = (jsdoc.tags[jsdoc.tags.length - 1]?.source[0]?.number ?? jsdoc.source.findIndex(({\n tokens: {\n tag,\n },\n }) => {\n return tag;\n }) - 1) + 1,\n tokens = {},\n ) => {\n jsdoc.source.splice(number, 0, {\n number,\n source: '',\n tokens: seedTokens({\n delimiter: '*',\n postDelimiter: ' ',\n start: indent + ' ',\n tag: `@${targetTagName}`,\n ...tokens,\n }),\n });\n for (const src of jsdoc.source.slice(number + 1)) {\n src.number++;\n }\n };\n\n utils.getFirstLine = () => {\n let firstLine;\n for (const {\n number,\n tokens: {\n tag,\n },\n } of jsdoc.source) {\n if (tag) {\n firstLine = number;\n break;\n }\n }\n\n return firstLine;\n };\n\n utils.seedTokens = seedTokens;\n\n utils.emptyTokens = (tokens) => {\n for (const prop of [\n 'start',\n 'postDelimiter',\n 'tag',\n 'type',\n 'postType',\n 'postTag',\n 'name',\n 'postName',\n 'description',\n 'end',\n 'lineEnd',\n ]) {\n tokens[prop] = '';\n }\n };\n\n utils.addLine = (sourceIndex, tokens) => {\n const number = (jsdoc.source[sourceIndex - 1]?.number || 0) + 1;\n jsdoc.source.splice(sourceIndex, 0, {\n number,\n source: '',\n tokens: seedTokens(tokens),\n });\n\n for (const src of jsdoc.source.slice(number + 1)) {\n src.number++;\n }\n // If necessary, we can rewire the tags (misnamed method)\n // rewireSource(jsdoc);\n };\n\n utils.addLines = (tagIndex, tagSourceOffset, numLines) => {\n const {\n source: tagSource,\n } = jsdoc.tags[tagIndex];\n let lastIndex;\n const firstNumber = jsdoc.source[0].number;\n tagSource.some(({\n number,\n }) => {\n const makeLine = () => {\n return {\n number,\n source: '',\n tokens: seedTokens({\n delimiter: '*',\n start: indent + ' ',\n }),\n };\n };\n\n const makeLines = () => {\n return Array.from({\n length: numLines,\n }, makeLine);\n };\n\n const sourceIndex = jsdoc.source.findIndex(({\n number: srcNumber,\n tokens: {\n end,\n },\n }) => {\n return number === srcNumber && !end;\n });\n // istanbul ignore else\n if (sourceIndex > -1) {\n const lines = makeLines();\n jsdoc.source.splice(sourceIndex + tagSourceOffset, 0, ...lines);\n\n // tagSource.splice(tagIdx + 1, 0, ...makeLines());\n lastIndex = sourceIndex;\n\n return true;\n }\n\n // istanbul ignore next\n return false;\n });\n for (const [\n idx,\n src,\n ] of jsdoc.source.slice(lastIndex).entries()) {\n src.number = firstNumber + lastIndex + idx;\n }\n };\n\n utils.makeMultiline = () => {\n const {\n source: [\n {\n tokens,\n },\n ],\n } = jsdoc;\n const {\n postDelimiter,\n description,\n lineEnd,\n tag,\n name,\n type,\n } = tokens;\n\n let {\n tokens: {\n postName,\n postTag,\n postType,\n },\n } = jsdoc.source[0];\n\n // Strip trailing leftovers from single line ending\n if (!description) {\n if (postName) {\n postName = '';\n } else if (postType) {\n postType = '';\n } else /* istanbul ignore else -- `comment-parser` prevents empty blocks currently per https://github.com/syavorsky/comment-parser/issues/128 */ if (postTag) {\n postTag = '';\n }\n }\n\n utils.emptyTokens(tokens);\n\n utils.addLine(1, {\n delimiter: '*',\n\n // If a description were present, it may have whitespace attached\n // due to being at the end of the single line\n description: description.trimEnd(),\n name,\n postDelimiter,\n postName,\n postTag,\n postType,\n start: indent + ' ',\n tag,\n type,\n });\n utils.addLine(2, {\n end: '*/',\n lineEnd,\n start: indent + ' ',\n });\n };\n\n utils.flattenRoots = (params) => {\n return jsdocUtils.flattenRoots(params);\n };\n\n utils.getFunctionParameterNames = (useDefaultObjectProperties) => {\n return jsdocUtils.getFunctionParameterNames(node, useDefaultObjectProperties);\n };\n\n utils.hasParams = () => {\n return jsdocUtils.hasParams(node);\n };\n\n utils.isGenerator = () => {\n return node && (\n node.generator ||\n node.type === 'MethodDefinition' && node.value.generator ||\n [\n 'ExportNamedDeclaration', 'ExportDefaultDeclaration',\n ].includes(node.type) &&\n node.declaration.generator\n );\n };\n\n utils.isConstructor = () => {\n return jsdocUtils.isConstructor(node);\n };\n\n utils.getJsdocTagsDeep = (tagName) => {\n const name = utils.getPreferredTagName({\n tagName,\n });\n if (!name) {\n return false;\n }\n\n return jsdocUtils.getJsdocTagsDeep(jsdoc, name);\n };\n\n utils.getPreferredTagName = ({\n tagName,\n skipReportingBlockedTag = false,\n allowObjectReturn = false,\n defaultMessage = `Unexpected tag \\`@${tagName}\\``,\n }) => {\n const ret = jsdocUtils.getPreferredTagName(context, mode, tagName, tagNamePreference);\n const isObject = ret && typeof ret === 'object';\n if (utils.hasTag(tagName) && (ret === false || isObject && !ret.replacement)) {\n if (skipReportingBlockedTag) {\n return {\n blocked: true,\n tagName,\n };\n }\n\n const message = isObject && ret.message || defaultMessage;\n report(message, null, utils.getTags(tagName)[0]);\n\n return false;\n }\n\n return isObject && !allowObjectReturn ? ret.replacement : ret;\n };\n\n utils.isValidTag = (name, definedTags) => {\n return jsdocUtils.isValidTag(context, mode, name, definedTags);\n };\n\n utils.hasATag = (names) => {\n return jsdocUtils.hasATag(jsdoc, names);\n };\n\n utils.hasTag = (name) => {\n return jsdocUtils.hasTag(jsdoc, name);\n };\n\n utils.comparePaths = (name) => {\n return jsdocUtils.comparePaths(name);\n };\n\n utils.dropPathSegmentQuotes = (name) => {\n return jsdocUtils.dropPathSegmentQuotes(name);\n };\n\n utils.avoidDocs = () => {\n if (\n ignoreReplacesDocs !== false &&\n (utils.hasTag('ignore') || utils.classHasTag('ignore')) ||\n overrideReplacesDocs !== false &&\n (utils.hasTag('override') || utils.classHasTag('override')) ||\n implementsReplacesDocs !== false &&\n (utils.hasTag('implements') || utils.classHasTag('implements')) ||\n\n augmentsExtendsReplacesDocs &&\n (utils.hasATag([\n 'augments', 'extends',\n ]) ||\n utils.classHasTag('augments') ||\n utils.classHasTag('extends'))) {\n return true;\n }\n\n if (jsdocUtils.exemptSpeciaMethods(\n jsdoc, node, context, ruleConfig.meta.schema,\n )) {\n return true;\n }\n\n const exemptedBy = context.options[0]?.exemptedBy ?? [\n 'inheritDoc',\n ...mode === 'closure' ? [] : [\n 'inheritdoc',\n ],\n ];\n if (exemptedBy.length && utils.getPresentTags(exemptedBy).length) {\n return true;\n }\n\n return false;\n };\n\n for (const method of [\n 'tagMightHaveNamePosition',\n 'tagMightHaveTypePosition',\n ]) {\n utils[method] = (tagName, otherModeMaps) => {\n const result = jsdocUtils[method](tagName);\n if (result) {\n return true;\n }\n\n if (!otherModeMaps) {\n return false;\n }\n\n const otherResult = otherModeMaps.some((otherModeMap) => {\n return jsdocUtils[method](tagName, otherModeMap);\n });\n\n return otherResult ? {\n otherMode: true,\n } : false;\n };\n }\n\n for (const method of [\n 'tagMustHaveNamePosition',\n 'tagMustHaveTypePosition',\n 'tagMissingRequiredTypeOrNamepath',\n ]) {\n utils[method] = (tagName, otherModeMaps) => {\n const result = jsdocUtils[method](tagName);\n if (!result) {\n return false;\n }\n\n // if (!otherModeMaps) { return true; }\n\n const otherResult = otherModeMaps.every((otherModeMap) => {\n return jsdocUtils[method](tagName, otherModeMap);\n });\n\n return otherResult ? true : {\n otherMode: false,\n };\n };\n }\n\n for (const method of [\n 'isNamepathDefiningTag',\n 'tagMightHaveNamepath',\n ]) {\n utils[method] = (tagName) => {\n return jsdocUtils[method](tagName);\n };\n }\n\n utils.getTagStructureForMode = (mde) => {\n return jsdocUtils.getTagStructureForMode(mde, settings.structuredTags);\n };\n\n utils.mayBeUndefinedTypeTag = (tag) => {\n return jsdocUtils.mayBeUndefinedTypeTag(tag, settings.mode);\n };\n\n utils.hasValueOrExecutorHasNonEmptyResolveValue = (anyPromiseAsReturn, allBranches) => {\n return jsdocUtils.hasValueOrExecutorHasNonEmptyResolveValue(node, anyPromiseAsReturn, allBranches);\n };\n\n utils.hasYieldValue = () => {\n if ([\n 'ExportNamedDeclaration', 'ExportDefaultDeclaration',\n ].includes(node.type)) {\n return jsdocUtils.hasYieldValue(node.declaration);\n }\n\n return jsdocUtils.hasYieldValue(node);\n };\n\n utils.hasYieldReturnValue = () => {\n return jsdocUtils.hasYieldValue(node, true);\n };\n\n utils.hasThrowValue = () => {\n return jsdocUtils.hasThrowValue(node);\n };\n\n utils.isAsync = () => {\n return node.async;\n };\n\n utils.getTags = (tagName) => {\n return utils.filterTags((item) => {\n return item.tag === tagName;\n });\n };\n\n utils.getPresentTags = (tagList) => {\n return utils.filterTags((tag) => {\n return tagList.includes(tag.tag);\n });\n };\n\n utils.filterTags = (filter) => {\n return jsdocUtils.filterTags(jsdoc.tags, filter);\n };\n\n utils.getTagsByType = (tags) => {\n return jsdocUtils.getTagsByType(context, mode, tags, tagNamePreference);\n };\n\n utils.hasOptionTag = (tagName) => {\n const {\n tags,\n } = context.options[0] ?? {};\n\n return Boolean(tags && tags.includes(tagName));\n };\n\n utils.getClassNode = () => {\n return [\n ...ancestors, node,\n ].reverse().find((parent) => {\n return parent && [\n 'ClassDeclaration', 'ClassExpression',\n ].includes(parent.type);\n }) || null;\n };\n\n utils.getClassJsdoc = () => {\n const classNode = utils.getClassNode();\n\n if (!classNode) {\n return null;\n }\n\n const classJsdocNode = getJSDocComment(sourceCode, classNode, {\n maxLines,\n minLines,\n });\n\n if (classJsdocNode) {\n return parseComment(classJsdocNode, '');\n }\n\n return null;\n };\n\n utils.classHasTag = (tagName) => {\n const classJsdoc = utils.getClassJsdoc();\n\n return Boolean(classJsdoc) && jsdocUtils.hasTag(classJsdoc, tagName);\n };\n\n utils.forEachPreferredTag = (tagName, arrayHandler, skipReportingBlockedTag = false) => {\n const targetTagName = utils.getPreferredTagName({\n skipReportingBlockedTag,\n tagName,\n });\n if (!targetTagName ||\n skipReportingBlockedTag && targetTagName && typeof targetTagName === 'object'\n ) {\n return;\n }\n\n const matchingJsdocTags = jsdoc.tags.filter(({\n tag,\n }) => {\n return tag === targetTagName;\n });\n\n for (const matchingJsdocTag of matchingJsdocTags) {\n arrayHandler(matchingJsdocTag, targetTagName);\n }\n };\n\n return utils;\n};\n\nconst getSettings = (context) => {\n /* eslint-disable canonical/sort-keys */\n const settings = {\n // All rules\n ignorePrivate: Boolean(context.settings.jsdoc?.ignorePrivate),\n ignoreInternal: Boolean(context.settings.jsdoc?.ignoreInternal),\n maxLines: Number(context.settings.jsdoc?.maxLines ?? 1),\n minLines: Number(context.settings.jsdoc?.minLines ?? 0),\n\n // `check-tag-names` and many returns/param rules\n tagNamePreference: context.settings.jsdoc?.tagNamePreference ?? {},\n\n // `check-types` and `no-undefined-types`\n preferredTypes: context.settings.jsdoc?.preferredTypes ?? {},\n\n // `check-types`, `no-undefined-types`, `valid-types`\n structuredTags: context.settings.jsdoc?.structuredTags ?? {},\n\n // `require-param`, `require-description`, `require-example`,\n // `require-returns`, `require-throw`, `require-yields`\n overrideReplacesDocs: context.settings.jsdoc?.overrideReplacesDocs,\n ignoreReplacesDocs: context.settings.jsdoc?.ignoreReplacesDocs,\n implementsReplacesDocs: context.settings.jsdoc?.implementsReplacesDocs,\n augmentsExtendsReplacesDocs: context.settings.jsdoc?.augmentsExtendsReplacesDocs,\n\n // `require-param-type`, `require-param-description`\n exemptDestructuredRootsFromChecks: context.settings.jsdoc?.exemptDestructuredRootsFromChecks,\n\n // Many rules, e.g., `check-tag-names`\n mode: context.settings.jsdoc?.mode ?? 'typescript',\n\n // Many rules\n contexts: context.settings.jsdoc?.contexts,\n };\n /* eslint-enable canonical/sort-keys */\n\n jsdocUtils.setTagStructure(settings.mode);\n try {\n jsdocUtils.overrideTagStructure(settings.structuredTags);\n } catch (error) {\n context.report({\n loc: {\n start: {\n column: 1,\n line: 1,\n },\n },\n message: error.message,\n });\n\n return false;\n }\n\n return settings;\n};\n\n/**\n * Create the report function\n *\n * @param {object} context\n * @param {object} commentNode\n */\nconst makeReport = (context, commentNode) => {\n const report = (message, fix = null, jsdocLoc = null, data = null) => {\n let loc;\n\n if (jsdocLoc) {\n if (!('line' in jsdocLoc)) {\n jsdocLoc.line = jsdocLoc.source[0].number;\n }\n\n const lineNumber = commentNode.loc.start.line + jsdocLoc.line;\n\n loc = {\n end: {\n column: 0,\n line: lineNumber,\n },\n start: {\n column: 0,\n line: lineNumber,\n },\n };\n\n // Todo: Remove ignore once `check-examples` can be restored for ESLint 8+\n // istanbul ignore if\n if (jsdocLoc.column) {\n const colNumber = commentNode.loc.start.column + jsdocLoc.column;\n\n loc.end.column = colNumber;\n loc.start.column = colNumber;\n }\n }\n\n context.report({\n data,\n fix,\n loc,\n message,\n node: commentNode,\n });\n };\n\n return report;\n};\n\n/* eslint-disable jsdoc/no-undefined-types -- canonical still using an older version where not defined */\n/**\n * @typedef {ReturnType<typeof getUtils>} Utils\n * @typedef {ReturnType<typeof getSettings>} Settings\n * @typedef {(\n * arg: {\n * context: object,\n * sourceCode: object,\n * indent: string,\n * jsdoc: object,\n * jsdocNode: object,\n * node: Node | null,\n * report: ReturnType<typeof makeReport>,\n * settings: Settings,\n * utils: Utils,\n * }\n * ) => any } JsdocVisitor\n */\n/* eslint-enable jsdoc/no-undefined-types -- canonical still using an older version where not defined */\n\nconst iterate = (\n info,\n indent, jsdoc,\n ruleConfig, context, lines, jsdocNode, node, settings,\n sourceCode, iterator, state, iteratingAll,\n) => {\n const report = makeReport(context, jsdocNode);\n\n const utils = getUtils(\n node,\n jsdoc,\n jsdocNode,\n settings,\n report,\n context,\n iteratingAll,\n ruleConfig,\n indent,\n );\n\n if (\n !ruleConfig.checkInternal && settings.ignoreInternal &&\n utils.hasTag('internal')\n ) {\n return;\n }\n\n if (\n !ruleConfig.checkPrivate && settings.ignorePrivate &&\n (\n utils.hasTag('private') ||\n jsdoc.tags\n .filter(({\n tag,\n }) => {\n return tag === 'access';\n })\n .some(({\n description,\n }) => {\n return description === 'private';\n })\n )\n ) {\n return;\n }\n\n iterator({\n context,\n globalState,\n indent,\n info,\n iteratingAll,\n jsdoc,\n jsdocNode,\n node,\n report,\n settings,\n sourceCode,\n state,\n utils,\n });\n};\n\nconst getIndentAndJSDoc = function (lines, jsdocNode) {\n const sourceLine = lines[jsdocNode.loc.start.line - 1];\n const indnt = sourceLine.charAt(0).repeat(jsdocNode.loc.start.column);\n const jsdc = parseComment(jsdocNode, '');\n\n return [\n indnt, jsdc,\n ];\n};\n\n/**\n *\n * @typedef {{node: Node, state: StateObject}} NonCommentArgs\n */\n\n/**\n * Our internal dynamic set of utilities.\n *\n * @todo Document\n * @typedef {any} Utils\n */\n\n/**\n * @typedef {object} RuleConfig\n * @property {EslintRuleMeta} meta ESLint rule meta\n * @property {import('./jsdocUtils').DefaultContexts} [contextDefaults] Any default contexts\n * @property {true} [contextSelected] Whether to force a `contexts` check\n * @property {true} [iterateAllJsdocs] Whether to iterate all JSDoc blocks by default\n * regardless of context\n * @property {(context, state: StateObject, utils: Utils) => void} [exit] Handler to be executed\n * upon exiting iteration of program AST\n * @property {(NonCommentArgs) => void} [nonComment] Handler to be executed if rule wishes\n * to be supplied nodes without comments\n */\n\n/**\n * Create an eslint rule that iterates over all JSDocs, regardless of whether\n * they are attached to a function-like node.\n *\n * @param {JsdocVisitor} iterator\n * @param {RuleConfig} ruleConfig The rule's configuration\n * @param contexts The `contexts` containing relevant `comment` info.\n * @param {boolean} additiveCommentContexts If true, will have a separate\n * iteration for each matching comment context. Otherwise, will iterate\n * once if there is a single matching comment context.\n */\nconst iterateAllJsdocs = (iterator, ruleConfig, contexts, additiveCommentContexts) => {\n const trackedJsdocs = new Set();\n\n let handler;\n let settings;\n const callIterator = (context, node, jsdocNodes, state, lastCall) => {\n const sourceCode = context.getSourceCode();\n const {\n lines,\n } = sourceCode;\n\n const utils = getBasicUtils(context, settings);\n for (const jsdocNode of jsdocNodes) {\n if (!(/^\\/\\*\\*\\s/u).test(sourceCode.getText(jsdocNode))) {\n continue;\n }\n\n const [\n indent,\n jsdoc,\n ] = getIndentAndJSDoc(\n lines, jsdocNode,\n );\n\n if (additiveCommentContexts) {\n for (const [\n idx,\n {\n comment,\n },\n ] of contexts.entries()) {\n if (comment && handler(comment, jsdoc) === false) {\n continue;\n }\n\n iterate(\n {\n comment,\n lastIndex: idx,\n selector: node?.type,\n },\n indent,\n jsdoc,\n ruleConfig,\n context,\n lines,\n jsdocNode,\n node,\n settings,\n sourceCode,\n iterator,\n state,\n true,\n );\n }\n\n continue;\n }\n\n let lastComment;\n let lastIndex;\n // eslint-disable-next-line no-loop-func\n if (contexts && contexts.every(({\n comment,\n }, idx) => {\n lastComment = comment;\n lastIndex = idx;\n\n return comment && handler(comment, jsdoc) === false;\n })) {\n continue;\n }\n\n iterate(\n lastComment ? {\n comment: lastComment,\n lastIndex,\n selector: node?.type,\n } : {\n lastIndex,\n selector: node?.type,\n },\n indent,\n jsdoc,\n ruleConfig,\n context,\n lines,\n jsdocNode,\n node,\n settings,\n sourceCode,\n iterator,\n state,\n true,\n );\n }\n\n if (lastCall && ruleConfig.exit) {\n ruleConfig.exit({\n context,\n settings,\n state,\n utils,\n });\n }\n };\n\n return {\n create (context) {\n const sourceCode = context.getSourceCode();\n settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n if (contexts) {\n handler = commentHandler(settings);\n }\n\n const state = {};\n\n return {\n '*:not(Program)' (node) {\n const commentNode = getJSDocComment(sourceCode, node, settings);\n if (!ruleConfig.noTracking && trackedJsdocs.has(commentNode)) {\n return;\n }\n\n if (!commentNode) {\n if (ruleConfig.nonComment) {\n ruleConfig.nonComment({\n node,\n state,\n });\n }\n\n return;\n }\n\n trackedJsdocs.add(commentNode);\n callIterator(context, node, [\n commentNode,\n ], state);\n },\n 'Program:exit' () {\n const allComments = sourceCode.getAllComments();\n const untrackedJSdoc = allComments.filter((node) => {\n return !trackedJsdocs.has(node);\n });\n\n callIterator(context, null, untrackedJSdoc, state, true);\n },\n };\n },\n meta: ruleConfig.meta,\n };\n};\n\n/**\n * Create an eslint rule that iterates over all JSDocs, regardless of whether\n * they are attached to a function-like node.\n *\n * @param {JsdocVisitor} iterator\n * @param {RuleConfig} ruleConfig\n */\nconst checkFile = (iterator, ruleConfig) => {\n return {\n create (context) {\n const sourceCode = context.getSourceCode();\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n return {\n 'Program:exit' () {\n const allComments = sourceCode.getAllComments();\n const {\n lines,\n } = sourceCode;\n const utils = getBasicUtils(context, settings);\n\n iterator({\n allComments,\n context,\n lines,\n makeReport,\n settings,\n sourceCode,\n utils,\n });\n },\n };\n },\n meta: ruleConfig.meta,\n };\n};\n\nexport {\n getSettings,\n // eslint-disable-next-line unicorn/prefer-export-from -- Avoid experimental parser\n parseComment,\n};\n\n/**\n * @param {JsdocVisitor} iterator\n * @param {RuleConfig} ruleConfig\n */\nexport default function iterateJsdoc (iterator, ruleConfig) {\n const metaType = ruleConfig?.meta?.type;\n if (!metaType || ![\n 'problem', 'suggestion', 'layout',\n ].includes(metaType)) {\n throw new TypeError('Rule must include `meta.type` option (with value \"problem\", \"suggestion\", or \"layout\")');\n }\n\n if (typeof iterator !== 'function') {\n throw new TypeError('The iterator argument must be a function.');\n }\n\n if (ruleConfig.checkFile) {\n return checkFile(iterator, ruleConfig);\n }\n\n if (ruleConfig.iterateAllJsdocs) {\n return iterateAllJsdocs(iterator, ruleConfig);\n }\n\n return {\n /**\n * The entrypoint for the JSDoc rule.\n *\n * @param {*} context\n * a reference to the context which hold all important information\n * like settings and the sourcecode to check.\n * @returns {object}\n * a list with parser callback function.\n */\n create (context) {\n const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n let contexts;\n if (ruleConfig.contextDefaults || ruleConfig.contextSelected || ruleConfig.matchContext) {\n contexts = ruleConfig.matchContext && context.options[0]?.match ?\n context.options[0].match :\n jsdocUtils.enforcedContexts(context, ruleConfig.contextDefaults, ruleConfig.nonGlobalSettings ? {} : settings);\n\n if (contexts) {\n contexts = contexts.map((obj) => {\n if (typeof obj === 'object' && !obj.context) {\n return {\n ...obj,\n context: 'any',\n };\n }\n\n return obj;\n });\n }\n\n const hasPlainAny = contexts?.includes('any');\n const hasObjectAny = !hasPlainAny && contexts?.find((ctxt) => {\n return ctxt?.context === 'any';\n });\n if (hasPlainAny || hasObjectAny) {\n return iterateAllJsdocs(\n iterator, ruleConfig, hasObjectAny ? contexts : null, ruleConfig.matchContext,\n ).create(context);\n }\n }\n\n const sourceCode = context.getSourceCode();\n const {\n lines,\n } = sourceCode;\n\n const state = {};\n\n const checkJsdoc = (info, handler, node) => {\n const jsdocNode = getJSDocComment(sourceCode, node, settings);\n if (!jsdocNode) {\n return;\n }\n\n const [\n indent,\n jsdoc,\n ] = getIndentAndJSDoc(\n lines, jsdocNode,\n );\n\n if (\n // Note, `handler` should already be bound in its first argument\n // with these only to be called after the value of\n // `comment`\n handler && handler(jsdoc) === false\n ) {\n return;\n }\n\n iterate(\n info, indent, jsdoc, ruleConfig, context, lines, jsdocNode, node, settings, sourceCode, iterator, state,\n );\n };\n\n let contextObject = {};\n\n if (contexts && (\n ruleConfig.contextDefaults || ruleConfig.contextSelected || ruleConfig.matchContext\n )) {\n contextObject = jsdocUtils.getContextObject(\n contexts,\n checkJsdoc,\n commentHandler(settings),\n );\n } else {\n for (const prop of [\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n 'TSDeclareFunction',\n ]) {\n contextObject[prop] = checkJsdoc.bind(null, {\n selector: prop,\n }, null);\n }\n }\n\n if (ruleConfig.exit) {\n contextObject['Program:exit'] = () => {\n ruleConfig.exit({\n context,\n settings,\n state,\n });\n };\n }\n\n return contextObject;\n },\n meta: ruleConfig.meta,\n };\n}\n"],"mappings":"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"}
@@ -80,16 +80,28 @@ var _default = (0, _iterateJsdoc.default)(({
80
80
  return true;
81
81
  };
82
82
  const validTypeParsing = function (type) {
83
+ let parsedTypes;
83
84
  try {
84
85
  if (mode === 'permissive') {
85
- (0, _jsdoccomment.tryParse)(type);
86
+ parsedTypes = (0, _jsdoccomment.tryParse)(type);
86
87
  } else {
87
- (0, _jsdoccomment.parse)(type, mode);
88
+ parsedTypes = (0, _jsdoccomment.parse)(type, mode);
88
89
  }
89
90
  } catch {
90
91
  report(`Syntax error in type: ${type}`, null, tag);
91
92
  return false;
92
93
  }
94
+ if (mode === 'closure' || mode === 'typescript') {
95
+ (0, _jsdoccomment.traverse)(parsedTypes, node => {
96
+ var _node$right, _node$right2, _node$right2$meta;
97
+ const {
98
+ type: typ
99
+ } = node;
100
+ if ((typ === 'JsdocTypeObjectField' || typ === 'JsdocTypeKeyValue') && ((_node$right = node.right) === null || _node$right === void 0 ? void 0 : _node$right.type) === 'JsdocTypeNullable' && ((_node$right2 = node.right) === null || _node$right2 === void 0 ? void 0 : (_node$right2$meta = _node$right2.meta) === null || _node$right2$meta === void 0 ? void 0 : _node$right2$meta.position) === 'suffix') {
101
+ report(`Syntax error in type: ${node.right.type}`, null, tag);
102
+ }
103
+ });
104
+ }
93
105
  return true;
94
106
  };
95
107
  if (tag.problems.length) {
@@ -1 +1 @@
1
- {"version":3,"file":"validTypes.js","names":["_jsdoccomment","require","_iterateJsdoc","_interopRequireDefault","obj","__esModule","default","asExpression","suppressTypes","Set","tryParsePathIgnoreError","path","tryParse","_default","iterateJsdoc","jsdoc","report","utils","context","settings","allowEmptyNamepaths","options","mode","tag","tags","validNamepathParsing","namepath","tagName","handled","startsWith","endChar","slice","includes","startChar","charAt","validTypeParsing","type","parse","problems","length","msg","reduce","str","message","thisNamepath","getTagDescription","replace","trim","test","thatNamepath","name","parsedTypes","traverse","node","value","undefined","has","otherModeMaps","filter","mde","map","getTagStructureForMode","tagMightHaveNamePosition","modeInfo","mightHaveTypePosition","tagMightHaveTypePosition","tagMustHaveNamePosition","mustHaveTypePosition","tagMustHaveTypePosition","tagMissingRequiredTypeOrNamepath","hasTypePosition","Boolean","hasNameOrNamepathPosition","tagMightHaveNamepath","parseClosureTemplateTag","iterateAllJsdocs","meta","docs","description","url","schema","additionalProperties","properties","exports","module"],"sources":["../../src/rules/validTypes.js"],"sourcesContent":["import {\n tryParse,\n parse,\n traverse,\n} from '@es-joy/jsdoccomment';\nimport iterateJsdoc from '../iterateJsdoc';\n\nconst asExpression = /as\\s+/u;\n\nconst suppressTypes = new Set([\n // https://github.com/google/closure-compiler/wiki/@suppress-annotations\n // https://github.com/google/closure-compiler/blob/master/src/com/google/javascript/jscomp/parsing/ParserConfig.properties#L154\n 'accessControls',\n 'checkDebuggerStatement',\n 'checkPrototypalTypes',\n 'checkRegExp',\n 'checkTypes',\n 'checkVars',\n 'closureDepMethodUsageChecks',\n 'const',\n 'constantProperty',\n 'deprecated',\n 'duplicate',\n 'es5Strict',\n 'externsValidation',\n 'extraProvide',\n 'extraRequire',\n 'globalThis',\n 'invalidCasts',\n 'lateProvide',\n 'legacyGoogScopeRequire',\n 'lintChecks',\n 'messageConventions',\n 'misplacedTypeAnnotation',\n 'missingOverride',\n 'missingPolyfill',\n 'missingProperties',\n 'missingProvide',\n 'missingRequire',\n 'missingSourcesWarnings',\n 'moduleLoad',\n 'nonStandardJsDocs',\n 'partialAlias',\n 'polymer',\n 'reportUnknownTypes',\n 'strictMissingProperties',\n 'strictModuleDepCheck',\n 'strictPrimitiveOperators',\n 'suspiciousCode',\n\n // Not documented in enum\n 'switch',\n 'transitionalSuspiciousCodeWarnings',\n 'undefinedNames',\n 'undefinedVars',\n 'underscore',\n 'unknownDefines',\n 'untranspilableFeatures',\n 'unusedLocalVariables',\n 'unusedPrivateMembers',\n 'useOfGoogProvide',\n 'uselessCode',\n 'visibility',\n 'with',\n]);\n\nconst tryParsePathIgnoreError = (path) => {\n try {\n tryParse(path);\n\n return true;\n } catch {\n // Keep the original error for including the whole type\n }\n\n return false;\n};\n\n// eslint-disable-next-line complexity\nexport default iterateJsdoc(({\n jsdoc,\n report,\n utils,\n context,\n settings,\n}) => {\n const {\n allowEmptyNamepaths = false,\n } = context.options[0] || {};\n const {\n mode,\n } = settings;\n\n for (const tag of jsdoc.tags) {\n const validNamepathParsing = function (namepath, tagName) {\n if (tryParsePathIgnoreError(namepath)) {\n return true;\n }\n\n let handled = false;\n\n if (tagName) {\n // eslint-disable-next-line default-case\n switch (tagName) {\n case 'requires':\n case 'module': {\n if (!namepath.startsWith('module:')) {\n handled = tryParsePathIgnoreError(`module:${namepath}`);\n }\n\n break;\n }\n\n case 'memberof': case 'memberof!': {\n const endChar = namepath.slice(-1);\n if ([\n '#', '.', '~',\n ].includes(endChar)) {\n handled = tryParsePathIgnoreError(namepath.slice(0, -1));\n }\n\n break;\n }\n\n case 'borrows': {\n const startChar = namepath.charAt();\n if ([\n '#', '.', '~',\n ].includes(startChar)) {\n handled = tryParsePathIgnoreError(namepath.slice(1));\n }\n }\n }\n }\n\n if (!handled) {\n report(`Syntax error in namepath: ${namepath}`, null, tag);\n\n return false;\n }\n\n return true;\n };\n\n const validTypeParsing = function (type) {\n try {\n if (mode === 'permissive') {\n tryParse(type);\n } else {\n parse(type, mode);\n }\n } catch {\n report(`Syntax error in type: ${type}`, null, tag);\n\n return false;\n }\n\n return true;\n };\n\n if (tag.problems.length) {\n const msg = tag.problems.reduce((str, {\n message,\n }) => {\n return str + '; ' + message;\n }, '').slice(2);\n report(`Invalid name: ${msg}`, null, tag);\n continue;\n }\n\n if (tag.tag === 'borrows') {\n const thisNamepath = utils.getTagDescription(tag).replace(asExpression, '')\n .trim();\n\n if (!asExpression.test(utils.getTagDescription(tag)) || !thisNamepath) {\n report(`@borrows must have an \"as\" expression. Found \"${utils.getTagDescription(tag)}\"`, null, tag);\n\n continue;\n }\n\n if (validNamepathParsing(thisNamepath, 'borrows')) {\n const thatNamepath = tag.name;\n\n validNamepathParsing(thatNamepath);\n }\n\n continue;\n }\n\n if (tag.tag === 'suppress' && mode === 'closure') {\n let parsedTypes;\n\n try {\n parsedTypes = tryParse(tag.type);\n } catch {\n // Ignore\n }\n\n if (parsedTypes) {\n traverse(parsedTypes, (node) => {\n const {\n value: type,\n } = node;\n if (type !== undefined && !suppressTypes.has(type)) {\n report(`Syntax error in supresss type: ${type}`, null, tag);\n }\n });\n }\n }\n\n const otherModeMaps = [\n 'jsdoc', 'typescript', 'closure', 'permissive',\n ].filter(\n (mde) => {\n return mde !== mode;\n },\n ).map((mde) => {\n return utils.getTagStructureForMode(mde);\n });\n\n const tagMightHaveNamePosition = utils.tagMightHaveNamePosition(tag.tag, otherModeMaps);\n if (tagMightHaveNamePosition !== true && tag.name) {\n const modeInfo = tagMightHaveNamePosition === false ? '' : ` in \"${mode}\" mode`;\n report(`@${tag.tag} should not have a name${modeInfo}.`, null, tag);\n\n continue;\n }\n\n const mightHaveTypePosition = utils.tagMightHaveTypePosition(tag.tag, otherModeMaps);\n if (mightHaveTypePosition !== true && tag.type) {\n const modeInfo = mightHaveTypePosition === false ? '' : ` in \"${mode}\" mode`;\n report(`@${tag.tag} should not have a bracketed type${modeInfo}.`, null, tag);\n\n continue;\n }\n\n // REQUIRED NAME\n const tagMustHaveNamePosition = utils.tagMustHaveNamePosition(tag.tag, otherModeMaps);\n\n // Don't handle `@param` here though it does require name as handled by\n // `require-param-name` (`@property` would similarly seem to require one,\n // but is handled by `require-property-name`)\n if (tagMustHaveNamePosition !== false && !tag.name && !allowEmptyNamepaths && ![\n 'param', 'arg', 'argument',\n 'property', 'prop',\n ].includes(tag.tag) &&\n (tag.tag !== 'see' || !utils.getTagDescription(tag).includes('{@link'))\n ) {\n const modeInfo = tagMustHaveNamePosition === true ? '' : ` in \"${mode}\" mode`;\n report(`Tag @${tag.tag} must have a name/namepath${modeInfo}.`, null, tag);\n\n continue;\n }\n\n // REQUIRED TYPE\n const mustHaveTypePosition = utils.tagMustHaveTypePosition(tag.tag, otherModeMaps);\n if (mustHaveTypePosition !== false && !tag.type) {\n const modeInfo = mustHaveTypePosition === true ? '' : ` in \"${mode}\" mode`;\n report(`Tag @${tag.tag} must have a type${modeInfo}.`, null, tag);\n\n continue;\n }\n\n // REQUIRED TYPE OR NAME/NAMEPATH\n const tagMissingRequiredTypeOrNamepath = utils.tagMissingRequiredTypeOrNamepath(tag, otherModeMaps);\n if (tagMissingRequiredTypeOrNamepath !== false && !allowEmptyNamepaths) {\n const modeInfo = tagMissingRequiredTypeOrNamepath === true ? '' : ` in \"${mode}\" mode`;\n report(`Tag @${tag.tag} must have either a type or namepath${modeInfo}.`, null, tag);\n\n continue;\n }\n\n // VALID TYPE\n const hasTypePosition = mightHaveTypePosition === true && Boolean(tag.type);\n if (hasTypePosition) {\n validTypeParsing(tag.type);\n }\n\n // VALID NAME/NAMEPATH\n const hasNameOrNamepathPosition = (\n tagMustHaveNamePosition !== false ||\n utils.tagMightHaveNamepath(tag.tag)\n ) && Boolean(tag.name);\n\n if (hasNameOrNamepathPosition) {\n if (mode !== 'jsdoc' && tag.tag === 'template') {\n for (const namepath of utils.parseClosureTemplateTag(tag)) {\n validNamepathParsing(namepath);\n }\n } else {\n validNamepathParsing(tag.name, tag.tag);\n }\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Requires all types to be valid JSDoc or Closure compiler types without syntax errors.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-valid-types',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n allowEmptyNamepaths: {\n default: false,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"validTypes.js","names":["_jsdoccomment","require","_iterateJsdoc","_interopRequireDefault","obj","__esModule","default","asExpression","suppressTypes","Set","tryParsePathIgnoreError","path","tryParse","_default","iterateJsdoc","jsdoc","report","utils","context","settings","allowEmptyNamepaths","options","mode","tag","tags","validNamepathParsing","namepath","tagName","handled","startsWith","endChar","slice","includes","startChar","charAt","validTypeParsing","type","parsedTypes","parse","traverse","node","_node$right","_node$right2","_node$right2$meta","typ","right","meta","position","problems","length","msg","reduce","str","message","thisNamepath","getTagDescription","replace","trim","test","thatNamepath","name","value","undefined","has","otherModeMaps","filter","mde","map","getTagStructureForMode","tagMightHaveNamePosition","modeInfo","mightHaveTypePosition","tagMightHaveTypePosition","tagMustHaveNamePosition","mustHaveTypePosition","tagMustHaveTypePosition","tagMissingRequiredTypeOrNamepath","hasTypePosition","Boolean","hasNameOrNamepathPosition","tagMightHaveNamepath","parseClosureTemplateTag","iterateAllJsdocs","docs","description","url","schema","additionalProperties","properties","exports","module"],"sources":["../../src/rules/validTypes.js"],"sourcesContent":["import {\n tryParse,\n parse,\n traverse,\n} from '@es-joy/jsdoccomment';\nimport iterateJsdoc from '../iterateJsdoc';\n\nconst asExpression = /as\\s+/u;\n\nconst suppressTypes = new Set([\n // https://github.com/google/closure-compiler/wiki/@suppress-annotations\n // https://github.com/google/closure-compiler/blob/master/src/com/google/javascript/jscomp/parsing/ParserConfig.properties#L154\n 'accessControls',\n 'checkDebuggerStatement',\n 'checkPrototypalTypes',\n 'checkRegExp',\n 'checkTypes',\n 'checkVars',\n 'closureDepMethodUsageChecks',\n 'const',\n 'constantProperty',\n 'deprecated',\n 'duplicate',\n 'es5Strict',\n 'externsValidation',\n 'extraProvide',\n 'extraRequire',\n 'globalThis',\n 'invalidCasts',\n 'lateProvide',\n 'legacyGoogScopeRequire',\n 'lintChecks',\n 'messageConventions',\n 'misplacedTypeAnnotation',\n 'missingOverride',\n 'missingPolyfill',\n 'missingProperties',\n 'missingProvide',\n 'missingRequire',\n 'missingSourcesWarnings',\n 'moduleLoad',\n 'nonStandardJsDocs',\n 'partialAlias',\n 'polymer',\n 'reportUnknownTypes',\n 'strictMissingProperties',\n 'strictModuleDepCheck',\n 'strictPrimitiveOperators',\n 'suspiciousCode',\n\n // Not documented in enum\n 'switch',\n 'transitionalSuspiciousCodeWarnings',\n 'undefinedNames',\n 'undefinedVars',\n 'underscore',\n 'unknownDefines',\n 'untranspilableFeatures',\n 'unusedLocalVariables',\n 'unusedPrivateMembers',\n 'useOfGoogProvide',\n 'uselessCode',\n 'visibility',\n 'with',\n]);\n\nconst tryParsePathIgnoreError = (path) => {\n try {\n tryParse(path);\n\n return true;\n } catch {\n // Keep the original error for including the whole type\n }\n\n return false;\n};\n\n// eslint-disable-next-line complexity\nexport default iterateJsdoc(({\n jsdoc,\n report,\n utils,\n context,\n settings,\n}) => {\n const {\n allowEmptyNamepaths = false,\n } = context.options[0] || {};\n const {\n mode,\n } = settings;\n\n for (const tag of jsdoc.tags) {\n const validNamepathParsing = function (namepath, tagName) {\n if (tryParsePathIgnoreError(namepath)) {\n return true;\n }\n\n let handled = false;\n\n if (tagName) {\n // eslint-disable-next-line default-case\n switch (tagName) {\n case 'requires':\n case 'module': {\n if (!namepath.startsWith('module:')) {\n handled = tryParsePathIgnoreError(`module:${namepath}`);\n }\n\n break;\n }\n\n case 'memberof': case 'memberof!': {\n const endChar = namepath.slice(-1);\n if ([\n '#', '.', '~',\n ].includes(endChar)) {\n handled = tryParsePathIgnoreError(namepath.slice(0, -1));\n }\n\n break;\n }\n\n case 'borrows': {\n const startChar = namepath.charAt();\n if ([\n '#', '.', '~',\n ].includes(startChar)) {\n handled = tryParsePathIgnoreError(namepath.slice(1));\n }\n }\n }\n }\n\n if (!handled) {\n report(`Syntax error in namepath: ${namepath}`, null, tag);\n\n return false;\n }\n\n return true;\n };\n\n const validTypeParsing = function (type) {\n let parsedTypes;\n try {\n if (mode === 'permissive') {\n parsedTypes = tryParse(type);\n } else {\n parsedTypes = parse(type, mode);\n }\n } catch {\n report(`Syntax error in type: ${type}`, null, tag);\n\n return false;\n }\n\n if (mode === 'closure' || mode === 'typescript') {\n traverse(parsedTypes, (node) => {\n const {\n type: typ,\n } = node;\n\n if (\n (typ === 'JsdocTypeObjectField' || typ === 'JsdocTypeKeyValue') &&\n node.right?.type === 'JsdocTypeNullable' &&\n node.right?.meta?.position === 'suffix'\n ) {\n report(`Syntax error in type: ${node.right.type}`, null, tag);\n }\n });\n }\n\n return true;\n };\n\n if (tag.problems.length) {\n const msg = tag.problems.reduce((str, {\n message,\n }) => {\n return str + '; ' + message;\n }, '').slice(2);\n report(`Invalid name: ${msg}`, null, tag);\n continue;\n }\n\n if (tag.tag === 'borrows') {\n const thisNamepath = utils.getTagDescription(tag).replace(asExpression, '')\n .trim();\n\n if (!asExpression.test(utils.getTagDescription(tag)) || !thisNamepath) {\n report(`@borrows must have an \"as\" expression. Found \"${utils.getTagDescription(tag)}\"`, null, tag);\n\n continue;\n }\n\n if (validNamepathParsing(thisNamepath, 'borrows')) {\n const thatNamepath = tag.name;\n\n validNamepathParsing(thatNamepath);\n }\n\n continue;\n }\n\n if (tag.tag === 'suppress' && mode === 'closure') {\n let parsedTypes;\n\n try {\n parsedTypes = tryParse(tag.type);\n } catch {\n // Ignore\n }\n\n if (parsedTypes) {\n traverse(parsedTypes, (node) => {\n const {\n value: type,\n } = node;\n if (type !== undefined && !suppressTypes.has(type)) {\n report(`Syntax error in supresss type: ${type}`, null, tag);\n }\n });\n }\n }\n\n const otherModeMaps = [\n 'jsdoc', 'typescript', 'closure', 'permissive',\n ].filter(\n (mde) => {\n return mde !== mode;\n },\n ).map((mde) => {\n return utils.getTagStructureForMode(mde);\n });\n\n const tagMightHaveNamePosition = utils.tagMightHaveNamePosition(tag.tag, otherModeMaps);\n if (tagMightHaveNamePosition !== true && tag.name) {\n const modeInfo = tagMightHaveNamePosition === false ? '' : ` in \"${mode}\" mode`;\n report(`@${tag.tag} should not have a name${modeInfo}.`, null, tag);\n\n continue;\n }\n\n const mightHaveTypePosition = utils.tagMightHaveTypePosition(tag.tag, otherModeMaps);\n if (mightHaveTypePosition !== true && tag.type) {\n const modeInfo = mightHaveTypePosition === false ? '' : ` in \"${mode}\" mode`;\n report(`@${tag.tag} should not have a bracketed type${modeInfo}.`, null, tag);\n\n continue;\n }\n\n // REQUIRED NAME\n const tagMustHaveNamePosition = utils.tagMustHaveNamePosition(tag.tag, otherModeMaps);\n\n // Don't handle `@param` here though it does require name as handled by\n // `require-param-name` (`@property` would similarly seem to require one,\n // but is handled by `require-property-name`)\n if (tagMustHaveNamePosition !== false && !tag.name && !allowEmptyNamepaths && ![\n 'param', 'arg', 'argument',\n 'property', 'prop',\n ].includes(tag.tag) &&\n (tag.tag !== 'see' || !utils.getTagDescription(tag).includes('{@link'))\n ) {\n const modeInfo = tagMustHaveNamePosition === true ? '' : ` in \"${mode}\" mode`;\n report(`Tag @${tag.tag} must have a name/namepath${modeInfo}.`, null, tag);\n\n continue;\n }\n\n // REQUIRED TYPE\n const mustHaveTypePosition = utils.tagMustHaveTypePosition(tag.tag, otherModeMaps);\n if (mustHaveTypePosition !== false && !tag.type) {\n const modeInfo = mustHaveTypePosition === true ? '' : ` in \"${mode}\" mode`;\n report(`Tag @${tag.tag} must have a type${modeInfo}.`, null, tag);\n\n continue;\n }\n\n // REQUIRED TYPE OR NAME/NAMEPATH\n const tagMissingRequiredTypeOrNamepath = utils.tagMissingRequiredTypeOrNamepath(tag, otherModeMaps);\n if (tagMissingRequiredTypeOrNamepath !== false && !allowEmptyNamepaths) {\n const modeInfo = tagMissingRequiredTypeOrNamepath === true ? '' : ` in \"${mode}\" mode`;\n report(`Tag @${tag.tag} must have either a type or namepath${modeInfo}.`, null, tag);\n\n continue;\n }\n\n // VALID TYPE\n const hasTypePosition = mightHaveTypePosition === true && Boolean(tag.type);\n if (hasTypePosition) {\n validTypeParsing(tag.type);\n }\n\n // VALID NAME/NAMEPATH\n const hasNameOrNamepathPosition = (\n tagMustHaveNamePosition !== false ||\n utils.tagMightHaveNamepath(tag.tag)\n ) && Boolean(tag.name);\n\n if (hasNameOrNamepathPosition) {\n if (mode !== 'jsdoc' && tag.tag === 'template') {\n for (const namepath of utils.parseClosureTemplateTag(tag)) {\n validNamepathParsing(namepath);\n }\n } else {\n validNamepathParsing(tag.name, tag.tag);\n }\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Requires all types to be valid JSDoc or Closure compiler types without syntax errors.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-valid-types',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n allowEmptyNamepaths: {\n default: false,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
@@ -471,6 +471,22 @@ function quux () {}
471
471
  */
472
472
  function quux () {}
473
473
  // Message: Invalid name: invalid default value syntax
474
+
475
+ /**
476
+ * @type {{message: string?}}
477
+ */
478
+ function quux (items) {
479
+ }
480
+ // Settings: {"jsdoc":{"mode":"closure"}}
481
+ // Message: Syntax error in type: JsdocTypeNullable
482
+
483
+ /**
484
+ * @type {[message: string?]}
485
+ */
486
+ function quux (items) {
487
+ }
488
+ // Settings: {"jsdoc":{"mode":"typescript"}}
489
+ // Message: Syntax error in type: JsdocTypeNullable
474
490
  ````
475
491
 
476
492
 
@@ -830,5 +846,9 @@ function quux() {
830
846
 
831
847
  }
832
848
  // Settings: {"jsdoc":{"mode":"typescript"}}
849
+
850
+ /**
851
+ * @returns {Promise<{publicKey, privateKey}>} - The public and private key
852
+ */
833
853
  ````
834
854
 
package/docs/settings.md CHANGED
@@ -44,8 +44,7 @@ how many line breaks to add when a block is missing.
44
44
  ### Mode
45
45
 
46
46
  - `settings.jsdoc.mode` - Set to `typescript`, `closure`, or `jsdoc` (the
47
- default unless the `@typescript-eslint` parser is in use in which case
48
- `typescript` will be the default).
47
+ default is now `typescript`).
49
48
  Note that if you do not wish to use separate `.eslintrc.*` files for a
50
49
  project containing both JavaScript and TypeScript, you can also use
51
50
  [`overrides`](https://eslint.org/docs/user-guide/configuring). You may also
@@ -68,6 +67,12 @@ how many line breaks to add when a block is missing.
68
67
  - Disallows namepath on `@interface` for "closure" mode in `valid-types` (and
69
68
  avoids checking in other rules)
70
69
 
70
+ Note that if you are using TypeScript syntax (and not just the TypeScript
71
+ flavor of JSDoc which `mode` set to "typescript" implies), you may wish
72
+ to use the `recommended-typescript` or `recommended-typescript-error`
73
+ config. This will add rules such as `jsdoc/no-types` to expect you have
74
+ no types expressed in JSDoc (since these can be added in TypeScript).
75
+
71
76
  <a name="user-content-settings-alias-preference"></a>
72
77
  <a name="settings-alias-preference"></a>
73
78
  ### Alias Preference
package/package.json CHANGED
@@ -24,20 +24,22 @@
24
24
  "@babel/plugin-transform-flow-strip-types": "^7.21.0",
25
25
  "@babel/preset-env": "^7.21.5",
26
26
  "@babel/register": "^7.21.0",
27
- "@es-joy/jsdoc-eslint-parser": "^0.18.0",
27
+ "@es-joy/jsdoc-eslint-parser": "^0.19.0",
28
28
  "@hkdobrev/run-if-changed": "^0.3.1",
29
29
  "@semantic-release/commit-analyzer": "^9.0.2",
30
30
  "@semantic-release/github": "^8.0.7",
31
31
  "@semantic-release/npm": "^10.0.3",
32
- "@typescript-eslint/parser": "^5.59.2",
32
+ "@types/eslint": "^8.37.0",
33
+ "@types/node": "^20.1.1",
34
+ "@typescript-eslint/parser": "^5.59.5",
33
35
  "babel-plugin-add-module-exports": "^1.0.4",
34
36
  "babel-plugin-istanbul": "^6.1.1",
35
37
  "camelcase": "^6.3.0",
36
38
  "chai": "^4.3.7",
37
39
  "cross-env": "^7.0.3",
38
40
  "decamelize": "^5.0.1",
39
- "eslint-config-canonical": "~33.0.1",
40
41
  "eslint": "^8.39.0",
42
+ "eslint-config-canonical": "~33.0.1",
41
43
  "gitdown": "^3.1.5",
42
44
  "glob": "^10.2.2",
43
45
  "husky": "^8.0.3",
@@ -107,9 +109,10 @@
107
109
  "package-lock.json": "npm run install-offline"
108
110
  },
109
111
  "scripts": {
112
+ "tsc": "tsc",
110
113
  "build": "rimraf ./dist && cross-env NODE_ENV=production babel ./src --out-dir ./dist --copy-files --source-maps --ignore ./src/bin/*.js --no-copy-ignored",
111
- "check-readme": "babel-node ./src/bin/generateDocs.js --check",
112
- "create-readme": "babel-node ./src/bin/generateDocs.js",
114
+ "check-docs": "babel-node ./src/bin/generateDocs.js --check",
115
+ "create-docs": "babel-node ./src/bin/generateDocs.js",
113
116
  "create-rule": "babel-node ./src/bin/generateRule.js",
114
117
  "install-offline": "pnpm install --prefer-offline --no-audit",
115
118
  "lint": "npm run lint-arg -- .",
@@ -121,5 +124,5 @@
121
124
  "test-cov": "cross-env TIMING=1 nyc --reporter text npm run test-no-cov",
122
125
  "test-index": "npm run test-no-cov -- test/rules/index.js"
123
126
  },
124
- "version": "44.0.0"
127
+ "version": "44.0.2"
125
128
  }
package/tsconfig.json ADDED
@@ -0,0 +1,19 @@
1
+ {
2
+ "compilerOptions": {
3
+ "lib": ["es2022"],
4
+ "moduleResolution": "node",
5
+ "module": "esnext",
6
+ "allowJs": true,
7
+ "checkJs": true,
8
+ "noEmit": true,
9
+ "declaration": true,
10
+ "declarationMap": true,
11
+ "allowSyntheticDefaultImports": true,
12
+ "strict": true,
13
+ "target": "es6",
14
+ "outDir": "dist"
15
+ },
16
+ // Restore to `src/**/*.js` as ready
17
+ "include": ["src/bin/*.js", "src/bin/gitdown.d.ts"],
18
+ "exclude": ["node_modules"]
19
+ }