eslint-plugin-jsdoc 39.3.15 → 39.3.17
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
|
@@ -3770,6 +3770,16 @@ declare global {
|
|
|
3770
3770
|
b: float,
|
|
3771
3771
|
): Color;
|
|
3772
3772
|
}
|
|
3773
|
+
|
|
3774
|
+
/**
|
|
3775
|
+
* @param this desc
|
|
3776
|
+
* @param bar number to return
|
|
3777
|
+
* @returns number returned back to caller
|
|
3778
|
+
*/
|
|
3779
|
+
function foo(this: T, bar: number): number {
|
|
3780
|
+
console.log(this.name);
|
|
3781
|
+
return bar;
|
|
3782
|
+
}
|
|
3773
3783
|
````
|
|
3774
3784
|
|
|
3775
3785
|
|
|
@@ -17542,6 +17552,18 @@ function quux () {
|
|
|
17542
17552
|
}
|
|
17543
17553
|
}
|
|
17544
17554
|
// Message: JSDoc @returns declaration present but return expression not available in function.
|
|
17555
|
+
|
|
17556
|
+
/**
|
|
17557
|
+
* @returns {true}
|
|
17558
|
+
*/
|
|
17559
|
+
function quux () {
|
|
17560
|
+
if (true) {
|
|
17561
|
+
throw new Error('abc');
|
|
17562
|
+
}
|
|
17563
|
+
|
|
17564
|
+
throw new Error('def');
|
|
17565
|
+
}
|
|
17566
|
+
// Message: JSDoc @returns declaration present but return expression not available in function.
|
|
17545
17567
|
````
|
|
17546
17568
|
|
|
17547
17569
|
The following patterns are not considered problems:
|
|
@@ -17993,6 +18015,17 @@ const quux = function () {
|
|
|
17993
18015
|
resolve(3);
|
|
17994
18016
|
});
|
|
17995
18017
|
};
|
|
18018
|
+
|
|
18019
|
+
/**
|
|
18020
|
+
* @returns {true}
|
|
18021
|
+
*/
|
|
18022
|
+
function quux () {
|
|
18023
|
+
if (true) {
|
|
18024
|
+
return true;
|
|
18025
|
+
}
|
|
18026
|
+
|
|
18027
|
+
throw new Error('Fail');
|
|
18028
|
+
}
|
|
17996
18029
|
````
|
|
17997
18030
|
|
|
17998
18031
|
|
|
@@ -48,7 +48,7 @@ const validateParameterNames = (targetTagName, allowExtraTrailingParamDocs, chec
|
|
|
48
48
|
return false;
|
|
49
49
|
}
|
|
50
50
|
let functionParameterName = functionParameterNames[index - dotted + thisOffset];
|
|
51
|
-
if (functionParameterName === 'this') {
|
|
51
|
+
if (functionParameterName === 'this' && tag.name.trim() !== 'this') {
|
|
52
52
|
++thisOffset;
|
|
53
53
|
functionParameterName = functionParameterNames[index - dotted + thisOffset];
|
|
54
54
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkParamNames.js","names":["validateParameterNames","targetTagName","allowExtraTrailingParamDocs","checkDestructured","checkRestProperty","checkTypesRegex","disableExtraPropertyReporting","enableFixer","functionParameterNames","jsdoc","utils","report","paramTags","Object","entries","tags","filter","tag","paramTagsNonNested","name","includes","dotted","thisOffset","some","index","tagsIndex","dupeTagInfo","find","tgsIndex","tg","idx","reportJSDoc","removeTag","functionParameterName","Array","isArray","type","search","parameterName","names","properties","hasPropertyRest","rests","annotationParamName","undefined","trim","tagName","expectedNames","map","actualNames","paramTag","actualTypes","missingProperties","notCheckingNames","notCheckingName","startsWith","actualNameIdx","findIndex","actualName","comparePaths","missingIndex","pathDoesNotBeginWith","line","source","number","length","push","tagPlacement","hasMissing","missingProperty","extraProperties","match","prop","split","extraProperty","funcParamName","item","join","validateParameterNamesDeep","_allowExtraTrailingParamDocs","jsdocParameterNames","lastRealParameter","jsdocParameterName","isPropertyPath","pathRootNodeName","slice","indexOf","endsWith","iterateJsdoc","context","checkTypesPattern","useDefaultObjectProperties","options","getRegexFromString","jsdocParameterNamesDeep","getJsdocTagsDeep","getFunctionParameterNames","getPreferredTagName","isError","meta","docs","description","url","fixable","schema","additionalProperties"],"sources":["../../src/rules/checkParamNames.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\n/**\n * @param {string} targetTagName\n * @param {boolean} allowExtraTrailingParamDocs\n * @param {boolean} checkDestructured\n * @param {boolean} checkRestProperty\n * @param {RegExp} checkTypesRegex\n * @param {boolean} disableExtraPropertyReporting\n * @param {boolean} enableFixer\n * @param {Array<string>} functionParameterNames\n * @param jsdoc\n * @param utils\n * @param report\n * @returns {boolean}\n */\nconst validateParameterNames = (\n targetTagName,\n allowExtraTrailingParamDocs,\n checkDestructured,\n checkRestProperty,\n checkTypesRegex,\n disableExtraPropertyReporting,\n enableFixer,\n functionParameterNames, jsdoc, utils, report,\n) => {\n const paramTags = Object.entries(jsdoc.tags).filter(([\n , tag,\n ]) => {\n return tag.tag === targetTagName;\n });\n const paramTagsNonNested = paramTags.filter(([\n , tag,\n ]) => {\n return !tag.name.includes('.');\n });\n\n let dotted = 0;\n let thisOffset = 0;\n\n // eslint-disable-next-line complexity\n return paramTags.some(([\n , tag,\n ], index) => {\n let tagsIndex;\n const dupeTagInfo = paramTags.find(([\n tgsIndex,\n tg,\n ], idx) => {\n tagsIndex = tgsIndex;\n\n return tg.name === tag.name && idx !== index;\n });\n if (dupeTagInfo) {\n utils.reportJSDoc(`Duplicate @${targetTagName} \"${tag.name}\"`, dupeTagInfo[1], enableFixer ? () => {\n utils.removeTag(tagsIndex);\n } : null);\n\n return true;\n }\n\n if (tag.name.includes('.')) {\n dotted++;\n\n return false;\n }\n\n let functionParameterName = functionParameterNames[index - dotted + thisOffset];\n if (functionParameterName === 'this') {\n ++thisOffset;\n functionParameterName = functionParameterNames[index - dotted + thisOffset];\n }\n\n if (!functionParameterName) {\n if (allowExtraTrailingParamDocs) {\n return false;\n }\n\n report(\n `@${targetTagName} \"${tag.name}\" does not match an existing function parameter.`,\n null,\n tag,\n );\n\n return true;\n }\n\n if (Array.isArray(functionParameterName)) {\n if (!checkDestructured) {\n return false;\n }\n\n if (tag.type && tag.type.search(checkTypesRegex) === -1) {\n return false;\n }\n\n const [\n parameterName,\n {\n names: properties,\n hasPropertyRest,\n rests,\n annotationParamName,\n },\n ] = functionParameterName;\n if (annotationParamName !== undefined) {\n const name = tag.name.trim();\n if (name !== annotationParamName) {\n report(`@${targetTagName} \"${name}\" does not match parameter name \"${annotationParamName}\"`, null, tag);\n }\n }\n\n const tagName = parameterName === undefined ? tag.name.trim() : parameterName;\n const expectedNames = properties.map((name) => {\n return `${tagName}.${name}`;\n });\n const actualNames = paramTags.map(([\n , paramTag,\n ]) => {\n return paramTag.name.trim();\n });\n const actualTypes = paramTags.map(([\n , paramTag,\n ]) => {\n return paramTag.type;\n });\n\n const missingProperties = [];\n const notCheckingNames = [];\n\n for (const [\n idx,\n name,\n ] of expectedNames.entries()) {\n if (notCheckingNames.some((notCheckingName) => {\n return name.startsWith(notCheckingName);\n })) {\n continue;\n }\n\n const actualNameIdx = actualNames.findIndex((actualName) => {\n return utils.comparePaths(name)(actualName);\n });\n if (actualNameIdx === -1) {\n if (!checkRestProperty && rests[idx]) {\n continue;\n }\n\n const missingIndex = actualNames.findIndex((actualName) => {\n return utils.pathDoesNotBeginWith(name, actualName);\n });\n const line = tag.source[0].number - 1 + (missingIndex > -1 ? missingIndex : actualNames.length);\n missingProperties.push({\n name,\n tagPlacement: {\n line: line === 0 ? 1 : line,\n },\n });\n } else if (actualTypes[actualNameIdx].search(checkTypesRegex) === -1 && actualTypes[actualNameIdx] !== '') {\n notCheckingNames.push(name);\n }\n }\n\n const hasMissing = missingProperties.length;\n if (hasMissing) {\n for (const {\n tagPlacement,\n name: missingProperty,\n } of missingProperties) {\n report(`Missing @${targetTagName} \"${missingProperty}\"`, null, tagPlacement);\n }\n }\n\n if (!hasPropertyRest || checkRestProperty) {\n const extraProperties = [];\n for (const [\n idx,\n name,\n ] of actualNames.entries()) {\n const match = name.startsWith(tag.name.trim() + '.');\n if (\n match && !expectedNames.some(\n utils.comparePaths(name),\n ) && !utils.comparePaths(name)(tag.name) &&\n (!disableExtraPropertyReporting || properties.some((prop) => {\n return prop.split('.').length >= name.split('.').length - 1;\n }))\n ) {\n extraProperties.push([\n name, paramTags[idx][1],\n ]);\n }\n }\n\n if (extraProperties.length) {\n for (const [\n extraProperty,\n tg,\n ] of extraProperties) {\n report(`@${targetTagName} \"${extraProperty}\" does not exist on ${tag.name}`, null, tg);\n }\n\n return true;\n }\n }\n\n return hasMissing;\n }\n\n let funcParamName;\n if (typeof functionParameterName === 'object') {\n const {\n name,\n } = functionParameterName;\n funcParamName = name;\n } else {\n funcParamName = functionParameterName;\n }\n\n if (funcParamName !== tag.name.trim()) {\n // Todo: Improve for array or object child items\n const actualNames = paramTagsNonNested.map(([\n , {\n name,\n },\n ]) => {\n return name.trim();\n });\n const expectedNames = functionParameterNames.map((item, idx) => {\n if (item?.[1]?.names) {\n return actualNames[idx];\n }\n\n return item;\n }).filter((item) => {\n return item !== 'this';\n }).join(', ');\n\n report(\n `Expected @${targetTagName} names to be \"${expectedNames}\". Got \"${actualNames.join(', ')}\".`,\n null,\n tag,\n );\n\n return true;\n }\n\n return false;\n });\n};\n\n/**\n * @param {string} targetTagName\n * @param {boolean} _allowExtraTrailingParamDocs\n * @param {Array<string>} jsdocParameterNames\n * @param jsdoc\n * @param {Function} report\n * @returns {boolean}\n */\nconst validateParameterNamesDeep = (\n targetTagName, _allowExtraTrailingParamDocs,\n jsdocParameterNames, jsdoc, report,\n) => {\n let lastRealParameter;\n\n return jsdocParameterNames.some(({\n name: jsdocParameterName,\n idx,\n }) => {\n const isPropertyPath = jsdocParameterName.includes('.');\n\n if (isPropertyPath) {\n if (!lastRealParameter) {\n report(`@${targetTagName} path declaration (\"${jsdocParameterName}\") appears before any real parameter.`, null, jsdoc.tags[idx]);\n\n return true;\n }\n\n let pathRootNodeName = jsdocParameterName.slice(0, jsdocParameterName.indexOf('.'));\n\n if (pathRootNodeName.endsWith('[]')) {\n pathRootNodeName = pathRootNodeName.slice(0, -2);\n }\n\n if (pathRootNodeName !== lastRealParameter) {\n report(\n `@${targetTagName} path declaration (\"${jsdocParameterName}\") root node name (\"${pathRootNodeName}\") ` +\n `does not match previous real parameter name (\"${lastRealParameter}\").`,\n null,\n jsdoc.tags[idx],\n );\n\n return true;\n }\n } else {\n lastRealParameter = jsdocParameterName;\n }\n\n return false;\n });\n};\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n report,\n utils,\n}) => {\n const {\n allowExtraTrailingParamDocs,\n checkDestructured = true,\n checkRestProperty = false,\n checkTypesPattern = '/^(?:[oO]bject|[aA]rray|PlainObject|Generic(?:Object|Array))$/',\n enableFixer = false,\n useDefaultObjectProperties = false,\n disableExtraPropertyReporting = false,\n } = context.options[0] || {};\n\n const checkTypesRegex = utils.getRegexFromString(checkTypesPattern);\n\n const jsdocParameterNamesDeep = utils.getJsdocTagsDeep('param');\n if (!jsdocParameterNamesDeep.length) {\n return;\n }\n\n const functionParameterNames = utils.getFunctionParameterNames(useDefaultObjectProperties);\n const targetTagName = utils.getPreferredTagName({\n tagName: 'param',\n });\n const isError = validateParameterNames(\n targetTagName,\n allowExtraTrailingParamDocs,\n checkDestructured,\n checkRestProperty,\n checkTypesRegex,\n disableExtraPropertyReporting,\n enableFixer,\n functionParameterNames,\n jsdoc,\n utils,\n report,\n );\n\n if (isError || !checkDestructured) {\n return;\n }\n\n validateParameterNamesDeep(\n targetTagName, allowExtraTrailingParamDocs, jsdocParameterNamesDeep, jsdoc, report,\n );\n}, {\n meta: {\n docs: {\n description: 'Ensures that parameter names in JSDoc match those in the function declaration.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-param-names',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n allowExtraTrailingParamDocs: {\n type: 'boolean',\n },\n checkDestructured: {\n type: 'boolean',\n },\n checkRestProperty: {\n type: 'boolean',\n },\n checkTypesPattern: {\n type: 'string',\n },\n disableExtraPropertyReporting: {\n type: 'boolean',\n },\n enableFixer: {\n type: 'boolean',\n },\n useDefaultObjectProperties: {\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":"checkParamNames.js","names":["validateParameterNames","targetTagName","allowExtraTrailingParamDocs","checkDestructured","checkRestProperty","checkTypesRegex","disableExtraPropertyReporting","enableFixer","functionParameterNames","jsdoc","utils","report","paramTags","Object","entries","tags","filter","tag","paramTagsNonNested","name","includes","dotted","thisOffset","some","index","tagsIndex","dupeTagInfo","find","tgsIndex","tg","idx","reportJSDoc","removeTag","functionParameterName","trim","Array","isArray","type","search","parameterName","names","properties","hasPropertyRest","rests","annotationParamName","undefined","tagName","expectedNames","map","actualNames","paramTag","actualTypes","missingProperties","notCheckingNames","notCheckingName","startsWith","actualNameIdx","findIndex","actualName","comparePaths","missingIndex","pathDoesNotBeginWith","line","source","number","length","push","tagPlacement","hasMissing","missingProperty","extraProperties","match","prop","split","extraProperty","funcParamName","item","join","validateParameterNamesDeep","_allowExtraTrailingParamDocs","jsdocParameterNames","lastRealParameter","jsdocParameterName","isPropertyPath","pathRootNodeName","slice","indexOf","endsWith","iterateJsdoc","context","checkTypesPattern","useDefaultObjectProperties","options","getRegexFromString","jsdocParameterNamesDeep","getJsdocTagsDeep","getFunctionParameterNames","getPreferredTagName","isError","meta","docs","description","url","fixable","schema","additionalProperties"],"sources":["../../src/rules/checkParamNames.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\n/**\n * @param {string} targetTagName\n * @param {boolean} allowExtraTrailingParamDocs\n * @param {boolean} checkDestructured\n * @param {boolean} checkRestProperty\n * @param {RegExp} checkTypesRegex\n * @param {boolean} disableExtraPropertyReporting\n * @param {boolean} enableFixer\n * @param {Array<string>} functionParameterNames\n * @param jsdoc\n * @param utils\n * @param report\n * @returns {boolean}\n */\nconst validateParameterNames = (\n targetTagName,\n allowExtraTrailingParamDocs,\n checkDestructured,\n checkRestProperty,\n checkTypesRegex,\n disableExtraPropertyReporting,\n enableFixer,\n functionParameterNames, jsdoc, utils, report,\n) => {\n const paramTags = Object.entries(jsdoc.tags).filter(([\n , tag,\n ]) => {\n return tag.tag === targetTagName;\n });\n const paramTagsNonNested = paramTags.filter(([\n , tag,\n ]) => {\n return !tag.name.includes('.');\n });\n\n let dotted = 0;\n let thisOffset = 0;\n\n // eslint-disable-next-line complexity\n return paramTags.some(([\n , tag,\n ], index) => {\n let tagsIndex;\n const dupeTagInfo = paramTags.find(([\n tgsIndex,\n tg,\n ], idx) => {\n tagsIndex = tgsIndex;\n\n return tg.name === tag.name && idx !== index;\n });\n if (dupeTagInfo) {\n utils.reportJSDoc(`Duplicate @${targetTagName} \"${tag.name}\"`, dupeTagInfo[1], enableFixer ? () => {\n utils.removeTag(tagsIndex);\n } : null);\n\n return true;\n }\n\n if (tag.name.includes('.')) {\n dotted++;\n\n return false;\n }\n\n let functionParameterName = functionParameterNames[index - dotted + thisOffset];\n if (functionParameterName === 'this' && tag.name.trim() !== 'this') {\n ++thisOffset;\n functionParameterName = functionParameterNames[index - dotted + thisOffset];\n }\n\n if (!functionParameterName) {\n if (allowExtraTrailingParamDocs) {\n return false;\n }\n\n report(\n `@${targetTagName} \"${tag.name}\" does not match an existing function parameter.`,\n null,\n tag,\n );\n\n return true;\n }\n\n if (Array.isArray(functionParameterName)) {\n if (!checkDestructured) {\n return false;\n }\n\n if (tag.type && tag.type.search(checkTypesRegex) === -1) {\n return false;\n }\n\n const [\n parameterName,\n {\n names: properties,\n hasPropertyRest,\n rests,\n annotationParamName,\n },\n ] = functionParameterName;\n if (annotationParamName !== undefined) {\n const name = tag.name.trim();\n if (name !== annotationParamName) {\n report(`@${targetTagName} \"${name}\" does not match parameter name \"${annotationParamName}\"`, null, tag);\n }\n }\n\n const tagName = parameterName === undefined ? tag.name.trim() : parameterName;\n const expectedNames = properties.map((name) => {\n return `${tagName}.${name}`;\n });\n const actualNames = paramTags.map(([\n , paramTag,\n ]) => {\n return paramTag.name.trim();\n });\n const actualTypes = paramTags.map(([\n , paramTag,\n ]) => {\n return paramTag.type;\n });\n\n const missingProperties = [];\n const notCheckingNames = [];\n\n for (const [\n idx,\n name,\n ] of expectedNames.entries()) {\n if (notCheckingNames.some((notCheckingName) => {\n return name.startsWith(notCheckingName);\n })) {\n continue;\n }\n\n const actualNameIdx = actualNames.findIndex((actualName) => {\n return utils.comparePaths(name)(actualName);\n });\n if (actualNameIdx === -1) {\n if (!checkRestProperty && rests[idx]) {\n continue;\n }\n\n const missingIndex = actualNames.findIndex((actualName) => {\n return utils.pathDoesNotBeginWith(name, actualName);\n });\n const line = tag.source[0].number - 1 + (missingIndex > -1 ? missingIndex : actualNames.length);\n missingProperties.push({\n name,\n tagPlacement: {\n line: line === 0 ? 1 : line,\n },\n });\n } else if (actualTypes[actualNameIdx].search(checkTypesRegex) === -1 && actualTypes[actualNameIdx] !== '') {\n notCheckingNames.push(name);\n }\n }\n\n const hasMissing = missingProperties.length;\n if (hasMissing) {\n for (const {\n tagPlacement,\n name: missingProperty,\n } of missingProperties) {\n report(`Missing @${targetTagName} \"${missingProperty}\"`, null, tagPlacement);\n }\n }\n\n if (!hasPropertyRest || checkRestProperty) {\n const extraProperties = [];\n for (const [\n idx,\n name,\n ] of actualNames.entries()) {\n const match = name.startsWith(tag.name.trim() + '.');\n if (\n match && !expectedNames.some(\n utils.comparePaths(name),\n ) && !utils.comparePaths(name)(tag.name) &&\n (!disableExtraPropertyReporting || properties.some((prop) => {\n return prop.split('.').length >= name.split('.').length - 1;\n }))\n ) {\n extraProperties.push([\n name, paramTags[idx][1],\n ]);\n }\n }\n\n if (extraProperties.length) {\n for (const [\n extraProperty,\n tg,\n ] of extraProperties) {\n report(`@${targetTagName} \"${extraProperty}\" does not exist on ${tag.name}`, null, tg);\n }\n\n return true;\n }\n }\n\n return hasMissing;\n }\n\n let funcParamName;\n if (typeof functionParameterName === 'object') {\n const {\n name,\n } = functionParameterName;\n funcParamName = name;\n } else {\n funcParamName = functionParameterName;\n }\n\n if (funcParamName !== tag.name.trim()) {\n // Todo: Improve for array or object child items\n const actualNames = paramTagsNonNested.map(([\n , {\n name,\n },\n ]) => {\n return name.trim();\n });\n const expectedNames = functionParameterNames.map((item, idx) => {\n if (item?.[1]?.names) {\n return actualNames[idx];\n }\n\n return item;\n }).filter((item) => {\n return item !== 'this';\n }).join(', ');\n\n report(\n `Expected @${targetTagName} names to be \"${expectedNames}\". Got \"${actualNames.join(', ')}\".`,\n null,\n tag,\n );\n\n return true;\n }\n\n return false;\n });\n};\n\n/**\n * @param {string} targetTagName\n * @param {boolean} _allowExtraTrailingParamDocs\n * @param {Array<string>} jsdocParameterNames\n * @param jsdoc\n * @param {Function} report\n * @returns {boolean}\n */\nconst validateParameterNamesDeep = (\n targetTagName, _allowExtraTrailingParamDocs,\n jsdocParameterNames, jsdoc, report,\n) => {\n let lastRealParameter;\n\n return jsdocParameterNames.some(({\n name: jsdocParameterName,\n idx,\n }) => {\n const isPropertyPath = jsdocParameterName.includes('.');\n\n if (isPropertyPath) {\n if (!lastRealParameter) {\n report(`@${targetTagName} path declaration (\"${jsdocParameterName}\") appears before any real parameter.`, null, jsdoc.tags[idx]);\n\n return true;\n }\n\n let pathRootNodeName = jsdocParameterName.slice(0, jsdocParameterName.indexOf('.'));\n\n if (pathRootNodeName.endsWith('[]')) {\n pathRootNodeName = pathRootNodeName.slice(0, -2);\n }\n\n if (pathRootNodeName !== lastRealParameter) {\n report(\n `@${targetTagName} path declaration (\"${jsdocParameterName}\") root node name (\"${pathRootNodeName}\") ` +\n `does not match previous real parameter name (\"${lastRealParameter}\").`,\n null,\n jsdoc.tags[idx],\n );\n\n return true;\n }\n } else {\n lastRealParameter = jsdocParameterName;\n }\n\n return false;\n });\n};\n\nexport default iterateJsdoc(({\n context,\n jsdoc,\n report,\n utils,\n}) => {\n const {\n allowExtraTrailingParamDocs,\n checkDestructured = true,\n checkRestProperty = false,\n checkTypesPattern = '/^(?:[oO]bject|[aA]rray|PlainObject|Generic(?:Object|Array))$/',\n enableFixer = false,\n useDefaultObjectProperties = false,\n disableExtraPropertyReporting = false,\n } = context.options[0] || {};\n\n const checkTypesRegex = utils.getRegexFromString(checkTypesPattern);\n\n const jsdocParameterNamesDeep = utils.getJsdocTagsDeep('param');\n if (!jsdocParameterNamesDeep.length) {\n return;\n }\n\n const functionParameterNames = utils.getFunctionParameterNames(useDefaultObjectProperties);\n const targetTagName = utils.getPreferredTagName({\n tagName: 'param',\n });\n const isError = validateParameterNames(\n targetTagName,\n allowExtraTrailingParamDocs,\n checkDestructured,\n checkRestProperty,\n checkTypesRegex,\n disableExtraPropertyReporting,\n enableFixer,\n functionParameterNames,\n jsdoc,\n utils,\n report,\n );\n\n if (isError || !checkDestructured) {\n return;\n }\n\n validateParameterNamesDeep(\n targetTagName, allowExtraTrailingParamDocs, jsdocParameterNamesDeep, jsdoc, report,\n );\n}, {\n meta: {\n docs: {\n description: 'Ensures that parameter names in JSDoc match those in the function declaration.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-param-names',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n allowExtraTrailingParamDocs: {\n type: 'boolean',\n },\n checkDestructured: {\n type: 'boolean',\n },\n checkRestProperty: {\n type: 'boolean',\n },\n checkTypesPattern: {\n type: 'string',\n },\n disableExtraPropertyReporting: {\n type: 'boolean',\n },\n enableFixer: {\n type: 'boolean',\n },\n useDefaultObjectProperties: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"mappings":"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"}
|
|
@@ -82,6 +82,10 @@ const allBrancheshaveReturnValues = (node, promFilter) => {
|
|
|
82
82
|
});
|
|
83
83
|
});
|
|
84
84
|
}
|
|
85
|
+
case 'ThrowStatement':
|
|
86
|
+
{
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
85
89
|
case 'ReturnStatement':
|
|
86
90
|
{
|
|
87
91
|
// void return does not count.
|
|
@@ -383,8 +387,9 @@ const hasNonEmptyResolverCall = (node, resolverName) => {
|
|
|
383
387
|
*/
|
|
384
388
|
const hasValueOrExecutorHasNonEmptyResolveValue = (node, anyPromiseAsReturn, allBranches) => {
|
|
385
389
|
const hasReturnMethod = allBranches ? (nde, promiseFilter) => {
|
|
390
|
+
let hasReturn;
|
|
386
391
|
try {
|
|
387
|
-
hasReturnValue(nde, true, promiseFilter);
|
|
392
|
+
hasReturn = hasReturnValue(nde, true, promiseFilter);
|
|
388
393
|
} catch (error) {
|
|
389
394
|
// istanbul ignore else
|
|
390
395
|
if (error.message === 'Null return') {
|
|
@@ -394,7 +399,10 @@ const hasValueOrExecutorHasNonEmptyResolveValue = (node, anyPromiseAsReturn, all
|
|
|
394
399
|
// istanbul ignore next
|
|
395
400
|
throw error;
|
|
396
401
|
}
|
|
397
|
-
|
|
402
|
+
|
|
403
|
+
// `hasReturn` check needed since `throw` treated as valid return by
|
|
404
|
+
// `allBrancheshaveReturnValues`
|
|
405
|
+
return hasReturn && allBrancheshaveReturnValues(nde, promiseFilter);
|
|
398
406
|
} : (nde, promiseFilter) => {
|
|
399
407
|
return hasReturnValue(nde, false, promiseFilter);
|
|
400
408
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hasReturnValue.js","names":["isNewPromiseExpression","node","type","callee","name","isVoidPromise","typeParameters","params","undefinedKeywords","Set","allBrancheshaveReturnValues","promFilter","returnType","typeAnnotation","has","expression","body","lastBodyNode","slice","consequent","alternate","block","handler","finalizer","cases","every","someCase","nde","argument","hasReturnValue","throwOnNullReturn","value","some","bodyNode","Error","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","error","message","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 {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 return allBrancheshaveReturnValues(node.block, promFilter) &&\n allBrancheshaveReturnValues(node.handler && node.handler.body, promFilter) &&\n allBrancheshaveReturnValues(node.finalizer, promFilter);\n }\n\n case 'SwitchStatement': {\n return node.cases.every(\n (someCase) => {\n return someCase.consequent.every((nde) => {\n return allBrancheshaveReturnValues(nde, promFilter);\n });\n },\n );\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 * 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 * 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 try {\n 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 return 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","allBrancheshaveReturnValues","promFilter","returnType","typeAnnotation","has","expression","body","lastBodyNode","slice","consequent","alternate","block","handler","finalizer","cases","every","someCase","nde","argument","hasReturnValue","throwOnNullReturn","value","some","bodyNode","Error","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","error","message","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 {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 return allBrancheshaveReturnValues(node.block, promFilter) &&\n allBrancheshaveReturnValues(node.handler && node.handler.body, promFilter) &&\n allBrancheshaveReturnValues(node.finalizer, promFilter);\n }\n\n case 'SwitchStatement': {\n return node.cases.every(\n (someCase) => {\n return someCase.consequent.every((nde) => {\n return allBrancheshaveReturnValues(nde, promFilter);\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 * 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 * 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