eslint-plugin-jsdoc 39.5.0 → 39.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -480,6 +480,8 @@ The format of the configuration is as follows:
480
480
  - a string type to be preferred in its place (and which `fix` mode
481
481
  can replace)
482
482
  - `false` (for forbidding the type)
483
+ - an optional key `skipRootChecking` (for `check-types`) to allow for this
484
+ type in the context of a root (i.e., a parent object of some child type)
483
485
 
484
486
  Note that the preferred types indicated as targets in
485
487
  `settings.jsdoc.preferredTypes` map will be assumed to be defined by
@@ -5737,6 +5739,15 @@ function abc(param) {
5737
5739
  return 'abc';
5738
5740
  }
5739
5741
  // Message: Invalid JSDoc @param "param" type "Object"; prefer: "object".
5742
+
5743
+ /**
5744
+ * @param {object} root
5745
+ * @param {number} root.a
5746
+ * @param {object} b
5747
+ */
5748
+ function a () {}
5749
+ // Settings: {"jsdoc":{"preferredTypes":{"object":{"skipRootChecking":true}}}}
5750
+ // Message: Invalid JSDoc @param "b" type "object".
5740
5751
  ````
5741
5752
 
5742
5753
  The following patterns are not considered problems:
@@ -6055,6 +6066,13 @@ function foo(spec) {
6055
6066
  }
6056
6067
 
6057
6068
  foo()
6069
+
6070
+ /**
6071
+ * @param {object} root
6072
+ * @param {number} root.a
6073
+ */
6074
+ function a () {}
6075
+ // Settings: {"jsdoc":{"preferredTypes":{"object":{"message":"Won't see this message","skipRootChecking":true}}}}
6058
6076
  ````
6059
6077
 
6060
6078
 
@@ -18321,6 +18339,22 @@ function maybeTrue() {
18321
18339
  return true;
18322
18340
  }
18323
18341
  }
18342
+
18343
+ /**
18344
+ * @param {AST} astNode
18345
+ * @returns {AST}
18346
+ */
18347
+ const getTSFunctionComment = function (astNode) {
18348
+ switch (greatGrandparent.type) {
18349
+ case 'VariableDeclarator':
18350
+ if (greatGreatGrandparent.type === 'VariableDeclaration') {
18351
+ return greatGreatGrandparent;
18352
+ }
18353
+
18354
+ default:
18355
+ return astNode;
18356
+ }
18357
+ };
18324
18358
  ````
18325
18359
 
18326
18360
 
@@ -177,13 +177,15 @@ var _default = (0, _iterateJsdoc.default)(({
177
177
  * @param {string} type
178
178
  * @param {string} value
179
179
  * @param {string} tagName
180
+ * @param {string} nameInTag
181
+ * @param {number} idx
180
182
  * @param {string} property
181
183
  * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} node
182
184
  * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} parentNode
183
185
  * @param {string[]} invalidTypes
184
186
  * @returns {void}
185
187
  */
186
- const getInvalidTypes = (type, value, tagName, property, node, parentNode, invalidTypes) => {
188
+ const getInvalidTypes = (type, value, tagName, nameInTag, idx, property, node, parentNode, invalidTypes) => {
187
189
  let typeNodeName = type === 'JsdocTypeAny' ? '*' : value;
188
190
  const [hasMatchingPreferredType, typeName, isGenericMatch] = getPreferredTypeInfo(type, typeNodeName, parentNode, property);
189
191
  let preferred;
@@ -196,9 +198,12 @@ var _default = (0, _iterateJsdoc.default)(({
196
198
  } else if (typeof preferredSetting === 'string') {
197
199
  preferred = preferredSetting;
198
200
  invalidTypes.push([typeNodeName, preferred]);
199
- } else if (typeof preferredSetting === 'object') {
200
- preferred = preferredSetting === null || preferredSetting === void 0 ? void 0 : preferredSetting.replacement;
201
- invalidTypes.push([typeNodeName, preferred, preferredSetting === null || preferredSetting === void 0 ? void 0 : preferredSetting.message]);
201
+ } else if (preferredSetting && typeof preferredSetting === 'object') {
202
+ const nextItem = preferredSetting.skipRootChecking && jsdocTagsWithPossibleType[idx + 1];
203
+ if (!nextItem || !nextItem.name.startsWith(`${nameInTag}.`)) {
204
+ preferred = preferredSetting.replacement;
205
+ invalidTypes.push([typeNodeName, preferred, preferredSetting.message]);
206
+ }
202
207
  } else {
203
208
  utils.reportSettings('Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.');
204
209
  return;
@@ -219,7 +224,7 @@ var _default = (0, _iterateJsdoc.default)(({
219
224
  adjustNames(type, preferred, isGenericMatch, typeNodeName, node, parentNode);
220
225
  }
221
226
  };
222
- for (const jsdocTag of jsdocTagsWithPossibleType) {
227
+ for (const [idx, jsdocTag] of jsdocTagsWithPossibleType.entries()) {
223
228
  const invalidTypes = [];
224
229
  let typeAst;
225
230
  try {
@@ -227,7 +232,10 @@ var _default = (0, _iterateJsdoc.default)(({
227
232
  } catch {
228
233
  continue;
229
234
  }
230
- const tagName = jsdocTag.tag;
235
+ const {
236
+ tag: tagName,
237
+ name: nameInTag
238
+ } = jsdocTag;
231
239
  (0, _jsdoccomment.traverse)(typeAst, (node, parentNode, property) => {
232
240
  const {
233
241
  type,
@@ -236,7 +244,7 @@ var _default = (0, _iterateJsdoc.default)(({
236
244
  if (!['JsdocTypeName', 'JsdocTypeAny'].includes(type)) {
237
245
  return;
238
246
  }
239
- getInvalidTypes(type, value, tagName, property, node, parentNode, invalidTypes);
247
+ getInvalidTypes(type, value, tagName, nameInTag, idx, property, node, parentNode, invalidTypes);
240
248
  });
241
249
  if (invalidTypes.length) {
242
250
  const fixedType = (0, _jsdoccomment.stringify)(typeAst);
@@ -1 +1 @@
1
- {"version":3,"file":"checkTypes.js","names":["strictNativeTypes","adjustNames","type","preferred","isGenericMatch","typeNodeName","node","parentNode","ret","meta","brackets","dot","dotBracketEnd","match","slice","length","bracketEnd","endsWith","value","replace","iterateJsdoc","jsdocNode","sourceCode","report","utils","settings","context","jsdocTagsWithPossibleType","filterTags","tag","tagMightHaveTypePosition","preferredTypes","preferredTypesOriginal","structuredTags","mode","injectObjectPreferredTypes","Object","noDefaults","unifyParentAndChildTypeChecks","exemptTagContexts","options","getPreferredTypeInfo","_type","property","hasMatchingPreferredType","typeName","isNameOfGeneric","undefined","checkPostFixes","some","checkPostFix","directNameMatch","values","includes","unifiedSyntaxParentMatch","checkNativeTypes","invalidTypes","changedPreferred","strictNativeType","elements","left","toLowerCase","push","getInvalidTypes","tagName","types","preferredSetting","replacement","message","reportSettings","entries","typs","Array","isArray","jsdocTag","typeAst","tryParse","parse","traverse","fixedType","stringify","fix","fixer","replaceText","getText","badType","preferredType","tagValue","name","JSON","iterateAllJsdocs","docs","description","url","fixable","schema","additionalProperties","properties","items","oneOf"],"sources":["../../src/rules/checkTypes.js"],"sourcesContent":["import {\n parse,\n stringify,\n traverse,\n tryParse,\n} from '@es-joy/jsdoccomment';\nimport iterateJsdoc from '../iterateJsdoc';\n\nconst strictNativeTypes = [\n 'undefined',\n 'null',\n 'boolean',\n 'number',\n 'bigint',\n 'string',\n 'symbol',\n 'object',\n 'Array',\n 'Function',\n 'Date',\n 'RegExp',\n];\n\n/**\n * Adjusts the parent type node `meta` for generic matches (or type node\n * `type` for `JsdocTypeAny`) and sets the type node `value`.\n *\n * @param {string} type The actual type\n * @param {string} preferred The preferred type\n * @param {boolean} isGenericMatch\n * @param {string} typeNodeName\n * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} node\n * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} parentNode\n * @returns {void}\n */\nconst adjustNames = (type, preferred, isGenericMatch, typeNodeName, node, parentNode) => {\n let ret = preferred;\n if (isGenericMatch) {\n if (preferred === '[]') {\n parentNode.meta.brackets = 'square';\n parentNode.meta.dot = false;\n ret = 'Array';\n } else {\n const dotBracketEnd = preferred.match(/\\.(?:<>)?$/u);\n if (dotBracketEnd) {\n parentNode.meta.brackets = 'angle';\n parentNode.meta.dot = true;\n ret = preferred.slice(0, -dotBracketEnd[0].length);\n } else {\n const bracketEnd = preferred.endsWith('<>');\n if (bracketEnd) {\n parentNode.meta.brackets = 'angle';\n parentNode.meta.dot = false;\n ret = preferred.slice(0, -2);\n } else if (\n parentNode.meta.brackets === 'square' &&\n (typeNodeName === '[]' || typeNodeName === 'Array')\n ) {\n parentNode.meta.brackets = 'angle';\n parentNode.meta.dot = false;\n }\n }\n }\n } else if (type === 'JsdocTypeAny') {\n node.type = 'JsdocTypeName';\n }\n\n node.value = ret.replace(/(?:\\.|<>|\\.<>|\\[\\])$/u, '');\n\n // For bare pseudo-types like `<>`\n if (!ret) {\n node.value = typeNodeName;\n }\n};\n\nexport default iterateJsdoc(({\n jsdocNode,\n sourceCode,\n report,\n utils,\n settings,\n context,\n}) => {\n const jsdocTagsWithPossibleType = utils.filterTags((tag) => {\n return utils.tagMightHaveTypePosition(tag.tag);\n });\n\n const {\n preferredTypes: preferredTypesOriginal,\n structuredTags,\n mode,\n } = settings;\n\n const injectObjectPreferredTypes = !('Object' in preferredTypesOriginal ||\n 'object' in preferredTypesOriginal ||\n 'object.<>' in preferredTypesOriginal ||\n 'Object.<>' in preferredTypesOriginal ||\n 'object<>' in preferredTypesOriginal);\n\n const preferredTypes = {\n ...injectObjectPreferredTypes ? {\n Object: 'object',\n 'object.<>': 'Object<>',\n 'Object.<>': 'Object<>',\n 'object<>': 'Object<>',\n } : {},\n ...preferredTypesOriginal,\n };\n\n const {\n noDefaults,\n unifyParentAndChildTypeChecks,\n exemptTagContexts = [],\n } = context.options[0] || {};\n\n /**\n * Gets information about the preferred type: whether there is a matching\n * preferred type, what the type is, and whether it is a match to a generic.\n *\n * @param {string} _type Not currently in use\n * @param {string} typeNodeName\n * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} parentNode\n * @param {string} property\n * @returns {[hasMatchingPreferredType: boolean, typeName: string, isGenericMatch: boolean]}\n */\n const getPreferredTypeInfo = (_type, typeNodeName, parentNode, property) => {\n let hasMatchingPreferredType = false;\n let isGenericMatch = false;\n let typeName = typeNodeName;\n\n const isNameOfGeneric = parentNode !== undefined && parentNode.type === 'JsdocTypeGeneric' && property === 'left';\n if (unifyParentAndChildTypeChecks || isNameOfGeneric) {\n const brackets = parentNode?.meta?.brackets;\n const dot = parentNode?.meta?.dot;\n\n if (brackets === 'angle') {\n const checkPostFixes = dot ? [\n '.', '.<>',\n ] : [\n '<>',\n ];\n isGenericMatch = checkPostFixes.some((checkPostFix) => {\n if (preferredTypes?.[typeNodeName + checkPostFix] !== undefined) {\n typeName += checkPostFix;\n\n return true;\n }\n\n return false;\n });\n }\n\n if (!isGenericMatch && property) {\n const checkPostFixes = dot ? [\n '.', '.<>',\n ] : [\n brackets === 'angle' ? '<>' : '[]',\n ];\n\n isGenericMatch = checkPostFixes.some((checkPostFix) => {\n if (preferredTypes?.[checkPostFix] !== undefined) {\n typeName = checkPostFix;\n\n return true;\n }\n\n return false;\n });\n }\n }\n\n const directNameMatch = preferredTypes?.[typeNodeName] !== undefined &&\n !Object.values(preferredTypes).includes(typeNodeName);\n const unifiedSyntaxParentMatch = property && directNameMatch && unifyParentAndChildTypeChecks;\n isGenericMatch = isGenericMatch || unifiedSyntaxParentMatch;\n\n hasMatchingPreferredType = isGenericMatch ||\n directNameMatch && !property;\n\n return [\n hasMatchingPreferredType, typeName, isGenericMatch,\n ];\n };\n\n /**\n * Iterates strict types to see if any should be added to `invalidTypes` (and\n * the the relevant strict type returned as the new preferred type).\n *\n * @param {string} typeNodeName\n * @param {string} preferred\n * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} parentNode\n * @param {string[]} invalidTypes\n * @returns {string} The `preferred` type string, optionally changed\n */\n const checkNativeTypes = (typeNodeName, preferred, parentNode, invalidTypes) => {\n let changedPreferred = preferred;\n for (const strictNativeType of strictNativeTypes) {\n if (\n strictNativeType === 'object' &&\n (\n // This is not set to remap with exact type match (e.g.,\n // `object: 'Object'`), so can ignore (including if circular)\n !preferredTypes?.[typeNodeName] ||\n // Although present on `preferredTypes` for remapping, this is a\n // parent object without a parent match (and not\n // `unifyParentAndChildTypeChecks`) and we don't want\n // `object<>` given TypeScript issue https://github.com/microsoft/TypeScript/issues/20555\n parentNode?.elements?.length && (\n parentNode?.left?.type === 'JsdocTypeName' &&\n parentNode?.left?.value === 'Object'\n )\n )\n ) {\n continue;\n }\n\n if (strictNativeType !== typeNodeName &&\n strictNativeType.toLowerCase() === typeNodeName.toLowerCase() &&\n\n // Don't report if user has own map for a strict native type\n (!preferredTypes || preferredTypes?.[strictNativeType] === undefined)\n ) {\n changedPreferred = strictNativeType;\n invalidTypes.push([\n typeNodeName, changedPreferred,\n ]);\n break;\n }\n }\n\n return changedPreferred;\n };\n\n /**\n * Collect invalid type info.\n *\n * @param {string} type\n * @param {string} value\n * @param {string} tagName\n * @param {string} property\n * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} node\n * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} parentNode\n * @param {string[]} invalidTypes\n * @returns {void}\n */\n const getInvalidTypes = (type, value, tagName, property, node, parentNode, invalidTypes) => {\n let typeNodeName = type === 'JsdocTypeAny' ? '*' : value;\n\n const [\n hasMatchingPreferredType,\n typeName,\n isGenericMatch,\n ] = getPreferredTypeInfo(type, typeNodeName, parentNode, property);\n\n let preferred;\n let types;\n if (hasMatchingPreferredType) {\n const preferredSetting = preferredTypes[typeName];\n typeNodeName = typeName === '[]' ? typeName : typeNodeName;\n\n if (!preferredSetting) {\n invalidTypes.push([\n typeNodeName,\n ]);\n } else if (typeof preferredSetting === 'string') {\n preferred = preferredSetting;\n invalidTypes.push([\n typeNodeName, preferred,\n ]);\n } else if (typeof preferredSetting === 'object') {\n preferred = preferredSetting?.replacement;\n invalidTypes.push([\n typeNodeName,\n preferred,\n preferredSetting?.message,\n ]);\n } else {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.',\n );\n\n return;\n }\n } else if (Object.entries(structuredTags).some(([\n tag,\n {\n type: typs,\n },\n ]) => {\n types = typs;\n\n return tag === tagName &&\n Array.isArray(types) &&\n !types.includes(typeNodeName);\n })) {\n invalidTypes.push([\n typeNodeName, types,\n ]);\n } else if (!noDefaults && type === 'JsdocTypeName') {\n preferred = checkNativeTypes(typeNodeName, preferred, parentNode, invalidTypes);\n }\n\n // For fixer\n if (preferred) {\n adjustNames(type, preferred, isGenericMatch, typeNodeName, node, parentNode);\n }\n };\n\n for (const jsdocTag of jsdocTagsWithPossibleType) {\n const invalidTypes = [];\n let typeAst;\n\n try {\n typeAst = mode === 'permissive' ? tryParse(jsdocTag.type) : parse(jsdocTag.type, mode);\n } catch {\n continue;\n }\n\n const tagName = jsdocTag.tag;\n\n traverse(typeAst, (node, parentNode, property) => {\n const {\n type,\n value,\n } = node;\n if (![\n 'JsdocTypeName', 'JsdocTypeAny',\n ].includes(type)) {\n return;\n }\n\n getInvalidTypes(type, value, tagName, property, node, parentNode, invalidTypes);\n });\n\n if (invalidTypes.length) {\n const fixedType = stringify(typeAst);\n\n /**\n * @param {any} fixer The ESLint fixer\n * @returns {string}\n */\n const fix = (fixer) => {\n return fixer.replaceText(\n jsdocNode,\n sourceCode.getText(jsdocNode).replace(\n `{${jsdocTag.type}}`,\n `{${fixedType}}`,\n ),\n );\n };\n\n for (const [\n badType,\n preferredType = '',\n message,\n ] of invalidTypes) {\n const tagValue = jsdocTag.name ? ` \"${jsdocTag.name}\"` : '';\n if (exemptTagContexts.some(({\n tag,\n types,\n }) => {\n return tag === tagName &&\n (types === true || types.includes(jsdocTag.type));\n })) {\n continue;\n }\n\n report(\n message ||\n `Invalid JSDoc @${tagName}${tagValue} type \"${badType}\"` +\n (preferredType ? '; ' : '.') +\n (preferredType ? `prefer: ${JSON.stringify(preferredType)}.` : ''),\n preferredType ? fix : null,\n jsdocTag,\n message ? {\n tagName,\n tagValue,\n } : null,\n );\n }\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Reports invalid types.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-types',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n exemptTagContexts: {\n items: {\n additionalProperties: false,\n properties: {\n tag: {\n type: 'string',\n },\n types: {\n oneOf: [\n {\n type: 'boolean',\n },\n {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n ],\n },\n },\n type: 'object',\n },\n type: 'array',\n },\n noDefaults: {\n type: 'boolean',\n },\n unifyParentAndChildTypeChecks: {\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":"checkTypes.js","names":["strictNativeTypes","adjustNames","type","preferred","isGenericMatch","typeNodeName","node","parentNode","ret","meta","brackets","dot","dotBracketEnd","match","slice","length","bracketEnd","endsWith","value","replace","iterateJsdoc","jsdocNode","sourceCode","report","utils","settings","context","jsdocTagsWithPossibleType","filterTags","tag","tagMightHaveTypePosition","preferredTypes","preferredTypesOriginal","structuredTags","mode","injectObjectPreferredTypes","Object","noDefaults","unifyParentAndChildTypeChecks","exemptTagContexts","options","getPreferredTypeInfo","_type","property","hasMatchingPreferredType","typeName","isNameOfGeneric","undefined","checkPostFixes","some","checkPostFix","directNameMatch","values","includes","unifiedSyntaxParentMatch","checkNativeTypes","invalidTypes","changedPreferred","strictNativeType","elements","left","toLowerCase","push","getInvalidTypes","tagName","nameInTag","idx","types","preferredSetting","nextItem","skipRootChecking","name","startsWith","replacement","message","reportSettings","entries","typs","Array","isArray","jsdocTag","typeAst","tryParse","parse","traverse","fixedType","stringify","fix","fixer","replaceText","getText","badType","preferredType","tagValue","JSON","iterateAllJsdocs","docs","description","url","fixable","schema","additionalProperties","properties","items","oneOf"],"sources":["../../src/rules/checkTypes.js"],"sourcesContent":["import {\n parse,\n stringify,\n traverse,\n tryParse,\n} from '@es-joy/jsdoccomment';\nimport iterateJsdoc from '../iterateJsdoc';\n\nconst strictNativeTypes = [\n 'undefined',\n 'null',\n 'boolean',\n 'number',\n 'bigint',\n 'string',\n 'symbol',\n 'object',\n 'Array',\n 'Function',\n 'Date',\n 'RegExp',\n];\n\n/**\n * Adjusts the parent type node `meta` for generic matches (or type node\n * `type` for `JsdocTypeAny`) and sets the type node `value`.\n *\n * @param {string} type The actual type\n * @param {string} preferred The preferred type\n * @param {boolean} isGenericMatch\n * @param {string} typeNodeName\n * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} node\n * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} parentNode\n * @returns {void}\n */\nconst adjustNames = (type, preferred, isGenericMatch, typeNodeName, node, parentNode) => {\n let ret = preferred;\n if (isGenericMatch) {\n if (preferred === '[]') {\n parentNode.meta.brackets = 'square';\n parentNode.meta.dot = false;\n ret = 'Array';\n } else {\n const dotBracketEnd = preferred.match(/\\.(?:<>)?$/u);\n if (dotBracketEnd) {\n parentNode.meta.brackets = 'angle';\n parentNode.meta.dot = true;\n ret = preferred.slice(0, -dotBracketEnd[0].length);\n } else {\n const bracketEnd = preferred.endsWith('<>');\n if (bracketEnd) {\n parentNode.meta.brackets = 'angle';\n parentNode.meta.dot = false;\n ret = preferred.slice(0, -2);\n } else if (\n parentNode.meta.brackets === 'square' &&\n (typeNodeName === '[]' || typeNodeName === 'Array')\n ) {\n parentNode.meta.brackets = 'angle';\n parentNode.meta.dot = false;\n }\n }\n }\n } else if (type === 'JsdocTypeAny') {\n node.type = 'JsdocTypeName';\n }\n\n node.value = ret.replace(/(?:\\.|<>|\\.<>|\\[\\])$/u, '');\n\n // For bare pseudo-types like `<>`\n if (!ret) {\n node.value = typeNodeName;\n }\n};\n\nexport default iterateJsdoc(({\n jsdocNode,\n sourceCode,\n report,\n utils,\n settings,\n context,\n}) => {\n const jsdocTagsWithPossibleType = utils.filterTags((tag) => {\n return utils.tagMightHaveTypePosition(tag.tag);\n });\n\n const {\n preferredTypes: preferredTypesOriginal,\n structuredTags,\n mode,\n } = settings;\n\n const injectObjectPreferredTypes = !('Object' in preferredTypesOriginal ||\n 'object' in preferredTypesOriginal ||\n 'object.<>' in preferredTypesOriginal ||\n 'Object.<>' in preferredTypesOriginal ||\n 'object<>' in preferredTypesOriginal);\n\n const preferredTypes = {\n ...injectObjectPreferredTypes ? {\n Object: 'object',\n 'object.<>': 'Object<>',\n 'Object.<>': 'Object<>',\n 'object<>': 'Object<>',\n } : {},\n ...preferredTypesOriginal,\n };\n\n const {\n noDefaults,\n unifyParentAndChildTypeChecks,\n exemptTagContexts = [],\n } = context.options[0] || {};\n\n /**\n * Gets information about the preferred type: whether there is a matching\n * preferred type, what the type is, and whether it is a match to a generic.\n *\n * @param {string} _type Not currently in use\n * @param {string} typeNodeName\n * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} parentNode\n * @param {string} property\n * @returns {[hasMatchingPreferredType: boolean, typeName: string, isGenericMatch: boolean]}\n */\n const getPreferredTypeInfo = (_type, typeNodeName, parentNode, property) => {\n let hasMatchingPreferredType = false;\n let isGenericMatch = false;\n let typeName = typeNodeName;\n\n const isNameOfGeneric = parentNode !== undefined && parentNode.type === 'JsdocTypeGeneric' && property === 'left';\n if (unifyParentAndChildTypeChecks || isNameOfGeneric) {\n const brackets = parentNode?.meta?.brackets;\n const dot = parentNode?.meta?.dot;\n\n if (brackets === 'angle') {\n const checkPostFixes = dot ? [\n '.', '.<>',\n ] : [\n '<>',\n ];\n isGenericMatch = checkPostFixes.some((checkPostFix) => {\n if (preferredTypes?.[typeNodeName + checkPostFix] !== undefined) {\n typeName += checkPostFix;\n\n return true;\n }\n\n return false;\n });\n }\n\n if (!isGenericMatch && property) {\n const checkPostFixes = dot ? [\n '.', '.<>',\n ] : [\n brackets === 'angle' ? '<>' : '[]',\n ];\n\n isGenericMatch = checkPostFixes.some((checkPostFix) => {\n if (preferredTypes?.[checkPostFix] !== undefined) {\n typeName = checkPostFix;\n\n return true;\n }\n\n return false;\n });\n }\n }\n\n const directNameMatch = preferredTypes?.[typeNodeName] !== undefined &&\n !Object.values(preferredTypes).includes(typeNodeName);\n const unifiedSyntaxParentMatch = property && directNameMatch && unifyParentAndChildTypeChecks;\n isGenericMatch = isGenericMatch || unifiedSyntaxParentMatch;\n\n hasMatchingPreferredType = isGenericMatch ||\n directNameMatch && !property;\n\n return [\n hasMatchingPreferredType, typeName, isGenericMatch,\n ];\n };\n\n /**\n * Iterates strict types to see if any should be added to `invalidTypes` (and\n * the the relevant strict type returned as the new preferred type).\n *\n * @param {string} typeNodeName\n * @param {string} preferred\n * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} parentNode\n * @param {string[]} invalidTypes\n * @returns {string} The `preferred` type string, optionally changed\n */\n const checkNativeTypes = (typeNodeName, preferred, parentNode, invalidTypes) => {\n let changedPreferred = preferred;\n for (const strictNativeType of strictNativeTypes) {\n if (\n strictNativeType === 'object' &&\n (\n // This is not set to remap with exact type match (e.g.,\n // `object: 'Object'`), so can ignore (including if circular)\n !preferredTypes?.[typeNodeName] ||\n // Although present on `preferredTypes` for remapping, this is a\n // parent object without a parent match (and not\n // `unifyParentAndChildTypeChecks`) and we don't want\n // `object<>` given TypeScript issue https://github.com/microsoft/TypeScript/issues/20555\n parentNode?.elements?.length && (\n parentNode?.left?.type === 'JsdocTypeName' &&\n parentNode?.left?.value === 'Object'\n )\n )\n ) {\n continue;\n }\n\n if (strictNativeType !== typeNodeName &&\n strictNativeType.toLowerCase() === typeNodeName.toLowerCase() &&\n\n // Don't report if user has own map for a strict native type\n (!preferredTypes || preferredTypes?.[strictNativeType] === undefined)\n ) {\n changedPreferred = strictNativeType;\n invalidTypes.push([\n typeNodeName, changedPreferred,\n ]);\n break;\n }\n }\n\n return changedPreferred;\n };\n\n /**\n * Collect invalid type info.\n *\n * @param {string} type\n * @param {string} value\n * @param {string} tagName\n * @param {string} nameInTag\n * @param {number} idx\n * @param {string} property\n * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} node\n * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} parentNode\n * @param {string[]} invalidTypes\n * @returns {void}\n */\n const getInvalidTypes = (type, value, tagName, nameInTag, idx, property, node, parentNode, invalidTypes) => {\n let typeNodeName = type === 'JsdocTypeAny' ? '*' : value;\n\n const [\n hasMatchingPreferredType,\n typeName,\n isGenericMatch,\n ] = getPreferredTypeInfo(type, typeNodeName, parentNode, property);\n\n let preferred;\n let types;\n if (hasMatchingPreferredType) {\n const preferredSetting = preferredTypes[typeName];\n typeNodeName = typeName === '[]' ? typeName : typeNodeName;\n\n if (!preferredSetting) {\n invalidTypes.push([\n typeNodeName,\n ]);\n } else if (typeof preferredSetting === 'string') {\n preferred = preferredSetting;\n invalidTypes.push([\n typeNodeName, preferred,\n ]);\n } else if (preferredSetting && typeof preferredSetting === 'object') {\n const nextItem = preferredSetting.skipRootChecking && jsdocTagsWithPossibleType[idx + 1];\n\n if (!nextItem || !nextItem.name.startsWith(`${nameInTag}.`)) {\n preferred = preferredSetting.replacement;\n invalidTypes.push([\n typeNodeName,\n preferred,\n preferredSetting.message,\n ]);\n }\n } else {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.',\n );\n\n return;\n }\n } else if (Object.entries(structuredTags).some(([\n tag,\n {\n type: typs,\n },\n ]) => {\n types = typs;\n\n return tag === tagName &&\n Array.isArray(types) &&\n !types.includes(typeNodeName);\n })) {\n invalidTypes.push([\n typeNodeName, types,\n ]);\n } else if (!noDefaults && type === 'JsdocTypeName') {\n preferred = checkNativeTypes(typeNodeName, preferred, parentNode, invalidTypes);\n }\n\n // For fixer\n if (preferred) {\n adjustNames(type, preferred, isGenericMatch, typeNodeName, node, parentNode);\n }\n };\n\n for (const [\n idx,\n jsdocTag,\n ] of jsdocTagsWithPossibleType.entries()) {\n const invalidTypes = [];\n let typeAst;\n\n try {\n typeAst = mode === 'permissive' ? tryParse(jsdocTag.type) : parse(jsdocTag.type, mode);\n } catch {\n continue;\n }\n\n const {\n tag: tagName,\n name: nameInTag,\n } = jsdocTag;\n\n traverse(typeAst, (node, parentNode, property) => {\n const {\n type,\n value,\n } = node;\n if (![\n 'JsdocTypeName', 'JsdocTypeAny',\n ].includes(type)) {\n return;\n }\n\n getInvalidTypes(type, value, tagName, nameInTag, idx, property, node, parentNode, invalidTypes);\n });\n\n if (invalidTypes.length) {\n const fixedType = stringify(typeAst);\n\n /**\n * @param {any} fixer The ESLint fixer\n * @returns {string}\n */\n const fix = (fixer) => {\n return fixer.replaceText(\n jsdocNode,\n sourceCode.getText(jsdocNode).replace(\n `{${jsdocTag.type}}`,\n `{${fixedType}}`,\n ),\n );\n };\n\n for (const [\n badType,\n preferredType = '',\n message,\n ] of invalidTypes) {\n const tagValue = jsdocTag.name ? ` \"${jsdocTag.name}\"` : '';\n if (exemptTagContexts.some(({\n tag,\n types,\n }) => {\n return tag === tagName &&\n (types === true || types.includes(jsdocTag.type));\n })) {\n continue;\n }\n\n report(\n message ||\n `Invalid JSDoc @${tagName}${tagValue} type \"${badType}\"` +\n (preferredType ? '; ' : '.') +\n (preferredType ? `prefer: ${JSON.stringify(preferredType)}.` : ''),\n preferredType ? fix : null,\n jsdocTag,\n message ? {\n tagName,\n tagValue,\n } : null,\n );\n }\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Reports invalid types.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-types',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n exemptTagContexts: {\n items: {\n additionalProperties: false,\n properties: {\n tag: {\n type: 'string',\n },\n types: {\n oneOf: [\n {\n type: 'boolean',\n },\n {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n ],\n },\n },\n type: 'object',\n },\n type: 'array',\n },\n noDefaults: {\n type: 'boolean',\n },\n unifyParentAndChildTypeChecks: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
@@ -181,8 +181,9 @@ const allBrancheshaveReturnValues = (node, promFilter) => {
181
181
  case 'SwitchStatement':
182
182
  {
183
183
  return node.cases.every(someCase => {
184
- const nde = someCase.consequent.slice(-1)[0];
185
- return !nde || allBrancheshaveReturnValues(nde, promFilter);
184
+ return !someCase.consequent.some(consNode => {
185
+ return consNode.type === 'BreakStatement' || consNode.type === 'ReturnStatement' && consNode.argument === null;
186
+ });
186
187
  });
187
188
  }
188
189
  case 'ThrowStatement':
@@ -1 +1 @@
1
- {"version":3,"file":"hasReturnValue.js","names":["isNewPromiseExpression","node","type","callee","name","isVoidPromise","typeParameters","params","undefinedKeywords","Set","hasReturnValue","throwOnNullReturn","promFilter","returnType","typeAnnotation","has","value","expression","body","some","bodyNode","consequent","alternate","block","handler","finalizer","cases","someCase","nde","argument","Error","allBrancheshaveReturnValues","lastBodyNode","slice","error","message","every","hasNonEmptyResolverCall","resolverName","arguments","length","undefined","test","elements","element","right","left","expressions","subExpression","properties","property","decorators","decorator","computed","key","declarations","id","init","quasi","object","source","hasValueOrExecutorHasNonEmptyResolveValue","anyPromiseAsReturn","allBranches","hasReturnMethod","promiseFilter","hasReturn","prom"],"sources":["../../src/utils/hasReturnValue.js"],"sourcesContent":["/* eslint-disable jsdoc/no-undefined-types */\n/**\n * Checks if a node is a promise but has no resolve value or an empty value.\n * An `undefined` resolve does not count.\n *\n * @param {object} node\n * @returns {boolean}\n */\nconst isNewPromiseExpression = (node) => {\n return node && node.type === 'NewExpression' && node.callee.type === 'Identifier' &&\n node.callee.name === 'Promise';\n};\n\nconst isVoidPromise = (node) => {\n return node?.typeParameters?.params?.[0]?.type === 'TSVoidKeyword';\n};\n\nconst undefinedKeywords = new Set([\n 'TSVoidKeyword', 'TSUndefinedKeyword', 'TSNeverKeyword',\n]);\n\n/**\n * Checks if a node has a return statement. Void return does not count.\n *\n * @param {object} node\n * @param {boolean} throwOnNullReturn\n * @param {PromiseFilter} promFilter\n * @returns {boolean|Node}\n */\n// eslint-disable-next-line complexity\nconst hasReturnValue = (node, throwOnNullReturn, promFilter) => {\n if (!node) {\n return false;\n }\n\n switch (node.type) {\n case 'TSDeclareFunction':\n case 'TSFunctionType':\n case 'TSMethodSignature': {\n const type = node?.returnType?.typeAnnotation?.type;\n return type && !undefinedKeywords.has(type);\n }\n\n case 'MethodDefinition':\n return hasReturnValue(node.value, throwOnNullReturn, promFilter);\n case 'FunctionExpression':\n case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n return node.expression && (!isNewPromiseExpression(node.body) || !isVoidPromise(node.body)) ||\n hasReturnValue(node.body, throwOnNullReturn, promFilter);\n }\n\n case 'BlockStatement': {\n return node.body.some((bodyNode) => {\n return bodyNode.type !== 'FunctionDeclaration' && hasReturnValue(bodyNode, throwOnNullReturn, promFilter);\n });\n }\n\n case 'LabeledStatement':\n case 'WhileStatement':\n case 'DoWhileStatement':\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WithStatement': {\n return hasReturnValue(node.body, throwOnNullReturn, promFilter);\n }\n\n case 'IfStatement': {\n return hasReturnValue(node.consequent, throwOnNullReturn, promFilter) ||\n hasReturnValue(node.alternate, throwOnNullReturn, promFilter);\n }\n\n case 'TryStatement': {\n return hasReturnValue(node.block, throwOnNullReturn, promFilter) ||\n hasReturnValue(node.handler && node.handler.body, throwOnNullReturn, promFilter) ||\n hasReturnValue(node.finalizer, throwOnNullReturn, promFilter);\n }\n\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some((nde) => {\n return hasReturnValue(nde, throwOnNullReturn, promFilter);\n });\n },\n );\n }\n\n case 'ReturnStatement': {\n // void return does not count.\n if (node.argument === null) {\n if (throwOnNullReturn) {\n throw new Error('Null return');\n }\n\n return false;\n }\n\n if (promFilter && isNewPromiseExpression(node.argument)) {\n // Let caller decide how to filter, but this is, at the least,\n // a return of sorts and truthy\n return promFilter(node.argument);\n }\n\n return true;\n }\n\n default: {\n return false;\n }\n }\n};\n\n/**\n * Checks if a node has a return statement. Void return does not count.\n *\n * @param {object} node\n * @param {PromiseFilter} promFilter\n * @returns {boolean|Node}\n */\n// eslint-disable-next-line complexity\nconst allBrancheshaveReturnValues = (node, promFilter) => {\n if (!node) {\n return false;\n }\n\n switch (node.type) {\n case 'TSDeclareFunction':\n case 'TSFunctionType':\n case 'TSMethodSignature': {\n const type = node?.returnType?.typeAnnotation?.type;\n return type && !undefinedKeywords.has(type);\n }\n\n // case 'MethodDefinition':\n // return allBrancheshaveReturnValues(node.value, promFilter);\n case 'FunctionExpression':\n case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n return node.expression && (!isNewPromiseExpression(node.body) || !isVoidPromise(node.body)) ||\n allBrancheshaveReturnValues(node.body, promFilter);\n }\n\n case 'BlockStatement': {\n const lastBodyNode = node.body.slice(-1)[0];\n return allBrancheshaveReturnValues(lastBodyNode, promFilter);\n }\n\n case 'LabeledStatement':\n case 'WhileStatement':\n case 'DoWhileStatement':\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WithStatement': {\n return allBrancheshaveReturnValues(node.body, promFilter);\n }\n\n case 'IfStatement': {\n return allBrancheshaveReturnValues(node.consequent, promFilter) && allBrancheshaveReturnValues(node.alternate, promFilter);\n }\n\n case 'TryStatement': {\n // If `finally` returns, all return\n return node.finalizer && allBrancheshaveReturnValues(node.finalizer, promFilter) ||\n // Return in `try`/`catch` may still occur despite `finally`\n allBrancheshaveReturnValues(node.block, promFilter) &&\n (!node.handler ||\n allBrancheshaveReturnValues(node.handler && node.handler.body, promFilter)) &&\n (!node.finalizer || (() => {\n try {\n hasReturnValue(node.finalizer, true, promFilter);\n } catch (error) {\n // istanbul ignore else\n if (error.message === 'Null return') {\n return false;\n }\n\n // istanbul ignore next\n throw error;\n }\n\n // As long as not an explicit empty return, then return true\n return true;\n })());\n }\n\n case 'SwitchStatement': {\n return node.cases.every(\n (someCase) => {\n const nde = someCase.consequent.slice(-1)[0];\n return !nde || allBrancheshaveReturnValues(nde, promFilter);\n },\n );\n }\n\n case 'ThrowStatement': {\n return true;\n }\n\n case 'ReturnStatement': {\n // void return does not count.\n if (node.argument === null) {\n return false;\n }\n\n if (promFilter && isNewPromiseExpression(node.argument)) {\n // Let caller decide how to filter, but this is, at the least,\n // a return of sorts and truthy\n return promFilter(node.argument);\n }\n\n return true;\n }\n\n default: {\n return false;\n }\n }\n};\n\n/**\n * @callback PromiseFilter\n * @param {object} node\n * @returns {boolean}\n */\n\n/**\n * Avoids further checking child nodes if a nested function shadows the\n * resolver, but otherwise, if name is used (by call or passed in as an\n * argument to another function), will be considered as non-empty.\n *\n * This could check for redeclaration of the resolver, but as such is\n * unlikely, we avoid the performance cost of checking everywhere for\n * (re)declarations or assignments.\n *\n * @param {AST} node\n * @param {string} resolverName\n * @returns {boolean}\n */\n// eslint-disable-next-line complexity\nconst hasNonEmptyResolverCall = (node, resolverName) => {\n if (!node) {\n return false;\n }\n\n // Arrow function without block\n switch (node.type) {\n // istanbul ignore next -- In Babel?\n case 'OptionalCallExpression':\n case 'CallExpression':\n return node.callee.name === resolverName && (\n\n // Implicit or explicit undefined\n node.arguments.length > 1 || node.arguments[0] !== undefined\n ) ||\n node.arguments.some((nde) => {\n // Being passed in to another function (which might invoke it)\n return nde.type === 'Identifier' && nde.name === resolverName ||\n\n // Handle nested items\n hasNonEmptyResolverCall(nde, resolverName);\n });\n case 'ChainExpression':\n case 'Decorator':\n case 'ExpressionStatement':\n return hasNonEmptyResolverCall(node.expression, resolverName);\n case 'ClassBody':\n case 'BlockStatement':\n return node.body.some((bodyNode) => {\n return hasNonEmptyResolverCall(bodyNode, resolverName);\n });\n case 'FunctionExpression':\n case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n // Shadowing\n if (node.params[0]?.name === resolverName) {\n return false;\n }\n\n return hasNonEmptyResolverCall(node.body, resolverName);\n }\n\n case 'LabeledStatement':\n case 'WhileStatement':\n case 'DoWhileStatement':\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WithStatement': {\n return hasNonEmptyResolverCall(node.body, resolverName);\n }\n\n case 'ConditionalExpression':\n case 'IfStatement': {\n return hasNonEmptyResolverCall(node.test, resolverName) ||\n hasNonEmptyResolverCall(node.consequent, resolverName) ||\n hasNonEmptyResolverCall(node.alternate, resolverName);\n }\n\n case 'TryStatement': {\n return hasNonEmptyResolverCall(node.block, resolverName) ||\n hasNonEmptyResolverCall(node.handler && node.handler.body, resolverName) ||\n hasNonEmptyResolverCall(node.finalizer, resolverName);\n }\n\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some((nde) => {\n return hasNonEmptyResolverCall(nde, resolverName);\n });\n },\n );\n }\n\n case 'ArrayPattern':\n case 'ArrayExpression':\n return node.elements.some((element) => {\n return hasNonEmptyResolverCall(element, resolverName);\n });\n\n case 'AssignmentPattern':\n return hasNonEmptyResolverCall(node.right, resolverName);\n\n case 'AssignmentExpression':\n case 'BinaryExpression':\n case 'LogicalExpression': {\n return hasNonEmptyResolverCall(node.left, resolverName) ||\n hasNonEmptyResolverCall(node.right, resolverName);\n }\n\n // Comma\n case 'SequenceExpression':\n case 'TemplateLiteral':\n return node.expressions.some((subExpression) => {\n return hasNonEmptyResolverCall(subExpression, resolverName);\n });\n\n case 'ObjectPattern':\n case 'ObjectExpression':\n return node.properties.some((property) => {\n return hasNonEmptyResolverCall(property, resolverName);\n });\n // istanbul ignore next -- In Babel?\n case 'ClassMethod':\n case 'MethodDefinition':\n return node.decorators && node.decorators.some((decorator) => {\n return hasNonEmptyResolverCall(decorator, resolverName);\n }) ||\n node.computed && hasNonEmptyResolverCall(node.key, resolverName) ||\n hasNonEmptyResolverCall(node.value, resolverName);\n\n // istanbul ignore next -- In Babel?\n case 'ObjectProperty':\n /* eslint-disable no-fallthrough */\n // istanbul ignore next -- In Babel?\n case 'PropertyDefinition':\n // istanbul ignore next -- In Babel?\n case 'ClassProperty':\n /* eslint-enable no-fallthrough */\n case 'Property':\n return node.computed && hasNonEmptyResolverCall(node.key, resolverName) ||\n hasNonEmptyResolverCall(node.value, resolverName);\n // istanbul ignore next -- In Babel?\n case 'ObjectMethod':\n // istanbul ignore next -- In Babel?\n return node.computed && hasNonEmptyResolverCall(node.key, resolverName) ||\n node.arguments.some((nde) => {\n return hasNonEmptyResolverCall(nde, resolverName);\n });\n\n case 'ClassExpression':\n case 'ClassDeclaration':\n return hasNonEmptyResolverCall(node.body, resolverName);\n\n case 'AwaitExpression':\n case 'SpreadElement':\n case 'UnaryExpression':\n case 'YieldExpression':\n return hasNonEmptyResolverCall(node.argument, resolverName);\n\n case 'VariableDeclaration': {\n return node.declarations.some((nde) => {\n return hasNonEmptyResolverCall(nde, resolverName);\n });\n }\n\n case 'VariableDeclarator': {\n return hasNonEmptyResolverCall(node.id, resolverName) ||\n hasNonEmptyResolverCall(node.init, resolverName);\n }\n\n case 'TaggedTemplateExpression':\n return hasNonEmptyResolverCall(node.quasi, resolverName);\n\n // ?.\n // istanbul ignore next -- In Babel?\n case 'OptionalMemberExpression':\n case 'MemberExpression':\n return hasNonEmptyResolverCall(node.object, resolverName) ||\n hasNonEmptyResolverCall(node.property, resolverName);\n\n // istanbul ignore next -- In Babel?\n case 'Import':\n case 'ImportExpression':\n return hasNonEmptyResolverCall(node.source, resolverName);\n\n case 'ReturnStatement': {\n if (node.argument === null) {\n return false;\n }\n\n return hasNonEmptyResolverCall(node.argument, resolverName);\n }\n\n /*\n // Shouldn't need to parse literals/literal components, etc.\n\n case 'Identifier':\n case 'TemplateElement':\n case 'Super':\n // Exports not relevant in this context\n */\n default:\n return false;\n }\n};\n\n/**\n * Checks if a Promise executor has no resolve value or an empty value.\n * An `undefined` resolve does not count.\n *\n * @param {object} node\n * @param {boolean} anyPromiseAsReturn\n * @param {boolean} allBranches\n * @returns {boolean}\n */\nconst hasValueOrExecutorHasNonEmptyResolveValue = (node, anyPromiseAsReturn, allBranches) => {\n const hasReturnMethod = allBranches ?\n (nde, promiseFilter) => {\n let hasReturn;\n try {\n hasReturn = hasReturnValue(nde, true, promiseFilter);\n } catch (error) {\n // istanbul ignore else\n if (error.message === 'Null return') {\n return false;\n }\n\n // istanbul ignore next\n throw error;\n }\n\n // `hasReturn` check needed since `throw` treated as valid return by\n // `allBrancheshaveReturnValues`\n return hasReturn && allBrancheshaveReturnValues(nde, promiseFilter);\n } :\n (nde, promiseFilter) => {\n return hasReturnValue(nde, false, promiseFilter);\n };\n\n return hasReturnMethod(node, (prom) => {\n if (anyPromiseAsReturn) {\n return true;\n }\n\n if (isVoidPromise(prom)) {\n return false;\n }\n\n const [\n {\n params,\n body,\n } = {},\n ] = prom.arguments;\n\n if (!params?.length) {\n return false;\n }\n\n const [\n {\n name: resolverName,\n },\n ] = params;\n\n return hasNonEmptyResolverCall(body, resolverName);\n });\n};\n\nexport {\n hasReturnValue,\n hasValueOrExecutorHasNonEmptyResolveValue,\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"hasReturnValue.js","names":["isNewPromiseExpression","node","type","callee","name","isVoidPromise","typeParameters","params","undefinedKeywords","Set","hasReturnValue","throwOnNullReturn","promFilter","returnType","typeAnnotation","has","value","expression","body","some","bodyNode","consequent","alternate","block","handler","finalizer","cases","someCase","nde","argument","Error","allBrancheshaveReturnValues","lastBodyNode","slice","error","message","every","consNode","hasNonEmptyResolverCall","resolverName","arguments","length","undefined","test","elements","element","right","left","expressions","subExpression","properties","property","decorators","decorator","computed","key","declarations","id","init","quasi","object","source","hasValueOrExecutorHasNonEmptyResolveValue","anyPromiseAsReturn","allBranches","hasReturnMethod","promiseFilter","hasReturn","prom"],"sources":["../../src/utils/hasReturnValue.js"],"sourcesContent":["/* eslint-disable jsdoc/no-undefined-types */\n/**\n * Checks if a node is a promise but has no resolve value or an empty value.\n * An `undefined` resolve does not count.\n *\n * @param {object} node\n * @returns {boolean}\n */\nconst isNewPromiseExpression = (node) => {\n return node && node.type === 'NewExpression' && node.callee.type === 'Identifier' &&\n node.callee.name === 'Promise';\n};\n\nconst isVoidPromise = (node) => {\n return node?.typeParameters?.params?.[0]?.type === 'TSVoidKeyword';\n};\n\nconst undefinedKeywords = new Set([\n 'TSVoidKeyword', 'TSUndefinedKeyword', 'TSNeverKeyword',\n]);\n\n/**\n * Checks if a node has a return statement. Void return does not count.\n *\n * @param {object} node\n * @param {boolean} throwOnNullReturn\n * @param {PromiseFilter} promFilter\n * @returns {boolean|Node}\n */\n// eslint-disable-next-line complexity\nconst hasReturnValue = (node, throwOnNullReturn, promFilter) => {\n if (!node) {\n return false;\n }\n\n switch (node.type) {\n case 'TSDeclareFunction':\n case 'TSFunctionType':\n case 'TSMethodSignature': {\n const type = node?.returnType?.typeAnnotation?.type;\n return type && !undefinedKeywords.has(type);\n }\n\n case 'MethodDefinition':\n return hasReturnValue(node.value, throwOnNullReturn, promFilter);\n case 'FunctionExpression':\n case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n return node.expression && (!isNewPromiseExpression(node.body) || !isVoidPromise(node.body)) ||\n hasReturnValue(node.body, throwOnNullReturn, promFilter);\n }\n\n case 'BlockStatement': {\n return node.body.some((bodyNode) => {\n return bodyNode.type !== 'FunctionDeclaration' && hasReturnValue(bodyNode, throwOnNullReturn, promFilter);\n });\n }\n\n case 'LabeledStatement':\n case 'WhileStatement':\n case 'DoWhileStatement':\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WithStatement': {\n return hasReturnValue(node.body, throwOnNullReturn, promFilter);\n }\n\n case 'IfStatement': {\n return hasReturnValue(node.consequent, throwOnNullReturn, promFilter) ||\n hasReturnValue(node.alternate, throwOnNullReturn, promFilter);\n }\n\n case 'TryStatement': {\n return hasReturnValue(node.block, throwOnNullReturn, promFilter) ||\n hasReturnValue(node.handler && node.handler.body, throwOnNullReturn, promFilter) ||\n hasReturnValue(node.finalizer, throwOnNullReturn, promFilter);\n }\n\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some((nde) => {\n return hasReturnValue(nde, throwOnNullReturn, promFilter);\n });\n },\n );\n }\n\n case 'ReturnStatement': {\n // void return does not count.\n if (node.argument === null) {\n if (throwOnNullReturn) {\n throw new Error('Null return');\n }\n\n return false;\n }\n\n if (promFilter && isNewPromiseExpression(node.argument)) {\n // Let caller decide how to filter, but this is, at the least,\n // a return of sorts and truthy\n return promFilter(node.argument);\n }\n\n return true;\n }\n\n default: {\n return false;\n }\n }\n};\n\n/**\n * Checks if a node has a return statement. Void return does not count.\n *\n * @param {object} node\n * @param {PromiseFilter} promFilter\n * @returns {boolean|Node}\n */\n// eslint-disable-next-line complexity\nconst allBrancheshaveReturnValues = (node, promFilter) => {\n if (!node) {\n return false;\n }\n\n switch (node.type) {\n case 'TSDeclareFunction':\n case 'TSFunctionType':\n case 'TSMethodSignature': {\n const type = node?.returnType?.typeAnnotation?.type;\n return type && !undefinedKeywords.has(type);\n }\n\n // case 'MethodDefinition':\n // return allBrancheshaveReturnValues(node.value, promFilter);\n case 'FunctionExpression':\n case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n return node.expression && (!isNewPromiseExpression(node.body) || !isVoidPromise(node.body)) ||\n allBrancheshaveReturnValues(node.body, promFilter);\n }\n\n case 'BlockStatement': {\n const lastBodyNode = node.body.slice(-1)[0];\n return allBrancheshaveReturnValues(lastBodyNode, promFilter);\n }\n\n case 'LabeledStatement':\n case 'WhileStatement':\n case 'DoWhileStatement':\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WithStatement': {\n return allBrancheshaveReturnValues(node.body, promFilter);\n }\n\n case 'IfStatement': {\n return allBrancheshaveReturnValues(node.consequent, promFilter) && allBrancheshaveReturnValues(node.alternate, promFilter);\n }\n\n case 'TryStatement': {\n // If `finally` returns, all return\n return node.finalizer && allBrancheshaveReturnValues(node.finalizer, promFilter) ||\n // Return in `try`/`catch` may still occur despite `finally`\n allBrancheshaveReturnValues(node.block, promFilter) &&\n (!node.handler ||\n allBrancheshaveReturnValues(node.handler && node.handler.body, promFilter)) &&\n (!node.finalizer || (() => {\n try {\n hasReturnValue(node.finalizer, true, promFilter);\n } catch (error) {\n // istanbul ignore else\n if (error.message === 'Null return') {\n return false;\n }\n\n // istanbul ignore next\n throw error;\n }\n\n // As long as not an explicit empty return, then return true\n return true;\n })());\n }\n\n case 'SwitchStatement': {\n return node.cases.every(\n (someCase) => {\n return !someCase.consequent.some((consNode) => {\n return consNode.type === 'BreakStatement' ||\n consNode.type === 'ReturnStatement' && consNode.argument === null;\n });\n },\n );\n }\n\n case 'ThrowStatement': {\n return true;\n }\n\n case 'ReturnStatement': {\n // void return does not count.\n if (node.argument === null) {\n return false;\n }\n\n if (promFilter && isNewPromiseExpression(node.argument)) {\n // Let caller decide how to filter, but this is, at the least,\n // a return of sorts and truthy\n return promFilter(node.argument);\n }\n\n return true;\n }\n\n default: {\n return false;\n }\n }\n};\n\n/**\n * @callback PromiseFilter\n * @param {object} node\n * @returns {boolean}\n */\n\n/**\n * Avoids further checking child nodes if a nested function shadows the\n * resolver, but otherwise, if name is used (by call or passed in as an\n * argument to another function), will be considered as non-empty.\n *\n * This could check for redeclaration of the resolver, but as such is\n * unlikely, we avoid the performance cost of checking everywhere for\n * (re)declarations or assignments.\n *\n * @param {AST} node\n * @param {string} resolverName\n * @returns {boolean}\n */\n// eslint-disable-next-line complexity\nconst hasNonEmptyResolverCall = (node, resolverName) => {\n if (!node) {\n return false;\n }\n\n // Arrow function without block\n switch (node.type) {\n // istanbul ignore next -- In Babel?\n case 'OptionalCallExpression':\n case 'CallExpression':\n return node.callee.name === resolverName && (\n\n // Implicit or explicit undefined\n node.arguments.length > 1 || node.arguments[0] !== undefined\n ) ||\n node.arguments.some((nde) => {\n // Being passed in to another function (which might invoke it)\n return nde.type === 'Identifier' && nde.name === resolverName ||\n\n // Handle nested items\n hasNonEmptyResolverCall(nde, resolverName);\n });\n case 'ChainExpression':\n case 'Decorator':\n case 'ExpressionStatement':\n return hasNonEmptyResolverCall(node.expression, resolverName);\n case 'ClassBody':\n case 'BlockStatement':\n return node.body.some((bodyNode) => {\n return hasNonEmptyResolverCall(bodyNode, resolverName);\n });\n case 'FunctionExpression':\n case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n // Shadowing\n if (node.params[0]?.name === resolverName) {\n return false;\n }\n\n return hasNonEmptyResolverCall(node.body, resolverName);\n }\n\n case 'LabeledStatement':\n case 'WhileStatement':\n case 'DoWhileStatement':\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WithStatement': {\n return hasNonEmptyResolverCall(node.body, resolverName);\n }\n\n case 'ConditionalExpression':\n case 'IfStatement': {\n return hasNonEmptyResolverCall(node.test, resolverName) ||\n hasNonEmptyResolverCall(node.consequent, resolverName) ||\n hasNonEmptyResolverCall(node.alternate, resolverName);\n }\n\n case 'TryStatement': {\n return hasNonEmptyResolverCall(node.block, resolverName) ||\n hasNonEmptyResolverCall(node.handler && node.handler.body, resolverName) ||\n hasNonEmptyResolverCall(node.finalizer, resolverName);\n }\n\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some((nde) => {\n return hasNonEmptyResolverCall(nde, resolverName);\n });\n },\n );\n }\n\n case 'ArrayPattern':\n case 'ArrayExpression':\n return node.elements.some((element) => {\n return hasNonEmptyResolverCall(element, resolverName);\n });\n\n case 'AssignmentPattern':\n return hasNonEmptyResolverCall(node.right, resolverName);\n\n case 'AssignmentExpression':\n case 'BinaryExpression':\n case 'LogicalExpression': {\n return hasNonEmptyResolverCall(node.left, resolverName) ||\n hasNonEmptyResolverCall(node.right, resolverName);\n }\n\n // Comma\n case 'SequenceExpression':\n case 'TemplateLiteral':\n return node.expressions.some((subExpression) => {\n return hasNonEmptyResolverCall(subExpression, resolverName);\n });\n\n case 'ObjectPattern':\n case 'ObjectExpression':\n return node.properties.some((property) => {\n return hasNonEmptyResolverCall(property, resolverName);\n });\n // istanbul ignore next -- In Babel?\n case 'ClassMethod':\n case 'MethodDefinition':\n return node.decorators && node.decorators.some((decorator) => {\n return hasNonEmptyResolverCall(decorator, resolverName);\n }) ||\n node.computed && hasNonEmptyResolverCall(node.key, resolverName) ||\n hasNonEmptyResolverCall(node.value, resolverName);\n\n // istanbul ignore next -- In Babel?\n case 'ObjectProperty':\n /* eslint-disable no-fallthrough */\n // istanbul ignore next -- In Babel?\n case 'PropertyDefinition':\n // istanbul ignore next -- In Babel?\n case 'ClassProperty':\n /* eslint-enable no-fallthrough */\n case 'Property':\n return node.computed && hasNonEmptyResolverCall(node.key, resolverName) ||\n hasNonEmptyResolverCall(node.value, resolverName);\n // istanbul ignore next -- In Babel?\n case 'ObjectMethod':\n // istanbul ignore next -- In Babel?\n return node.computed && hasNonEmptyResolverCall(node.key, resolverName) ||\n node.arguments.some((nde) => {\n return hasNonEmptyResolverCall(nde, resolverName);\n });\n\n case 'ClassExpression':\n case 'ClassDeclaration':\n return hasNonEmptyResolverCall(node.body, resolverName);\n\n case 'AwaitExpression':\n case 'SpreadElement':\n case 'UnaryExpression':\n case 'YieldExpression':\n return hasNonEmptyResolverCall(node.argument, resolverName);\n\n case 'VariableDeclaration': {\n return node.declarations.some((nde) => {\n return hasNonEmptyResolverCall(nde, resolverName);\n });\n }\n\n case 'VariableDeclarator': {\n return hasNonEmptyResolverCall(node.id, resolverName) ||\n hasNonEmptyResolverCall(node.init, resolverName);\n }\n\n case 'TaggedTemplateExpression':\n return hasNonEmptyResolverCall(node.quasi, resolverName);\n\n // ?.\n // istanbul ignore next -- In Babel?\n case 'OptionalMemberExpression':\n case 'MemberExpression':\n return hasNonEmptyResolverCall(node.object, resolverName) ||\n hasNonEmptyResolverCall(node.property, resolverName);\n\n // istanbul ignore next -- In Babel?\n case 'Import':\n case 'ImportExpression':\n return hasNonEmptyResolverCall(node.source, resolverName);\n\n case 'ReturnStatement': {\n if (node.argument === null) {\n return false;\n }\n\n return hasNonEmptyResolverCall(node.argument, resolverName);\n }\n\n /*\n // Shouldn't need to parse literals/literal components, etc.\n\n case 'Identifier':\n case 'TemplateElement':\n case 'Super':\n // Exports not relevant in this context\n */\n default:\n return false;\n }\n};\n\n/**\n * Checks if a Promise executor has no resolve value or an empty value.\n * An `undefined` resolve does not count.\n *\n * @param {object} node\n * @param {boolean} anyPromiseAsReturn\n * @param {boolean} allBranches\n * @returns {boolean}\n */\nconst hasValueOrExecutorHasNonEmptyResolveValue = (node, anyPromiseAsReturn, allBranches) => {\n const hasReturnMethod = allBranches ?\n (nde, promiseFilter) => {\n let hasReturn;\n try {\n hasReturn = hasReturnValue(nde, true, promiseFilter);\n } catch (error) {\n // istanbul ignore else\n if (error.message === 'Null return') {\n return false;\n }\n\n // istanbul ignore next\n throw error;\n }\n\n // `hasReturn` check needed since `throw` treated as valid return by\n // `allBrancheshaveReturnValues`\n return hasReturn && allBrancheshaveReturnValues(nde, promiseFilter);\n } :\n (nde, promiseFilter) => {\n return hasReturnValue(nde, false, promiseFilter);\n };\n\n return hasReturnMethod(node, (prom) => {\n if (anyPromiseAsReturn) {\n return true;\n }\n\n if (isVoidPromise(prom)) {\n return false;\n }\n\n const [\n {\n params,\n body,\n } = {},\n ] = prom.arguments;\n\n if (!params?.length) {\n return false;\n }\n\n const [\n {\n name: resolverName,\n },\n ] = params;\n\n return hasNonEmptyResolverCall(body, resolverName);\n });\n};\n\nexport {\n hasReturnValue,\n hasValueOrExecutorHasNonEmptyResolveValue,\n};\n"],"mappings":"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"}
package/package.json CHANGED
@@ -117,5 +117,5 @@
117
117
  "test-cov": "cross-env TIMING=1 nyc --reporter text npm run test-no-cov",
118
118
  "test-index": "npm run test-no-cov -- test/rules/index.js"
119
119
  },
120
- "version": "39.5.0"
120
+ "version": "39.6.0"
121
121
  }