eslint-plugin-jsdoc 37.9.2 → 37.9.5
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/CONTRIBUTING.md +1 -1
- package/README.md +59 -8
- package/dist/exportParser.js +3 -3
- package/dist/exportParser.js.map +1 -1
- package/dist/jsdocUtils.js +11 -1
- package/dist/jsdocUtils.js.map +1 -1
- package/dist/rules/requireReturns.js +1 -1
- package/dist/rules/requireReturns.js.map +1 -1
- package/package.json +17 -8
package/CONTRIBUTING.md
CHANGED
|
@@ -55,7 +55,7 @@ can use `npm run test-index`.
|
|
|
55
55
|
To test specific rules, you can supply a comma-separated list with the `--rule`
|
|
56
56
|
flag passed to `test-index`, e.g., for `check-examples` and `require-example`:
|
|
57
57
|
|
|
58
|
-
`npm run --rule=check-examples,require-example
|
|
58
|
+
`npm run test-index --rule=check-examples,require-example`.
|
|
59
59
|
|
|
60
60
|
You can further limit this by providing `--invalid` and/or `--valid` flags
|
|
61
61
|
with a comma-separated list of 0-based indexes that you wish to include (also
|
package/README.md
CHANGED
|
@@ -9261,6 +9261,12 @@ const MY_ENUM = Object.freeze({
|
|
|
9261
9261
|
VAL_A: "myvala"
|
|
9262
9262
|
} as const);
|
|
9263
9263
|
// "jsdoc/no-restricted-syntax": ["error"|"warn", {"contexts":[{"comment":"JsdocBlock[postDelimiter=\"\"]:has(JsdocTag ~ JsdocTag[tag=/private|protected/])","context":"any","message":"Access modifier tags must come first"},{"comment":"JsdocBlock[postDelimiter=\"\"]:has(JsdocTag[tag=\"enum\"])","context":":declaration:not(TSEnumDeclaration):not(:has(ObjectExpression)), :function","message":"@enum is only allowed on potential enum types"}]}]
|
|
9264
|
+
|
|
9265
|
+
/**
|
|
9266
|
+
* @param {(...args: any[]) => any} fn
|
|
9267
|
+
* @returns {(...args: any[]) => any}
|
|
9268
|
+
*/
|
|
9269
|
+
// "jsdoc/no-restricted-syntax": ["error"|"warn", {"contexts":[{"comment":"JsdocBlock:has(JsdocTag[tag=\"type\"]:has([value=/FunctionComponent/]))","context":"any","message":"The `FunctionComponent` type is not allowed. Please use `FC` instead."}]}]
|
|
9264
9270
|
````
|
|
9265
9271
|
|
|
9266
9272
|
|
|
@@ -13316,6 +13322,24 @@ export const outer = () => {
|
|
|
13316
13322
|
};
|
|
13317
13323
|
// "jsdoc/require-jsdoc": ["error"|"warn", {"publicOnly":true,"require":{"ArrowFunctionExpression":true,"ClassDeclaration":true,"ClassExpression":true,"FunctionDeclaration":true,"FunctionExpression":true,"MethodDefinition":true}}]
|
|
13318
13324
|
// Message: Missing JSDoc comment.
|
|
13325
|
+
|
|
13326
|
+
/**
|
|
13327
|
+
*
|
|
13328
|
+
*/
|
|
13329
|
+
export class InovaAutoCompleteComponent {
|
|
13330
|
+
public disabled = false;
|
|
13331
|
+
}
|
|
13332
|
+
// "jsdoc/require-jsdoc": ["error"|"warn", {"contexts":["PropertyDefinition"],"publicOnly":true}]
|
|
13333
|
+
// Message: Missing JSDoc comment.
|
|
13334
|
+
|
|
13335
|
+
/**
|
|
13336
|
+
* Some comment.
|
|
13337
|
+
*/
|
|
13338
|
+
export class Component {
|
|
13339
|
+
public foo?: number;
|
|
13340
|
+
}
|
|
13341
|
+
// "jsdoc/require-jsdoc": ["error"|"warn", {"checkConstructors":false,"contexts":["PropertyDefinition"],"publicOnly":true}]
|
|
13342
|
+
// Message: Missing JSDoc comment.
|
|
13319
13343
|
````
|
|
13320
13344
|
|
|
13321
13345
|
The following patterns are not considered problems:
|
|
@@ -17676,14 +17700,6 @@ class quux {
|
|
|
17676
17700
|
// "jsdoc/require-returns": ["error"|"warn", {"contexts":["any"],"forceRequireReturn":true}]
|
|
17677
17701
|
// Message: Missing JSDoc @returns declaration.
|
|
17678
17702
|
|
|
17679
|
-
/**
|
|
17680
|
-
* @param {array} a
|
|
17681
|
-
*/
|
|
17682
|
-
async function foo(a) {
|
|
17683
|
-
return Promise.all(a);
|
|
17684
|
-
}
|
|
17685
|
-
// Message: Missing JSDoc @returns declaration.
|
|
17686
|
-
|
|
17687
17703
|
/**
|
|
17688
17704
|
*
|
|
17689
17705
|
*/
|
|
@@ -17981,6 +17997,21 @@ export function f(): string {
|
|
|
17981
17997
|
}
|
|
17982
17998
|
// "jsdoc/require-returns": ["error"|"warn", {"contexts":[":not(BlockStatement) > FunctionDeclaration","MethodDefinition","TSMethodSignature","TSPropertySignature > TSTypeAnnotation > TSFunctionType"]}]
|
|
17983
17999
|
// Message: Missing JSDoc @returns declaration.
|
|
18000
|
+
|
|
18001
|
+
/**
|
|
18002
|
+
* @param ms time in millis
|
|
18003
|
+
*/
|
|
18004
|
+
export const sleep = (ms: number) =>
|
|
18005
|
+
new Promise<string>((res) => setTimeout(res, ms));
|
|
18006
|
+
// Message: Missing JSDoc @returns declaration.
|
|
18007
|
+
|
|
18008
|
+
/**
|
|
18009
|
+
* @param ms time in millis
|
|
18010
|
+
*/
|
|
18011
|
+
export const sleep = (ms: number) => {
|
|
18012
|
+
return new Promise<string>((res) => setTimeout(res, ms));
|
|
18013
|
+
};
|
|
18014
|
+
// Message: Missing JSDoc @returns declaration.
|
|
17984
18015
|
````
|
|
17985
18016
|
|
|
17986
18017
|
The following patterns are not considered problems:
|
|
@@ -18464,6 +18495,26 @@ function quux () {
|
|
|
18464
18495
|
async function foo() {
|
|
18465
18496
|
return new Promise(resolve => resolve());
|
|
18466
18497
|
}
|
|
18498
|
+
|
|
18499
|
+
/**
|
|
18500
|
+
* @param {array} a
|
|
18501
|
+
*/
|
|
18502
|
+
async function foo(a) {
|
|
18503
|
+
return Promise.all(a);
|
|
18504
|
+
}
|
|
18505
|
+
|
|
18506
|
+
/**
|
|
18507
|
+
* @param ms time in millis
|
|
18508
|
+
*/
|
|
18509
|
+
export const sleep = (ms: number) =>
|
|
18510
|
+
new Promise<void>((res) => setTimeout(res, ms));
|
|
18511
|
+
|
|
18512
|
+
/**
|
|
18513
|
+
* @param ms time in millis
|
|
18514
|
+
*/
|
|
18515
|
+
export const sleep = (ms: number) => {
|
|
18516
|
+
return new Promise<void>((res) => setTimeout(res, ms));
|
|
18517
|
+
};
|
|
18467
18518
|
````
|
|
18468
18519
|
|
|
18469
18520
|
|
package/dist/exportParser.js
CHANGED
|
@@ -489,11 +489,11 @@ const getExportAncestor = function (nde) {
|
|
|
489
489
|
return false;
|
|
490
490
|
};
|
|
491
491
|
|
|
492
|
-
const
|
|
493
|
-
const canExportChildrenType = new Set(['TSInterfaceBody', 'TSInterfaceDeclaration', 'ClassDefinition', 'ClassExpression', 'Program']);
|
|
492
|
+
const canBeExportedByAncestorType = new Set(['TSPropertySignature', 'TSMethodSignature', 'ClassProperty', 'PropertyDefinition', 'Method']);
|
|
493
|
+
const canExportChildrenType = new Set(['TSInterfaceBody', 'TSInterfaceDeclaration', 'ClassDeclaration', 'ClassBody', 'ClassDefinition', 'ClassExpression', 'Program']);
|
|
494
494
|
|
|
495
495
|
const isExportByAncestor = function (nde) {
|
|
496
|
-
if (!
|
|
496
|
+
if (!canBeExportedByAncestorType.has(nde.type)) {
|
|
497
497
|
return false;
|
|
498
498
|
}
|
|
499
499
|
|
package/dist/exportParser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/exportParser.js"],"names":["debug","createNode","props","getSymbolValue","symbol","type","value","getIdentifier","node","globals","scope","opts","simpleIdentifier","identifierLiteral","name","block","createSymbol","getSymbol","opt","obj","object","propertySymbol","property","computed","propertyValue","val","prototype","left","right","method","body","key","prop","properties","includes","propVal","createBlockSymbol","isGlobal","window","special","id","valueSymbol","initVariables","childNode","expression","declaration","declarations","initWindow","kind","mapVariables","isExport","ancestorsOnly","init","exported","ANONYMOUS_DEFAULT","specifier","specifiers","local","findNode","cache","blockCache","slice","push","propval","Object","values","Array","isArray","some","exportTypes","Set","ignorableNestedTypes","getExportAncestor","nde","idx","ignorableIfDeep","has","parent","canExportedByAncestorType","canExportChildrenType","isExportByAncestor","findExportedNode","isNodeExported","initModuleExports","module","exports","esm","parseRecursive","globalVars","parse","ast","isUncommentedExport","sourceCode","settings","exportNode","parseResult"],"mappings":"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","sourcesContent":["import {\n findJSDocComment,\n} from '@es-joy/jsdoccomment';\nimport debugModule from 'debug';\n\nconst debug = debugModule('requireExportJsdoc');\n\nconst createNode = function () {\n return {\n props: {},\n };\n};\n\nconst getSymbolValue = function (symbol) {\n /* istanbul ignore next */\n if (!symbol) {\n /* istanbul ignore next */\n return null;\n }\n\n /* istanbul ignore next */\n if (symbol.type === 'literal') {\n return symbol.value.value;\n }\n\n /* istanbul ignore next */\n return null;\n};\n\nconst getIdentifier = function (node, globals, scope, opts) {\n if (opts.simpleIdentifier) {\n // Type is Identier for noncomputed properties\n const identifierLiteral = createNode();\n identifierLiteral.type = 'literal';\n identifierLiteral.value = {\n value: node.name,\n };\n\n return identifierLiteral;\n }\n\n /* istanbul ignore next */\n const block = scope || globals;\n\n // As scopes are not currently supported, they are not traversed upwards recursively\n if (block.props[node.name]) {\n return block.props[node.name];\n }\n\n // Seems this will only be entered once scopes added and entered\n /* istanbul ignore next */\n if (globals.props[node.name]) {\n return globals.props[node.name];\n }\n\n return null;\n};\n\nlet createSymbol = null;\n\n// eslint-disable-next-line complexity\nconst getSymbol = function (node, globals, scope, opt) {\n const opts = opt || {};\n /* istanbul ignore next */\n // eslint-disable-next-line default-case\n switch (node.type) {\n case 'Identifier': {\n return getIdentifier(node, globals, scope, opts);\n }\n\n case 'MemberExpression': {\n const obj = getSymbol(node.object, globals, scope, opts);\n const propertySymbol = getSymbol(node.property, globals, scope, {\n simpleIdentifier: !node.computed,\n });\n const propertyValue = getSymbolValue(propertySymbol);\n\n /* istanbul ignore next */\n if (obj && propertyValue && obj.props[propertyValue]) {\n const block = obj.props[propertyValue];\n\n return block;\n }\n\n /*\n if (opts.createMissingProps && propertyValue) {\n obj.props[propertyValue] = createNode();\n\n return obj.props[propertyValue];\n }\n */\n /* istanbul ignore next */\n debug(`MemberExpression: Missing property ${node.property.name}`);\n\n /* istanbul ignore next */\n return null;\n }\n\n case 'TSTypeAliasDeclaration':\n case 'TSEnumDeclaration': case 'TSInterfaceDeclaration':\n case 'ClassDeclaration': case 'ClassExpression':\n case 'FunctionExpression': case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n const val = createNode();\n val.props.prototype = createNode();\n val.props.prototype.type = 'object';\n val.type = 'object';\n val.value = node;\n\n return val;\n }\n\n case 'AssignmentExpression': {\n return createSymbol(node.left, globals, node.right, scope, opts);\n }\n\n case 'ClassBody': {\n const val = createNode();\n for (const method of node.body) {\n val.props[method.key.name] = createNode();\n val.props[method.key.name].type = 'object';\n val.props[method.key.name].value = method.value;\n }\n\n val.type = 'object';\n val.value = node;\n\n return val;\n }\n\n case 'ObjectExpression': {\n const val = createNode();\n val.type = 'object';\n for (const prop of node.properties) {\n if ([\n // @typescript-eslint/parser, espree, acorn, etc.\n 'SpreadElement',\n\n // @babel/eslint-parser\n 'ExperimentalSpreadProperty',\n ].includes(prop.type)) {\n continue;\n }\n\n const propVal = getSymbol(prop.value, globals, scope, opts);\n /* istanbul ignore next */\n if (propVal) {\n val.props[prop.key.name] = propVal;\n }\n }\n\n return val;\n }\n\n case 'Literal': {\n const val = createNode();\n val.type = 'literal';\n val.value = node;\n\n return val;\n }\n }\n\n /* istanbul ignore next */\n return null;\n};\n\nconst createBlockSymbol = function (block, name, value, globals, isGlobal) {\n block.props[name] = value;\n if (isGlobal && globals.props.window && globals.props.window.special) {\n globals.props.window.props[name] = value;\n }\n};\n\ncreateSymbol = function (node, globals, value, scope, isGlobal) {\n const block = scope || globals;\n let symbol;\n // eslint-disable-next-line default-case\n switch (node.type) {\n case 'FunctionDeclaration':\n /* istanbul ignore next */\n // Fall through\n case 'TSEnumDeclaration': case 'TSInterfaceDeclaration':\n /* istanbul ignore next */\n // Fall through\n case 'TSTypeAliasDeclaration': case 'ClassDeclaration': {\n /* istanbul ignore next */\n if (node.id && node.id.type === 'Identifier') {\n return createSymbol(node.id, globals, node, globals);\n }\n\n /* istanbul ignore next */\n break;\n }\n\n case 'Identifier': {\n if (value) {\n const valueSymbol = getSymbol(value, globals, block);\n /* istanbul ignore next */\n if (valueSymbol) {\n createBlockSymbol(block, node.name, valueSymbol, globals, isGlobal);\n\n return block.props[node.name];\n }\n\n /* istanbul ignore next */\n debug('Identifier: Missing value symbol for %s', node.name);\n } else {\n createBlockSymbol(block, node.name, createNode(), globals, isGlobal);\n\n return block.props[node.name];\n }\n\n /* istanbul ignore next */\n break;\n }\n\n case 'MemberExpression': {\n symbol = getSymbol(node.object, globals, block);\n\n const propertySymbol = getSymbol(node.property, globals, block, {\n simpleIdentifier: !node.computed,\n });\n const propertyValue = getSymbolValue(propertySymbol);\n if (symbol && propertyValue) {\n createBlockSymbol(symbol, propertyValue, getSymbol(value, globals, block), globals, isGlobal);\n\n return symbol.props[propertyValue];\n }\n\n /* istanbul ignore next */\n debug('MemberExpression: Missing symbol: %s', node.property.name);\n break;\n }\n }\n\n return null;\n};\n\n// Creates variables from variable definitions\nconst initVariables = function (node, globals, opts) {\n // eslint-disable-next-line default-case\n switch (node.type) {\n case 'Program': {\n for (const childNode of node.body) {\n initVariables(childNode, globals, opts);\n }\n\n break;\n }\n\n case 'ExpressionStatement': {\n initVariables(node.expression, globals, opts);\n break;\n }\n\n case 'VariableDeclaration': {\n for (const declaration of node.declarations) {\n // let and const\n const symbol = createSymbol(declaration.id, globals, null, globals);\n if (opts.initWindow && node.kind === 'var' && globals.props.window) {\n // If var, also add to window\n globals.props.window.props[declaration.id.name] = symbol;\n }\n }\n\n break;\n }\n\n case 'ExportNamedDeclaration': {\n if (node.declaration) {\n initVariables(node.declaration, globals, opts);\n }\n\n break;\n }\n }\n};\n\n// Populates variable maps using AST\n// eslint-disable-next-line complexity\nconst mapVariables = function (node, globals, opt, isExport) {\n /* istanbul ignore next */\n const opts = opt || {};\n /* istanbul ignore next */\n switch (node.type) {\n case 'Program': {\n if (opts.ancestorsOnly) {\n return false;\n }\n\n for (const childNode of node.body) {\n mapVariables(childNode, globals, opts);\n }\n\n break;\n }\n\n case 'ExpressionStatement': {\n mapVariables(node.expression, globals, opts);\n break;\n }\n\n case 'AssignmentExpression': {\n createSymbol(node.left, globals, node.right);\n break;\n }\n\n case 'VariableDeclaration': {\n for (const declaration of node.declarations) {\n const isGlobal = opts.initWindow && node.kind === 'var' && globals.props.window;\n const symbol = createSymbol(declaration.id, globals, declaration.init, globals, isGlobal);\n if (symbol && isExport) {\n symbol.exported = true;\n }\n }\n\n break;\n }\n\n case 'FunctionDeclaration': {\n /* istanbul ignore next */\n if (node.id.type === 'Identifier') {\n createSymbol(node.id, globals, node, globals, true);\n }\n\n break;\n }\n\n case 'ExportDefaultDeclaration': {\n const symbol = createSymbol(node.declaration, globals, node.declaration);\n if (symbol) {\n symbol.exported = true;\n } else if (!node.id) {\n globals.ANONYMOUS_DEFAULT = node.declaration;\n }\n\n break;\n }\n\n case 'ExportNamedDeclaration': {\n if (node.declaration) {\n if (node.declaration.type === 'VariableDeclaration') {\n mapVariables(node.declaration, globals, opts, true);\n } else {\n const symbol = createSymbol(node.declaration, globals, node.declaration);\n /* istanbul ignore next */\n if (symbol) {\n symbol.exported = true;\n }\n }\n }\n\n for (const specifier of node.specifiers) {\n mapVariables(specifier, globals, opts);\n }\n\n break;\n }\n\n case 'ExportSpecifier': {\n const symbol = getSymbol(node.local, globals, globals);\n /* istanbul ignore next */\n if (symbol) {\n symbol.exported = true;\n }\n\n break;\n }\n\n case 'ClassDeclaration': {\n createSymbol(node.id, globals, node.body, globals);\n break;\n }\n\n default: {\n /* istanbul ignore next */\n return false;\n }\n }\n\n return true;\n};\n\nconst findNode = function (node, block, cache) {\n let blockCache = cache || [];\n /* istanbul ignore next */\n if (!block || blockCache.includes(block)) {\n return false;\n }\n\n blockCache = blockCache.slice();\n blockCache.push(block);\n\n if (\n (block.type === 'object' || block.type === 'MethodDefinition') &&\n block.value === node\n ) {\n return true;\n }\n\n const {\n props = block.body,\n } = block;\n for (const propval of Object.values(props || {})) {\n if (Array.isArray(propval)) {\n /* istanbul ignore if */\n if (propval.some((val) => {\n return findNode(node, val, blockCache);\n })) {\n return true;\n }\n } else if (findNode(node, propval, blockCache)) {\n return true;\n }\n }\n\n return false;\n};\n\nconst exportTypes = new Set([\n 'ExportNamedDeclaration', 'ExportDefaultDeclaration',\n]);\nconst ignorableNestedTypes = new Set([\n 'FunctionDeclaration', 'ArrowFunctionExpression', 'FunctionExpression',\n]);\nconst getExportAncestor = function (nde) {\n let node = nde;\n let idx = 0;\n const ignorableIfDeep = ignorableNestedTypes.has(nde?.type);\n while (node) {\n // Ignore functions nested more deeply than say `export default function () {}`\n if (idx >= 2 && ignorableIfDeep) {\n break;\n }\n\n if (exportTypes.has(node.type)) {\n return node;\n }\n\n node = node.parent;\n idx++;\n }\n\n return false;\n};\n\nconst canExportedByAncestorType = new Set([\n 'TSPropertySignature',\n 'TSMethodSignature',\n 'ClassProperty',\n 'Method',\n]);\n\nconst canExportChildrenType = new Set([\n 'TSInterfaceBody',\n 'TSInterfaceDeclaration',\n 'ClassDefinition',\n 'ClassExpression',\n 'Program',\n]);\n\nconst isExportByAncestor = function (nde) {\n if (!canExportedByAncestorType.has(nde.type)) {\n return false;\n }\n\n let node = nde.parent;\n while (node) {\n if (exportTypes.has(node.type)) {\n return node;\n }\n\n if (!canExportChildrenType.has(node.type)) {\n return false;\n }\n\n node = node.parent;\n }\n\n return false;\n};\n\nconst findExportedNode = function (block, node, cache) {\n /* istanbul ignore next */\n if (block === null) {\n return false;\n }\n\n const blockCache = cache || [];\n const {\n props,\n } = block;\n for (const propval of Object.values(props)) {\n blockCache.push(propval);\n if (propval.exported && (node === propval.value || findNode(node, propval.value))) {\n return true;\n }\n\n // No need to check `propval` for exported nodes as ESM\n // exports are only global\n }\n\n return false;\n};\n\nconst isNodeExported = function (node, globals, opt) {\n if (\n opt.initModuleExports && globals.props.module && globals.props.module.props.exports &&\n findNode(node, globals.props.module.props.exports)\n ) {\n return true;\n }\n\n if (opt.initWindow && globals.props.window && findNode(node, globals.props.window)) {\n return true;\n }\n\n if (opt.esm && findExportedNode(globals, node)) {\n return true;\n }\n\n return false;\n};\n\nconst parseRecursive = function (node, globalVars, opts) {\n // Iterate from top using recursion - stop at first processed node from top\n if (node.parent && parseRecursive(node.parent, globalVars, opts)) {\n return true;\n }\n\n return mapVariables(node, globalVars, opts);\n};\n\nconst parse = function (ast, node, opt) {\n /* istanbul ignore next */\n const opts = opt || {\n ancestorsOnly: false,\n esm: true,\n initModuleExports: true,\n initWindow: true,\n };\n\n const globalVars = createNode();\n if (opts.initModuleExports) {\n globalVars.props.module = createNode();\n globalVars.props.module.props.exports = createNode();\n globalVars.props.exports = globalVars.props.module.props.exports;\n }\n\n if (opts.initWindow) {\n globalVars.props.window = createNode();\n globalVars.props.window.special = true;\n }\n\n if (opts.ancestorsOnly) {\n parseRecursive(node, globalVars, opts);\n } else {\n initVariables(ast, globalVars, opts);\n mapVariables(ast, globalVars, opts);\n }\n\n return {\n globalVars,\n };\n};\n\nconst isUncommentedExport = function (node, sourceCode, opt, settings) {\n // console.log({node});\n // Optimize with ancestor check for esm\n if (opt.esm) {\n const exportNode = getExportAncestor(node);\n\n // Is export node comment\n if (exportNode && !findJSDocComment(exportNode, sourceCode, settings)) {\n return true;\n }\n\n /**\n * Some typescript types are not in variable map, but inherit exported (interface property and method)\n */\n if (\n isExportByAncestor(node) &&\n !findJSDocComment(node, sourceCode, settings)\n ) {\n return true;\n }\n }\n\n const parseResult = parse(sourceCode.ast, node, opt);\n\n return isNodeExported(node, parseResult.globalVars, opt);\n};\n\nexport default {\n isUncommentedExport,\n parse,\n};\n"],"file":"exportParser.js"}
|
|
1
|
+
{"version":3,"sources":["../src/exportParser.js"],"names":["debug","createNode","props","getSymbolValue","symbol","type","value","getIdentifier","node","globals","scope","opts","simpleIdentifier","identifierLiteral","name","block","createSymbol","getSymbol","opt","obj","object","propertySymbol","property","computed","propertyValue","val","prototype","left","right","method","body","key","prop","properties","includes","propVal","createBlockSymbol","isGlobal","window","special","id","valueSymbol","initVariables","childNode","expression","declaration","declarations","initWindow","kind","mapVariables","isExport","ancestorsOnly","init","exported","ANONYMOUS_DEFAULT","specifier","specifiers","local","findNode","cache","blockCache","slice","push","propval","Object","values","Array","isArray","some","exportTypes","Set","ignorableNestedTypes","getExportAncestor","nde","idx","ignorableIfDeep","has","parent","canBeExportedByAncestorType","canExportChildrenType","isExportByAncestor","findExportedNode","isNodeExported","initModuleExports","module","exports","esm","parseRecursive","globalVars","parse","ast","isUncommentedExport","sourceCode","settings","exportNode","parseResult"],"mappings":"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","sourcesContent":["import {\n findJSDocComment,\n} from '@es-joy/jsdoccomment';\nimport debugModule from 'debug';\n\nconst debug = debugModule('requireExportJsdoc');\n\nconst createNode = function () {\n return {\n props: {},\n };\n};\n\nconst getSymbolValue = function (symbol) {\n /* istanbul ignore next */\n if (!symbol) {\n /* istanbul ignore next */\n return null;\n }\n\n /* istanbul ignore next */\n if (symbol.type === 'literal') {\n return symbol.value.value;\n }\n\n /* istanbul ignore next */\n return null;\n};\n\nconst getIdentifier = function (node, globals, scope, opts) {\n if (opts.simpleIdentifier) {\n // Type is Identier for noncomputed properties\n const identifierLiteral = createNode();\n identifierLiteral.type = 'literal';\n identifierLiteral.value = {\n value: node.name,\n };\n\n return identifierLiteral;\n }\n\n /* istanbul ignore next */\n const block = scope || globals;\n\n // As scopes are not currently supported, they are not traversed upwards recursively\n if (block.props[node.name]) {\n return block.props[node.name];\n }\n\n // Seems this will only be entered once scopes added and entered\n /* istanbul ignore next */\n if (globals.props[node.name]) {\n return globals.props[node.name];\n }\n\n return null;\n};\n\nlet createSymbol = null;\n\n// eslint-disable-next-line complexity\nconst getSymbol = function (node, globals, scope, opt) {\n const opts = opt || {};\n /* istanbul ignore next */\n // eslint-disable-next-line default-case\n switch (node.type) {\n case 'Identifier': {\n return getIdentifier(node, globals, scope, opts);\n }\n\n case 'MemberExpression': {\n const obj = getSymbol(node.object, globals, scope, opts);\n const propertySymbol = getSymbol(node.property, globals, scope, {\n simpleIdentifier: !node.computed,\n });\n const propertyValue = getSymbolValue(propertySymbol);\n\n /* istanbul ignore next */\n if (obj && propertyValue && obj.props[propertyValue]) {\n const block = obj.props[propertyValue];\n\n return block;\n }\n\n /*\n if (opts.createMissingProps && propertyValue) {\n obj.props[propertyValue] = createNode();\n\n return obj.props[propertyValue];\n }\n */\n /* istanbul ignore next */\n debug(`MemberExpression: Missing property ${node.property.name}`);\n\n /* istanbul ignore next */\n return null;\n }\n\n case 'TSTypeAliasDeclaration':\n case 'TSEnumDeclaration': case 'TSInterfaceDeclaration':\n case 'ClassDeclaration': case 'ClassExpression':\n case 'FunctionExpression': case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n const val = createNode();\n val.props.prototype = createNode();\n val.props.prototype.type = 'object';\n val.type = 'object';\n val.value = node;\n\n return val;\n }\n\n case 'AssignmentExpression': {\n return createSymbol(node.left, globals, node.right, scope, opts);\n }\n\n case 'ClassBody': {\n const val = createNode();\n for (const method of node.body) {\n val.props[method.key.name] = createNode();\n val.props[method.key.name].type = 'object';\n val.props[method.key.name].value = method.value;\n }\n\n val.type = 'object';\n val.value = node;\n\n return val;\n }\n\n case 'ObjectExpression': {\n const val = createNode();\n val.type = 'object';\n for (const prop of node.properties) {\n if ([\n // @typescript-eslint/parser, espree, acorn, etc.\n 'SpreadElement',\n\n // @babel/eslint-parser\n 'ExperimentalSpreadProperty',\n ].includes(prop.type)) {\n continue;\n }\n\n const propVal = getSymbol(prop.value, globals, scope, opts);\n /* istanbul ignore next */\n if (propVal) {\n val.props[prop.key.name] = propVal;\n }\n }\n\n return val;\n }\n\n case 'Literal': {\n const val = createNode();\n val.type = 'literal';\n val.value = node;\n\n return val;\n }\n }\n\n /* istanbul ignore next */\n return null;\n};\n\nconst createBlockSymbol = function (block, name, value, globals, isGlobal) {\n block.props[name] = value;\n if (isGlobal && globals.props.window && globals.props.window.special) {\n globals.props.window.props[name] = value;\n }\n};\n\ncreateSymbol = function (node, globals, value, scope, isGlobal) {\n const block = scope || globals;\n let symbol;\n // eslint-disable-next-line default-case\n switch (node.type) {\n case 'FunctionDeclaration':\n /* istanbul ignore next */\n // Fall through\n case 'TSEnumDeclaration': case 'TSInterfaceDeclaration':\n /* istanbul ignore next */\n // Fall through\n case 'TSTypeAliasDeclaration': case 'ClassDeclaration': {\n /* istanbul ignore next */\n if (node.id && node.id.type === 'Identifier') {\n return createSymbol(node.id, globals, node, globals);\n }\n\n /* istanbul ignore next */\n break;\n }\n\n case 'Identifier': {\n if (value) {\n const valueSymbol = getSymbol(value, globals, block);\n /* istanbul ignore next */\n if (valueSymbol) {\n createBlockSymbol(block, node.name, valueSymbol, globals, isGlobal);\n\n return block.props[node.name];\n }\n\n /* istanbul ignore next */\n debug('Identifier: Missing value symbol for %s', node.name);\n } else {\n createBlockSymbol(block, node.name, createNode(), globals, isGlobal);\n\n return block.props[node.name];\n }\n\n /* istanbul ignore next */\n break;\n }\n\n case 'MemberExpression': {\n symbol = getSymbol(node.object, globals, block);\n\n const propertySymbol = getSymbol(node.property, globals, block, {\n simpleIdentifier: !node.computed,\n });\n const propertyValue = getSymbolValue(propertySymbol);\n if (symbol && propertyValue) {\n createBlockSymbol(symbol, propertyValue, getSymbol(value, globals, block), globals, isGlobal);\n\n return symbol.props[propertyValue];\n }\n\n /* istanbul ignore next */\n debug('MemberExpression: Missing symbol: %s', node.property.name);\n break;\n }\n }\n\n return null;\n};\n\n// Creates variables from variable definitions\nconst initVariables = function (node, globals, opts) {\n // eslint-disable-next-line default-case\n switch (node.type) {\n case 'Program': {\n for (const childNode of node.body) {\n initVariables(childNode, globals, opts);\n }\n\n break;\n }\n\n case 'ExpressionStatement': {\n initVariables(node.expression, globals, opts);\n break;\n }\n\n case 'VariableDeclaration': {\n for (const declaration of node.declarations) {\n // let and const\n const symbol = createSymbol(declaration.id, globals, null, globals);\n if (opts.initWindow && node.kind === 'var' && globals.props.window) {\n // If var, also add to window\n globals.props.window.props[declaration.id.name] = symbol;\n }\n }\n\n break;\n }\n\n case 'ExportNamedDeclaration': {\n if (node.declaration) {\n initVariables(node.declaration, globals, opts);\n }\n\n break;\n }\n }\n};\n\n// Populates variable maps using AST\n// eslint-disable-next-line complexity\nconst mapVariables = function (node, globals, opt, isExport) {\n /* istanbul ignore next */\n const opts = opt || {};\n /* istanbul ignore next */\n switch (node.type) {\n case 'Program': {\n if (opts.ancestorsOnly) {\n return false;\n }\n\n for (const childNode of node.body) {\n mapVariables(childNode, globals, opts);\n }\n\n break;\n }\n\n case 'ExpressionStatement': {\n mapVariables(node.expression, globals, opts);\n break;\n }\n\n case 'AssignmentExpression': {\n createSymbol(node.left, globals, node.right);\n break;\n }\n\n case 'VariableDeclaration': {\n for (const declaration of node.declarations) {\n const isGlobal = opts.initWindow && node.kind === 'var' && globals.props.window;\n const symbol = createSymbol(declaration.id, globals, declaration.init, globals, isGlobal);\n if (symbol && isExport) {\n symbol.exported = true;\n }\n }\n\n break;\n }\n\n case 'FunctionDeclaration': {\n /* istanbul ignore next */\n if (node.id.type === 'Identifier') {\n createSymbol(node.id, globals, node, globals, true);\n }\n\n break;\n }\n\n case 'ExportDefaultDeclaration': {\n const symbol = createSymbol(node.declaration, globals, node.declaration);\n if (symbol) {\n symbol.exported = true;\n } else if (!node.id) {\n globals.ANONYMOUS_DEFAULT = node.declaration;\n }\n\n break;\n }\n\n case 'ExportNamedDeclaration': {\n if (node.declaration) {\n if (node.declaration.type === 'VariableDeclaration') {\n mapVariables(node.declaration, globals, opts, true);\n } else {\n const symbol = createSymbol(node.declaration, globals, node.declaration);\n /* istanbul ignore next */\n if (symbol) {\n symbol.exported = true;\n }\n }\n }\n\n for (const specifier of node.specifiers) {\n mapVariables(specifier, globals, opts);\n }\n\n break;\n }\n\n case 'ExportSpecifier': {\n const symbol = getSymbol(node.local, globals, globals);\n /* istanbul ignore next */\n if (symbol) {\n symbol.exported = true;\n }\n\n break;\n }\n\n case 'ClassDeclaration': {\n createSymbol(node.id, globals, node.body, globals);\n break;\n }\n\n default: {\n /* istanbul ignore next */\n return false;\n }\n }\n\n return true;\n};\n\nconst findNode = function (node, block, cache) {\n let blockCache = cache || [];\n /* istanbul ignore next */\n if (!block || blockCache.includes(block)) {\n return false;\n }\n\n blockCache = blockCache.slice();\n blockCache.push(block);\n\n if (\n (block.type === 'object' || block.type === 'MethodDefinition') &&\n block.value === node\n ) {\n return true;\n }\n\n const {\n props = block.body,\n } = block;\n for (const propval of Object.values(props || {})) {\n if (Array.isArray(propval)) {\n /* istanbul ignore if */\n if (propval.some((val) => {\n return findNode(node, val, blockCache);\n })) {\n return true;\n }\n } else if (findNode(node, propval, blockCache)) {\n return true;\n }\n }\n\n return false;\n};\n\nconst exportTypes = new Set([\n 'ExportNamedDeclaration', 'ExportDefaultDeclaration',\n]);\nconst ignorableNestedTypes = new Set([\n 'FunctionDeclaration', 'ArrowFunctionExpression', 'FunctionExpression',\n]);\nconst getExportAncestor = function (nde) {\n let node = nde;\n let idx = 0;\n const ignorableIfDeep = ignorableNestedTypes.has(nde?.type);\n while (node) {\n // Ignore functions nested more deeply than say `export default function () {}`\n if (idx >= 2 && ignorableIfDeep) {\n break;\n }\n\n if (exportTypes.has(node.type)) {\n return node;\n }\n\n node = node.parent;\n idx++;\n }\n\n return false;\n};\n\nconst canBeExportedByAncestorType = new Set([\n 'TSPropertySignature',\n 'TSMethodSignature',\n 'ClassProperty',\n 'PropertyDefinition',\n 'Method',\n]);\n\nconst canExportChildrenType = new Set([\n 'TSInterfaceBody',\n 'TSInterfaceDeclaration',\n 'ClassDeclaration',\n 'ClassBody',\n 'ClassDefinition',\n 'ClassExpression',\n 'Program',\n]);\n\nconst isExportByAncestor = function (nde) {\n if (!canBeExportedByAncestorType.has(nde.type)) {\n return false;\n }\n\n let node = nde.parent;\n while (node) {\n if (exportTypes.has(node.type)) {\n return node;\n }\n\n if (!canExportChildrenType.has(node.type)) {\n return false;\n }\n\n node = node.parent;\n }\n\n return false;\n};\n\nconst findExportedNode = function (block, node, cache) {\n /* istanbul ignore next */\n if (block === null) {\n return false;\n }\n\n const blockCache = cache || [];\n const {\n props,\n } = block;\n for (const propval of Object.values(props)) {\n blockCache.push(propval);\n if (propval.exported && (node === propval.value || findNode(node, propval.value))) {\n return true;\n }\n\n // No need to check `propval` for exported nodes as ESM\n // exports are only global\n }\n\n return false;\n};\n\nconst isNodeExported = function (node, globals, opt) {\n if (\n opt.initModuleExports && globals.props.module && globals.props.module.props.exports &&\n findNode(node, globals.props.module.props.exports)\n ) {\n return true;\n }\n\n if (opt.initWindow && globals.props.window && findNode(node, globals.props.window)) {\n return true;\n }\n\n if (opt.esm && findExportedNode(globals, node)) {\n return true;\n }\n\n return false;\n};\n\nconst parseRecursive = function (node, globalVars, opts) {\n // Iterate from top using recursion - stop at first processed node from top\n if (node.parent && parseRecursive(node.parent, globalVars, opts)) {\n return true;\n }\n\n return mapVariables(node, globalVars, opts);\n};\n\nconst parse = function (ast, node, opt) {\n /* istanbul ignore next */\n const opts = opt || {\n ancestorsOnly: false,\n esm: true,\n initModuleExports: true,\n initWindow: true,\n };\n\n const globalVars = createNode();\n if (opts.initModuleExports) {\n globalVars.props.module = createNode();\n globalVars.props.module.props.exports = createNode();\n globalVars.props.exports = globalVars.props.module.props.exports;\n }\n\n if (opts.initWindow) {\n globalVars.props.window = createNode();\n globalVars.props.window.special = true;\n }\n\n if (opts.ancestorsOnly) {\n parseRecursive(node, globalVars, opts);\n } else {\n initVariables(ast, globalVars, opts);\n mapVariables(ast, globalVars, opts);\n }\n\n return {\n globalVars,\n };\n};\n\nconst isUncommentedExport = function (node, sourceCode, opt, settings) {\n // console.log({node});\n // Optimize with ancestor check for esm\n if (opt.esm) {\n const exportNode = getExportAncestor(node);\n\n // Is export node comment\n if (exportNode && !findJSDocComment(exportNode, sourceCode, settings)) {\n return true;\n }\n\n /**\n * Some typescript types are not in variable map, but inherit exported (interface property and method)\n */\n if (\n isExportByAncestor(node) &&\n !findJSDocComment(node, sourceCode, settings)\n ) {\n return true;\n }\n }\n\n const parseResult = parse(sourceCode.ast, node, opt);\n\n return isNodeExported(node, parseResult.globalVars, opt);\n};\n\nexport default {\n isUncommentedExport,\n parse,\n};\n"],"file":"exportParser.js"}
|
package/dist/jsdocUtils.js
CHANGED
|
@@ -642,6 +642,12 @@ const tagMissingRequiredTypeOrNamepath = (tag, tagMap = tagStructure) => {
|
|
|
642
642
|
const isNewPromiseExpression = node => {
|
|
643
643
|
return node.type === 'NewExpression' && node.callee.type === 'Identifier' && node.callee.name === 'Promise';
|
|
644
644
|
};
|
|
645
|
+
|
|
646
|
+
const isVoidPromise = node => {
|
|
647
|
+
var _node$typeParameters, _node$typeParameters$, _node$typeParameters$2;
|
|
648
|
+
|
|
649
|
+
return ((_node$typeParameters = node.typeParameters) === null || _node$typeParameters === void 0 ? void 0 : (_node$typeParameters$ = _node$typeParameters.params) === null || _node$typeParameters$ === void 0 ? void 0 : (_node$typeParameters$2 = _node$typeParameters$[0]) === null || _node$typeParameters$2 === void 0 ? void 0 : _node$typeParameters$2.type) === 'TSVoidKeyword';
|
|
650
|
+
};
|
|
645
651
|
/**
|
|
646
652
|
* @callback PromiseFilter
|
|
647
653
|
* @param {object} node
|
|
@@ -677,7 +683,7 @@ const hasReturnValue = (node, promFilter) => {
|
|
|
677
683
|
case 'FunctionDeclaration':
|
|
678
684
|
case 'ArrowFunctionExpression':
|
|
679
685
|
{
|
|
680
|
-
return node.expression || hasReturnValue(node.body, promFilter);
|
|
686
|
+
return node.expression && (!isNewPromiseExpression(node.body) || !isVoidPromise(node === null || node === void 0 ? void 0 : node.body)) || hasReturnValue(node.body, promFilter);
|
|
681
687
|
}
|
|
682
688
|
|
|
683
689
|
case 'BlockStatement':
|
|
@@ -957,6 +963,10 @@ const hasValueOrExecutorHasNonEmptyResolveValue = (node, anyPromiseAsReturn) =>
|
|
|
957
963
|
return true;
|
|
958
964
|
}
|
|
959
965
|
|
|
966
|
+
if (isVoidPromise(prom)) {
|
|
967
|
+
return false;
|
|
968
|
+
}
|
|
969
|
+
|
|
960
970
|
const [{
|
|
961
971
|
params,
|
|
962
972
|
body
|
package/dist/jsdocUtils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/jsdocUtils.js"],"names":["tagStructure","setTagStructure","mode","flattenRoots","params","root","hasRestElement","hasPropertyRest","rests","names","reduce","acc","cur","Array","isArray","nms","flattened","inner","filter","Boolean","push","concat","isRestProperty","restElement","name","getPropertiesFromPropertySignature","propSignature","type","undefined","typeAnnotation","key","members","map","member","getFunctionParameterNames","functionNode","checkDefaultObjects","getParamName","param","isProperty","hasLeftTypeAnnotation","left","propertyNames","annotationParamName","hasLeftName","properties","roots","prop","value","elements","idx","right","raw","includes","argument","parameter","Error","hasParams","length","getJsdocTagsDeep","jsdoc","targetTagName","ret","tag","tags","entries","modeWarnSettings","getTagNamesForMode","context","jsdocTags","typeScriptTags","closureTags","hasBeenWarned","report","loc","start","column","line","message","markSettingAsWarned","getPreferredTagName","tagPreference","prefValues","Object","values","some","prefVal","replacement","tagPreferenceFixed","fromEntries","replace","tagNames","preferredTagName","find","aliases","isValidTag","definedTags","validTagNames","keys","flat","additionalTags","allTags","hasTag","targetTagLower","toLowerCase","doc","hasATag","targetTagNames","hasDefinedTypeTag","tagType","trim","ensureMap","has","set","Map","get","overrideTagStructure","structuredTags","tagMap","required","tagStruct","requiredName","requiredType","typeOrNameRequired","getTagStructureForMode","isNamepathDefiningTag","tagMustHaveTypePosition","tagMightHaveTypePosition","namepathTypes","Set","tagMightHaveNamePosition","tagMightHaveNamepath","tagMustHaveNamePosition","tagMightHaveEitherTypeOrNamePosition","tagMustHaveEitherTypeOrNamePosition","tagMissingRequiredTypeOrNamepath","mustHaveTypePosition","mightHaveTypePosition","hasTypePosition","hasNameOrNamepathPosition","mustHaveEither","hasEither","isNewPromiseExpression","node","callee","hasReturnValue","promFilter","returnType","expression","body","bodyNode","consequent","alternate","block","handler","finalizer","cases","someCase","nde","hasNonEmptyResolverCall","resolverName","arguments","test","element","expressions","subExpression","property","decorators","decorator","computed","declarations","id","init","quasi","object","source","hasValueOrExecutorHasNonEmptyResolveValue","anyPromiseAsReturn","prom","hasNonFunctionYield","checkYieldReturnValue","parent","hasYieldValue","generator","hasThrowValue","innerFunction","async","parseClosureTemplateTag","split","enforcedContexts","defaultContexts","contexts","options","getContextObject","checkJsdoc","selInfo","lastIndex","selector","comment","bind","old","args","filterTags","tagsWithNamesAndDescriptions","getTagsByType","descName","tagsWithoutNames","tagsWithNames","tagName","tagWithName","getIndent","sourceCode","text","match","isConstructor","kind","isGetter","isSetter","hasAccessorPair","sourceKind","sourceName","oppositeKind","children","exemptSpeciaMethods","schema","hasSchemaOption","schemaProperties","default","checkGetters","checkSetters","dropPathSegmentQuotes","str","comparePaths","otherPathName","pathDoesNotBeginWith","startsWith","getRegexFromString","regexString","requiredFlags","flags","regex","uniqueFlags","join","RegExp"],"mappings":"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","sourcesContent":["/* eslint-disable jsdoc/no-undefined-types */\n\nimport WarnSettings from './WarnSettings';\nimport getDefaultTagStructureForMode from './getDefaultTagStructureForMode';\nimport {\n jsdocTags,\n closureTags,\n typeScriptTags,\n} from './tagNames';\n\n/**\n * @typedef {\"jsdoc\"|\"typescript\"|\"closure\"} ParserMode\n */\n\nlet tagStructure;\n\nconst setTagStructure = (mode) => {\n tagStructure = getDefaultTagStructureForMode(mode);\n};\n\n// Given a nested array of property names, reduce them to a single array,\n// appending the name of the root element along the way if present.\nconst flattenRoots = (params, root = '') => {\n let hasRestElement = false;\n let hasPropertyRest = false;\n const rests = [];\n\n const names = params.reduce((acc, cur) => {\n if (Array.isArray(cur)) {\n let nms;\n if (Array.isArray(cur[1])) {\n nms = cur[1];\n } else {\n if (cur[1].hasRestElement) {\n hasRestElement = true;\n }\n\n if (cur[1].hasPropertyRest) {\n hasPropertyRest = true;\n }\n\n nms = cur[1].names;\n }\n\n const flattened = flattenRoots(nms, root ? `${root}.${cur[0]}` : cur[0]);\n if (flattened.hasRestElement) {\n hasRestElement = true;\n }\n\n if (flattened.hasPropertyRest) {\n hasPropertyRest = true;\n }\n\n const inner = [\n root ? `${root}.${cur[0]}` : cur[0],\n ...flattened.names,\n ].filter(Boolean);\n rests.push(false, ...flattened.rests);\n\n return acc.concat(inner);\n }\n\n if (typeof cur === 'object') {\n if (cur.isRestProperty) {\n hasPropertyRest = true;\n rests.push(true);\n } else {\n rests.push(false);\n }\n\n if (cur.restElement) {\n hasRestElement = true;\n }\n\n acc.push(root ? `${root}.${cur.name}` : cur.name);\n } else if (typeof cur !== 'undefined') {\n rests.push(false);\n acc.push(root ? `${root}.${cur}` : cur);\n }\n\n return acc;\n }, []);\n\n return {\n hasPropertyRest,\n hasRestElement,\n names,\n rests,\n };\n};\n\n/**\n * @param {object} propSignature\n * @returns {undefined|Array|string}\n */\nconst getPropertiesFromPropertySignature = (propSignature) => {\n if (\n propSignature.type === 'TSIndexSignature' ||\n propSignature.type === 'TSConstructSignatureDeclaration' ||\n propSignature.type === 'TSCallSignatureDeclaration'\n ) {\n return undefined;\n }\n\n if (propSignature.typeAnnotation && propSignature.typeAnnotation.typeAnnotation.type === 'TSTypeLiteral') {\n return [\n propSignature.key.name, propSignature.typeAnnotation.typeAnnotation.members.map((member) => {\n return getPropertiesFromPropertySignature(member);\n }),\n ];\n }\n\n return propSignature.key.name;\n};\n\n/**\n * @param {object} functionNode\n * @param {boolean} checkDefaultObjects\n * @returns {Array}\n */\nconst getFunctionParameterNames = (\n functionNode, checkDefaultObjects,\n) => {\n // eslint-disable-next-line complexity\n const getParamName = (param, isProperty) => {\n const hasLeftTypeAnnotation = 'left' in param && 'typeAnnotation' in param.left;\n\n if ('typeAnnotation' in param || hasLeftTypeAnnotation) {\n const typeAnnotation = hasLeftTypeAnnotation ? param.left.typeAnnotation : param.typeAnnotation;\n\n if (typeAnnotation.typeAnnotation.type === 'TSTypeLiteral') {\n const propertyNames = typeAnnotation.typeAnnotation.members.map((member) => {\n return getPropertiesFromPropertySignature(member);\n });\n const flattened = {\n ...flattenRoots(propertyNames),\n annotationParamName: param.name,\n };\n const hasLeftName = 'left' in param && 'name' in param.left;\n\n if ('name' in param || hasLeftName) {\n return [\n hasLeftName ? param.left.name : param.name, flattened,\n ];\n }\n\n return [\n undefined, flattened,\n ];\n }\n }\n\n if ('name' in param) {\n return param.name;\n }\n\n if ('left' in param && 'name' in param.left) {\n return param.left.name;\n }\n\n if (param.type === 'ObjectPattern' || param.left?.type === 'ObjectPattern') {\n const properties = param.properties || param.left?.properties;\n const roots = properties.map((prop) => {\n return getParamName(prop, true);\n });\n\n return [\n undefined, flattenRoots(roots),\n ];\n }\n\n if (param.type === 'Property') {\n // eslint-disable-next-line default-case\n switch (param.value.type) {\n case 'ArrayPattern':\n return [\n param.key.name, param.value.elements.map((prop, idx) => {\n return {\n name: idx,\n restElement: prop.type === 'RestElement',\n };\n }),\n ];\n case 'ObjectPattern':\n return [\n param.key.name, param.value.properties.map((prop) => {\n return getParamName(prop, isProperty);\n }),\n ];\n case 'AssignmentPattern': {\n // eslint-disable-next-line default-case\n switch (param.value.left.type) {\n case 'Identifier':\n // Default parameter\n if (checkDefaultObjects && param.value.right.type === 'ObjectExpression') {\n return [\n param.key.name, param.value.right.properties.map((prop) => {\n return getParamName(prop, isProperty);\n }),\n ];\n }\n\n break;\n case 'ObjectPattern':\n return [\n param.key.name, param.value.left.properties.map((prop) => {\n return getParamName(prop, isProperty);\n }),\n ];\n case 'ArrayPattern':\n return [\n param.key.name, param.value.left.elements.map((prop, idx) => {\n return {\n name: idx,\n restElement: prop.type === 'RestElement',\n };\n }),\n ];\n }\n }\n }\n\n switch (param.key.type) {\n case 'Identifier':\n return param.key.name;\n\n // The key of an object could also be a string or number\n case 'Literal':\n return param.key.raw ||\n // istanbul ignore next -- `raw` may not be present in all parsers\n param.key.value;\n\n // case 'MemberExpression':\n default:\n // Todo: We should really create a structure (and a corresponding\n // option analogous to `checkRestProperty`) which allows for\n // (and optionally requires) dynamic properties to have a single\n // line of documentation\n return undefined;\n }\n }\n\n if (param.type === 'ArrayPattern' || param.left?.type === 'ArrayPattern') {\n const elements = param.elements || param.left?.elements;\n const roots = elements.map((prop, idx) => {\n return {\n name: `\"${idx}\"`,\n restElement: prop?.type === 'RestElement',\n };\n });\n\n return [\n undefined, flattenRoots(roots),\n ];\n }\n\n if ([\n 'RestElement', 'ExperimentalRestProperty',\n ].includes(param.type)) {\n return {\n isRestProperty: isProperty,\n name: param.argument.name,\n restElement: true,\n };\n }\n\n if (param.type === 'TSParameterProperty') {\n return getParamName(param.parameter, true);\n }\n\n throw new Error(`Unsupported function signature format: \\`${param.type}\\`.`);\n };\n\n return (functionNode.params || functionNode.value.params).map((param) => {\n return getParamName(param);\n });\n};\n\n/**\n * @param {Node} functionNode\n * @returns {Integer}\n */\nconst hasParams = (functionNode) => {\n // Should also check `functionNode.value.params` if supporting `MethodDefinition`\n return functionNode.params.length;\n};\n\n/**\n * Gets all names of the target type, including those that refer to a path, e.g.\n * \"@param foo; @param foo.bar\".\n *\n * @param {object} jsdoc\n * @param {string} targetTagName\n * @returns {Array<object>}\n */\nconst getJsdocTagsDeep = (jsdoc, targetTagName) => {\n const ret = [];\n for (const [\n idx,\n {\n name,\n tag,\n type,\n },\n ] of jsdoc.tags.entries()) {\n if (tag !== targetTagName) {\n continue;\n }\n\n ret.push({\n idx,\n name,\n type,\n });\n }\n\n return ret;\n};\n\nconst modeWarnSettings = WarnSettings();\n\n/**\n * @param {string} mode\n * @param context\n */\nconst getTagNamesForMode = (mode, context) => {\n switch (mode) {\n case 'jsdoc':\n return jsdocTags;\n case 'typescript':\n return typeScriptTags;\n case 'closure': case 'permissive':\n return closureTags;\n default:\n if (!modeWarnSettings.hasBeenWarned(context, 'mode')) {\n context.report({\n loc: {\n start: {\n column: 1,\n line: 1,\n },\n },\n message: `Unrecognized value \\`${mode}\\` for \\`settings.jsdoc.mode\\`.`,\n });\n modeWarnSettings.markSettingAsWarned(context, 'mode');\n }\n\n // We'll avoid breaking too many other rules\n return jsdocTags;\n }\n};\n\n/**\n * @param context\n * @param {ParserMode} mode\n * @param {string} name\n * @param {object} tagPreference\n * @returns {string|object}\n */\nconst getPreferredTagName = (\n context,\n mode,\n name,\n tagPreference = {},\n) => {\n const prefValues = Object.values(tagPreference);\n if (prefValues.includes(name) || prefValues.some((prefVal) => {\n return prefVal && typeof prefVal === 'object' && prefVal.replacement === name;\n })) {\n return name;\n }\n\n // Allow keys to have a 'tag ' prefix to avoid upstream bug in ESLint\n // that disallows keys that conflict with Object.prototype,\n // e.g. 'tag constructor' for 'constructor':\n // https://github.com/eslint/eslint/issues/13289\n // https://github.com/gajus/eslint-plugin-jsdoc/issues/537\n const tagPreferenceFixed = Object.fromEntries(\n Object\n .entries(tagPreference)\n .map(([\n key,\n value,\n ]) => {\n return [\n key.replace(/^tag /u, ''), value,\n ];\n }),\n );\n\n if (name in tagPreferenceFixed) {\n return tagPreferenceFixed[name];\n }\n\n const tagNames = getTagNamesForMode(mode, context);\n\n const preferredTagName = Object.entries(tagNames).find(([\n , aliases,\n ]) => {\n return aliases.includes(name);\n })?.[0];\n if (preferredTagName) {\n return preferredTagName;\n }\n\n return name;\n};\n\n/**\n * @param context\n * @param {ParserMode} mode\n * @param {string} name\n * @param {Array} definedTags\n * @returns {boolean}\n */\nconst isValidTag = (\n context,\n mode,\n name,\n definedTags,\n) => {\n const tagNames = getTagNamesForMode(mode, context);\n\n const validTagNames = Object.keys(tagNames).concat(Object.values(tagNames).flat());\n const additionalTags = definedTags;\n const allTags = validTagNames.concat(additionalTags);\n\n return allTags.includes(name);\n};\n\n/**\n * @param {object} jsdoc\n * @param {string} targetTagName\n * @returns {boolean}\n */\nconst hasTag = (jsdoc, targetTagName) => {\n const targetTagLower = targetTagName.toLowerCase();\n\n return jsdoc.tags.some((doc) => {\n return doc.tag.toLowerCase() === targetTagLower;\n });\n};\n\n/**\n * @param {object} jsdoc\n * @param {Array} targetTagNames\n * @returns {boolean}\n */\nconst hasATag = (jsdoc, targetTagNames) => {\n return targetTagNames.some((targetTagName) => {\n return hasTag(jsdoc, targetTagName);\n });\n};\n\n/**\n * Checks if the JSDoc comment declares a defined type.\n *\n * @param {JsDocTag} tag\n * the tag which should be checked.\n * @returns {boolean}\n * true in case a defined type is declared; otherwise false.\n */\nconst hasDefinedTypeTag = (tag) => {\n // The function should not continue in the event the type is not defined...\n if (typeof tag === 'undefined' || tag === null) {\n return false;\n }\n\n // .. same applies if it declares an `{undefined}` or `{void}` type\n const tagType = tag.type.trim();\n if (tagType === 'undefined' || tagType === 'void') {\n return false;\n }\n\n // In any other case, a type is present\n return true;\n};\n\n/**\n * @param map\n * @param tag\n * @returns {Map}\n */\nconst ensureMap = (map, tag) => {\n if (!map.has(tag)) {\n map.set(tag, new Map());\n }\n\n return map.get(tag);\n};\n\n/**\n * @param structuredTags\n * @param tagMap\n */\nconst overrideTagStructure = (structuredTags, tagMap = tagStructure) => {\n for (const [\n tag,\n {\n name,\n type,\n required = [],\n },\n ] of Object.entries(structuredTags)) {\n const tagStruct = ensureMap(tagMap, tag);\n\n tagStruct.set('nameContents', name);\n tagStruct.set('typeAllowed', type);\n\n const requiredName = required.includes('name');\n if (requiredName && name === false) {\n throw new Error('Cannot add \"name\" to `require` with the tag\\'s `name` set to `false`');\n }\n\n tagStruct.set('nameRequired', requiredName);\n\n const requiredType = required.includes('type');\n if (requiredType && type === false) {\n throw new Error('Cannot add \"type\" to `require` with the tag\\'s `type` set to `false`');\n }\n\n tagStruct.set('typeRequired', requiredType);\n\n const typeOrNameRequired = required.includes('typeOrNameRequired');\n if (typeOrNameRequired && name === false) {\n throw new Error('Cannot add \"typeOrNameRequired\" to `require` with the tag\\'s `name` set to `false`');\n }\n\n if (typeOrNameRequired && type === false) {\n throw new Error('Cannot add \"typeOrNameRequired\" to `require` with the tag\\'s `type` set to `false`');\n }\n\n tagStruct.set('typeOrNameRequired', typeOrNameRequired);\n }\n};\n\n/**\n * @param mode\n * @param structuredTags\n * @returns {Map}\n */\nconst getTagStructureForMode = (mode, structuredTags) => {\n const tagStruct = getDefaultTagStructureForMode(mode);\n\n try {\n overrideTagStructure(structuredTags, tagStruct);\n } catch {\n //\n }\n\n return tagStruct;\n};\n\n/**\n * @param tag\n * @param {Map} tagMap\n * @returns {boolean}\n */\nconst isNamepathDefiningTag = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n return tagStruct.get('nameContents') === 'namepath-defining';\n};\n\n/**\n * @param tag\n * @param {Map} tagMap\n * @returns {boolean}\n */\nconst tagMustHaveTypePosition = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n return tagStruct.get('typeRequired');\n};\n\n/**\n * @param tag\n * @param {Map} tagMap\n * @returns {boolean}\n */\nconst tagMightHaveTypePosition = (tag, tagMap = tagStructure) => {\n if (tagMustHaveTypePosition(tag, tagMap)) {\n return true;\n }\n\n const tagStruct = ensureMap(tagMap, tag);\n\n const ret = tagStruct.get('typeAllowed');\n\n return ret === undefined ? true : ret;\n};\n\nconst namepathTypes = new Set([\n 'namepath-defining', 'namepath-referencing',\n]);\n\n/**\n * @param tag\n * @param {Map} tagMap\n * @returns {boolean}\n */\nconst tagMightHaveNamePosition = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n const ret = tagStruct.get('nameContents');\n\n return ret === undefined ? true : Boolean(ret);\n};\n\n/**\n * @param tag\n * @param {Map} tagMap\n * @returns {boolean}\n */\nconst tagMightHaveNamepath = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n return namepathTypes.has(tagStruct.get('nameContents'));\n};\n\n/**\n * @param tag\n * @param {Map} tagMap\n * @returns {boolean}\n */\nconst tagMustHaveNamePosition = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n return tagStruct.get('nameRequired');\n};\n\n/**\n * @param tag\n * @param {Map} tagMap\n * @returns {boolean}\n */\nconst tagMightHaveEitherTypeOrNamePosition = (tag, tagMap) => {\n return tagMightHaveTypePosition(tag, tagMap) || tagMightHaveNamepath(tag, tagMap);\n};\n\n/**\n * @param tag\n * @param {Map} tagMap\n * @returns {boolean}\n */\nconst tagMustHaveEitherTypeOrNamePosition = (tag, tagMap) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n return tagStruct.get('typeOrNameRequired');\n};\n\n/**\n * @param tag\n * @param {Map} tagMap\n * @returns {boolean}\n */\nconst tagMissingRequiredTypeOrNamepath = (tag, tagMap = tagStructure) => {\n const mustHaveTypePosition = tagMustHaveTypePosition(tag.tag, tagMap);\n const mightHaveTypePosition = tagMightHaveTypePosition(tag.tag, tagMap);\n const hasTypePosition = mightHaveTypePosition && Boolean(tag.type);\n const hasNameOrNamepathPosition = (\n tagMustHaveNamePosition(tag.tag, tagMap) ||\n tagMightHaveNamepath(tag.tag, tagMap)\n ) && Boolean(tag.name);\n const mustHaveEither = tagMustHaveEitherTypeOrNamePosition(tag.tag, tagMap);\n const hasEither = tagMightHaveEitherTypeOrNamePosition(tag.tag, tagMap) &&\n (hasTypePosition || hasNameOrNamepathPosition);\n\n return mustHaveEither && !hasEither && !mustHaveTypePosition;\n};\n\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.type === 'NewExpression' && node.callee.type === 'Identifier' &&\n node.callee.name === 'Promise';\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 {PromiseFilter} promFilter\n * @returns {boolean|Node}\n */\n// eslint-disable-next-line complexity\nconst hasReturnValue = (node, promFilter) => {\n if (!node) {\n return false;\n }\n\n switch (node.type) {\n case 'TSFunctionType':\n case 'TSMethodSignature':\n return ![\n 'TSVoidKeyword',\n 'TSUndefinedKeyword',\n ].includes(node?.returnType?.typeAnnotation?.type);\n case 'MethodDefinition':\n return hasReturnValue(node.value, promFilter);\n case 'FunctionExpression':\n case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n return node.expression || hasReturnValue(node.body, promFilter);\n }\n\n case 'BlockStatement': {\n return node.body.some((bodyNode) => {\n return bodyNode.type !== 'FunctionDeclaration' && hasReturnValue(bodyNode, 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, promFilter);\n }\n\n case 'IfStatement': {\n return hasReturnValue(node.consequent, promFilter) || hasReturnValue(node.alternate, promFilter);\n }\n\n case 'TryStatement': {\n return hasReturnValue(node.block, promFilter) ||\n hasReturnValue(node.handler && node.handler.body, promFilter) ||\n hasReturnValue(node.finalizer, promFilter);\n }\n\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some((nde) => {\n return hasReturnValue(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 * 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 * @returns {boolean}\n */\nconst hasValueOrExecutorHasNonEmptyResolveValue = (node, anyPromiseAsReturn) => {\n return hasReturnValue(node, (prom) => {\n if (anyPromiseAsReturn) {\n return true;\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\n// eslint-disable-next-line complexity\nconst hasNonFunctionYield = (node, checkYieldReturnValue) => {\n if (!node) {\n return false;\n }\n\n switch (node.type) {\n case 'BlockStatement': {\n return node.body.some((bodyNode) => {\n return ![\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n ].includes(bodyNode.type) && hasNonFunctionYield(\n bodyNode, checkYieldReturnValue,\n );\n });\n }\n\n // istanbul ignore next -- In Babel?\n case 'OptionalCallExpression':\n case 'CallExpression':\n return node.arguments.some((element) => {\n return hasNonFunctionYield(element, checkYieldReturnValue);\n });\n case 'ChainExpression':\n case 'ExpressionStatement': {\n return hasNonFunctionYield(node.expression, checkYieldReturnValue);\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 hasNonFunctionYield(node.body, checkYieldReturnValue);\n }\n\n case 'ConditionalExpression':\n case 'IfStatement': {\n return hasNonFunctionYield(node.test, checkYieldReturnValue) ||\n hasNonFunctionYield(node.consequent, checkYieldReturnValue) ||\n hasNonFunctionYield(node.alternate, checkYieldReturnValue);\n }\n\n case 'TryStatement': {\n return hasNonFunctionYield(node.block, checkYieldReturnValue) ||\n hasNonFunctionYield(node.handler && node.handler.body, checkYieldReturnValue) ||\n hasNonFunctionYield(node.finalizer, checkYieldReturnValue);\n }\n\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some((nde) => {\n return hasNonFunctionYield(nde, checkYieldReturnValue);\n });\n },\n );\n }\n\n case 'ArrayPattern':\n case 'ArrayExpression':\n return node.elements.some((element) => {\n return hasNonFunctionYield(element, checkYieldReturnValue);\n });\n case 'AssignmentPattern':\n return hasNonFunctionYield(node.right, checkYieldReturnValue);\n\n case 'VariableDeclaration': {\n return node.declarations.some((nde) => {\n return hasNonFunctionYield(nde, checkYieldReturnValue);\n });\n }\n\n case 'VariableDeclarator': {\n return hasNonFunctionYield(node.id, checkYieldReturnValue) ||\n hasNonFunctionYield(node.init, checkYieldReturnValue);\n }\n\n case 'AssignmentExpression':\n case 'BinaryExpression':\n case 'LogicalExpression': {\n return hasNonFunctionYield(node.left, checkYieldReturnValue) ||\n hasNonFunctionYield(node.right, checkYieldReturnValue);\n }\n\n // Comma\n case 'SequenceExpression':\n case 'TemplateLiteral':\n return node.expressions.some((subExpression) => {\n return hasNonFunctionYield(subExpression, checkYieldReturnValue);\n });\n\n case 'ObjectPattern':\n case 'ObjectExpression':\n return node.properties.some((property) => {\n return hasNonFunctionYield(property, checkYieldReturnValue);\n });\n\n // istanbul ignore next -- In Babel?\n case 'PropertyDefinition':\n /* eslint-disable no-fallthrough */\n // istanbul ignore next -- In Babel?\n case 'ObjectProperty':\n // istanbul ignore next -- In Babel?\n case 'ClassProperty':\n /* eslint-enable no-fallthrough */\n case 'Property':\n return node.computed && hasNonFunctionYield(node.key, checkYieldReturnValue) ||\n hasNonFunctionYield(node.value, checkYieldReturnValue);\n // istanbul ignore next -- In Babel?\n case 'ObjectMethod':\n // istanbul ignore next -- In Babel?\n return node.computed && hasNonFunctionYield(node.key, checkYieldReturnValue) ||\n node.arguments.some((nde) => {\n return hasNonFunctionYield(nde, checkYieldReturnValue);\n });\n\n case 'SpreadElement':\n case 'UnaryExpression':\n return hasNonFunctionYield(node.argument, checkYieldReturnValue);\n\n case 'TaggedTemplateExpression':\n return hasNonFunctionYield(node.quasi, checkYieldReturnValue);\n\n // ?.\n // istanbul ignore next -- In Babel?\n case 'OptionalMemberExpression':\n case 'MemberExpression':\n return hasNonFunctionYield(node.object, checkYieldReturnValue) ||\n hasNonFunctionYield(node.property, checkYieldReturnValue);\n\n // istanbul ignore next -- In Babel?\n case 'Import':\n case 'ImportExpression':\n return hasNonFunctionYield(node.source, checkYieldReturnValue);\n\n case 'ReturnStatement': {\n if (node.argument === null) {\n return false;\n }\n\n return hasNonFunctionYield(node.argument, checkYieldReturnValue);\n }\n\n case 'YieldExpression': {\n if (checkYieldReturnValue) {\n if (node.parent.type === 'VariableDeclarator') {\n return true;\n }\n\n return false;\n }\n\n // void return does not count.\n if (node.argument === null) {\n return false;\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 * @returns {boolean}\n */\nconst hasYieldValue = (node, checkYieldReturnValue) => {\n return node.generator && (\n node.expression || hasNonFunctionYield(node.body, checkYieldReturnValue)\n );\n};\n\n/**\n * Checks if a node has a throws statement.\n *\n * @param {object} node\n * @param {boolean} innerFunction\n * @returns {boolean}\n */\n// eslint-disable-next-line complexity\nconst hasThrowValue = (node, innerFunction) => {\n if (!node) {\n return false;\n }\n\n // There are cases where a function may execute its inner function which\n // throws, but we're treating functions atomically rather than trying to\n // follow them\n switch (node.type) {\n case 'FunctionExpression':\n case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n return !innerFunction && !node.async && hasThrowValue(node.body, true);\n }\n\n case 'BlockStatement': {\n return node.body.some((bodyNode) => {\n return bodyNode.type !== 'FunctionDeclaration' && hasThrowValue(bodyNode);\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 hasThrowValue(node.body);\n }\n\n case 'IfStatement': {\n return hasThrowValue(node.consequent) || hasThrowValue(node.alternate);\n }\n\n // We only consider it to throw an error if the catch or finally blocks throw an error.\n case 'TryStatement': {\n return hasThrowValue(node.handler && node.handler.body) ||\n hasThrowValue(node.finalizer);\n }\n\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some((nde) => {\n return hasThrowValue(nde);\n });\n },\n );\n }\n\n case 'ThrowStatement': {\n return true;\n }\n\n default: {\n return false;\n }\n }\n};\n\n/**\n * @param {string} tag\n */\n/*\nconst isInlineTag = (tag) => {\n return /^(@link|@linkcode|@linkplain|@tutorial) /u.test(tag);\n};\n*/\n\n/**\n * Parses GCC Generic/Template types\n *\n * @see {https://github.com/google/closure-compiler/wiki/Generic-Types}\n * @see {https://www.typescriptlang.org/docs/handbook/jsdoc-supported-types.html#template}\n * @param {JsDocTag} tag\n * @returns {Array<string>}\n */\nconst parseClosureTemplateTag = (tag) => {\n return tag.name\n .split(',')\n .map((type) => {\n return type.trim();\n });\n};\n\n/**\n * Checks user option for `contexts` array, defaulting to\n * contexts designated by the rule. Returns an array of\n * ESTree AST types, indicating allowable contexts.\n *\n * @param {*} context\n * @param {true|string[]} defaultContexts\n * @returns {string[]}\n */\nconst enforcedContexts = (context, defaultContexts) => {\n const {\n contexts = defaultContexts === true ? [\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n ] : defaultContexts,\n } = context.options[0] || {};\n\n return contexts;\n};\n\n/**\n * @param {string[]} contexts\n * @param {Function} checkJsdoc\n * @param {Function} handler\n */\nconst getContextObject = (contexts, checkJsdoc, handler) => {\n const properties = {};\n\n for (const [\n idx,\n prop,\n ] of contexts.entries()) {\n let property;\n let value;\n\n if (typeof prop === 'object') {\n const selInfo = {\n lastIndex: idx,\n selector: prop.context,\n };\n if (prop.comment) {\n property = prop.context;\n value = checkJsdoc.bind(\n null, {\n ...selInfo,\n comment: prop.comment,\n }, handler.bind(null, prop.comment),\n );\n } else {\n property = prop.context;\n value = checkJsdoc.bind(null, selInfo, null);\n }\n } else {\n const selInfo = {\n lastIndex: idx,\n selector: prop,\n };\n property = prop;\n value = checkJsdoc.bind(null, selInfo, null);\n }\n\n const old = properties[property];\n properties[property] = old ? function (...args) {\n old(...args);\n value(...args);\n } : value;\n }\n\n return properties;\n};\n\nconst filterTags = (tags, filter) => {\n return tags.filter((tag) => {\n return filter(tag);\n });\n};\n\nconst tagsWithNamesAndDescriptions = new Set([\n 'param', 'arg', 'argument', 'property', 'prop',\n 'template',\n\n // These two are parsed by our custom parser as though having a `name`\n 'returns', 'return',\n]);\n\nconst getTagsByType = (context, mode, tags, tagPreference) => {\n const descName = getPreferredTagName(context, mode, 'description', tagPreference);\n const tagsWithoutNames = [];\n const tagsWithNames = filterTags(tags, (tag) => {\n const {\n tag: tagName,\n } = tag;\n const tagWithName = tagsWithNamesAndDescriptions.has(tagName);\n if (!tagWithName && tagName !== descName) {\n tagsWithoutNames.push(tag);\n }\n\n return tagWithName;\n });\n\n return {\n tagsWithNames,\n tagsWithoutNames,\n };\n};\n\nconst getIndent = (sourceCode) => {\n return (sourceCode.text.match(/^\\n*([ \\t]+)/u)?.[1] ?? '') + ' ';\n};\n\nconst isConstructor = (node) => {\n return node?.type === 'MethodDefinition' && node.kind === 'constructor' ||\n node?.parent?.kind === 'constructor';\n};\n\nconst isGetter = (node) => {\n return node && node.parent?.kind === 'get';\n};\n\nconst isSetter = (node) => {\n return node && node.parent?.kind === 'set';\n};\n\nconst hasAccessorPair = (node) => {\n const {\n type,\n kind: sourceKind,\n key: {\n name: sourceName,\n },\n } = node;\n const oppositeKind = sourceKind === 'get' ? 'set' : 'get';\n\n const children = type === 'MethodDefinition' ? 'body' : 'properties';\n\n return node.parent[children].some(({\n kind,\n key: {\n name,\n },\n }) => {\n return kind === oppositeKind && name === sourceName;\n });\n};\n\nconst exemptSpeciaMethods = (jsdoc, node, context, schema) => {\n const hasSchemaOption = (prop) => {\n const schemaProperties = schema[0].properties;\n\n return context.options[0]?.[prop] ??\n (schemaProperties[prop] && schemaProperties[prop].default);\n };\n\n const checkGetters = hasSchemaOption('checkGetters');\n const checkSetters = hasSchemaOption('checkSetters');\n\n return !hasSchemaOption('checkConstructors') &&\n (\n isConstructor(node) ||\n hasATag(jsdoc, [\n 'class',\n 'constructor',\n ])) ||\n isGetter(node) && (\n !checkGetters ||\n checkGetters === 'no-setter' && hasAccessorPair(node.parent)\n ) ||\n isSetter(node) && (\n !checkSetters ||\n checkSetters === 'no-getter' && hasAccessorPair(node.parent)\n );\n};\n\n/**\n * Since path segments may be unquoted (if matching a reserved word,\n * identifier or numeric literal) or single or double quoted, in either\n * the `@param` or in source, we need to strip the quotes to give a fair\n * comparison.\n *\n * @param {string} str\n * @returns {string}\n */\nconst dropPathSegmentQuotes = (str) => {\n return str.replace(/\\.(['\"])(.*)\\1/gu, '.$2');\n};\n\n/**\n * @param {string} name\n * @returns {(otherPathName: string) => void}\n */\nconst comparePaths = (name) => {\n return (otherPathName) => {\n return otherPathName === name ||\n dropPathSegmentQuotes(otherPathName) === dropPathSegmentQuotes(name);\n };\n};\n\n/**\n * @param {string} name\n * @param {string} otherPathName\n * @returns {boolean}\n */\nconst pathDoesNotBeginWith = (name, otherPathName) => {\n return !name.startsWith(otherPathName) &&\n !dropPathSegmentQuotes(name).startsWith(dropPathSegmentQuotes(otherPathName));\n};\n\n/**\n * @param {string} regexString\n * @param {string} requiredFlags\n * @returns {RegExp}\n */\nconst getRegexFromString = (regexString, requiredFlags) => {\n const match = regexString.match(/^\\/(.*)\\/([gimyus]*)$/us);\n let flags = 'u';\n let regex = regexString;\n if (match) {\n [\n , regex,\n flags,\n ] = match;\n if (!flags) {\n flags = 'u';\n }\n }\n\n const uniqueFlags = [\n ...new Set(flags + (requiredFlags || '')),\n ];\n flags = uniqueFlags.join('');\n\n return new RegExp(regex, flags);\n};\n\nexport default {\n comparePaths,\n dropPathSegmentQuotes,\n enforcedContexts,\n exemptSpeciaMethods,\n filterTags,\n flattenRoots,\n getContextObject,\n getFunctionParameterNames,\n getIndent,\n getJsdocTagsDeep,\n getPreferredTagName,\n getRegexFromString,\n getTagsByType,\n getTagStructureForMode,\n hasATag,\n hasDefinedTypeTag,\n hasParams,\n hasReturnValue,\n hasTag,\n hasThrowValue,\n hasValueOrExecutorHasNonEmptyResolveValue,\n hasYieldValue,\n isConstructor,\n isGetter,\n isNamepathDefiningTag,\n isSetter,\n isValidTag,\n overrideTagStructure,\n parseClosureTemplateTag,\n pathDoesNotBeginWith,\n setTagStructure,\n tagMightHaveNamepath,\n tagMightHaveNamePosition,\n tagMightHaveTypePosition,\n tagMissingRequiredTypeOrNamepath,\n tagMustHaveNamePosition,\n tagMustHaveTypePosition,\n};\n"],"file":"jsdocUtils.js"}
|
|
1
|
+
{"version":3,"sources":["../src/jsdocUtils.js"],"names":["tagStructure","setTagStructure","mode","flattenRoots","params","root","hasRestElement","hasPropertyRest","rests","names","reduce","acc","cur","Array","isArray","nms","flattened","inner","filter","Boolean","push","concat","isRestProperty","restElement","name","getPropertiesFromPropertySignature","propSignature","type","undefined","typeAnnotation","key","members","map","member","getFunctionParameterNames","functionNode","checkDefaultObjects","getParamName","param","isProperty","hasLeftTypeAnnotation","left","propertyNames","annotationParamName","hasLeftName","properties","roots","prop","value","elements","idx","right","raw","includes","argument","parameter","Error","hasParams","length","getJsdocTagsDeep","jsdoc","targetTagName","ret","tag","tags","entries","modeWarnSettings","getTagNamesForMode","context","jsdocTags","typeScriptTags","closureTags","hasBeenWarned","report","loc","start","column","line","message","markSettingAsWarned","getPreferredTagName","tagPreference","prefValues","Object","values","some","prefVal","replacement","tagPreferenceFixed","fromEntries","replace","tagNames","preferredTagName","find","aliases","isValidTag","definedTags","validTagNames","keys","flat","additionalTags","allTags","hasTag","targetTagLower","toLowerCase","doc","hasATag","targetTagNames","hasDefinedTypeTag","tagType","trim","ensureMap","has","set","Map","get","overrideTagStructure","structuredTags","tagMap","required","tagStruct","requiredName","requiredType","typeOrNameRequired","getTagStructureForMode","isNamepathDefiningTag","tagMustHaveTypePosition","tagMightHaveTypePosition","namepathTypes","Set","tagMightHaveNamePosition","tagMightHaveNamepath","tagMustHaveNamePosition","tagMightHaveEitherTypeOrNamePosition","tagMustHaveEitherTypeOrNamePosition","tagMissingRequiredTypeOrNamepath","mustHaveTypePosition","mightHaveTypePosition","hasTypePosition","hasNameOrNamepathPosition","mustHaveEither","hasEither","isNewPromiseExpression","node","callee","isVoidPromise","typeParameters","hasReturnValue","promFilter","returnType","expression","body","bodyNode","consequent","alternate","block","handler","finalizer","cases","someCase","nde","hasNonEmptyResolverCall","resolverName","arguments","test","element","expressions","subExpression","property","decorators","decorator","computed","declarations","id","init","quasi","object","source","hasValueOrExecutorHasNonEmptyResolveValue","anyPromiseAsReturn","prom","hasNonFunctionYield","checkYieldReturnValue","parent","hasYieldValue","generator","hasThrowValue","innerFunction","async","parseClosureTemplateTag","split","enforcedContexts","defaultContexts","contexts","options","getContextObject","checkJsdoc","selInfo","lastIndex","selector","comment","bind","old","args","filterTags","tagsWithNamesAndDescriptions","getTagsByType","descName","tagsWithoutNames","tagsWithNames","tagName","tagWithName","getIndent","sourceCode","text","match","isConstructor","kind","isGetter","isSetter","hasAccessorPair","sourceKind","sourceName","oppositeKind","children","exemptSpeciaMethods","schema","hasSchemaOption","schemaProperties","default","checkGetters","checkSetters","dropPathSegmentQuotes","str","comparePaths","otherPathName","pathDoesNotBeginWith","startsWith","getRegexFromString","regexString","requiredFlags","flags","regex","uniqueFlags","join","RegExp"],"mappings":"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","sourcesContent":["/* eslint-disable jsdoc/no-undefined-types */\n\nimport WarnSettings from './WarnSettings';\nimport getDefaultTagStructureForMode from './getDefaultTagStructureForMode';\nimport {\n jsdocTags,\n closureTags,\n typeScriptTags,\n} from './tagNames';\n\n/**\n * @typedef {\"jsdoc\"|\"typescript\"|\"closure\"} ParserMode\n */\n\nlet tagStructure;\n\nconst setTagStructure = (mode) => {\n tagStructure = getDefaultTagStructureForMode(mode);\n};\n\n// Given a nested array of property names, reduce them to a single array,\n// appending the name of the root element along the way if present.\nconst flattenRoots = (params, root = '') => {\n let hasRestElement = false;\n let hasPropertyRest = false;\n const rests = [];\n\n const names = params.reduce((acc, cur) => {\n if (Array.isArray(cur)) {\n let nms;\n if (Array.isArray(cur[1])) {\n nms = cur[1];\n } else {\n if (cur[1].hasRestElement) {\n hasRestElement = true;\n }\n\n if (cur[1].hasPropertyRest) {\n hasPropertyRest = true;\n }\n\n nms = cur[1].names;\n }\n\n const flattened = flattenRoots(nms, root ? `${root}.${cur[0]}` : cur[0]);\n if (flattened.hasRestElement) {\n hasRestElement = true;\n }\n\n if (flattened.hasPropertyRest) {\n hasPropertyRest = true;\n }\n\n const inner = [\n root ? `${root}.${cur[0]}` : cur[0],\n ...flattened.names,\n ].filter(Boolean);\n rests.push(false, ...flattened.rests);\n\n return acc.concat(inner);\n }\n\n if (typeof cur === 'object') {\n if (cur.isRestProperty) {\n hasPropertyRest = true;\n rests.push(true);\n } else {\n rests.push(false);\n }\n\n if (cur.restElement) {\n hasRestElement = true;\n }\n\n acc.push(root ? `${root}.${cur.name}` : cur.name);\n } else if (typeof cur !== 'undefined') {\n rests.push(false);\n acc.push(root ? `${root}.${cur}` : cur);\n }\n\n return acc;\n }, []);\n\n return {\n hasPropertyRest,\n hasRestElement,\n names,\n rests,\n };\n};\n\n/**\n * @param {object} propSignature\n * @returns {undefined|Array|string}\n */\nconst getPropertiesFromPropertySignature = (propSignature) => {\n if (\n propSignature.type === 'TSIndexSignature' ||\n propSignature.type === 'TSConstructSignatureDeclaration' ||\n propSignature.type === 'TSCallSignatureDeclaration'\n ) {\n return undefined;\n }\n\n if (propSignature.typeAnnotation && propSignature.typeAnnotation.typeAnnotation.type === 'TSTypeLiteral') {\n return [\n propSignature.key.name, propSignature.typeAnnotation.typeAnnotation.members.map((member) => {\n return getPropertiesFromPropertySignature(member);\n }),\n ];\n }\n\n return propSignature.key.name;\n};\n\n/**\n * @param {object} functionNode\n * @param {boolean} checkDefaultObjects\n * @returns {Array}\n */\nconst getFunctionParameterNames = (\n functionNode, checkDefaultObjects,\n) => {\n // eslint-disable-next-line complexity\n const getParamName = (param, isProperty) => {\n const hasLeftTypeAnnotation = 'left' in param && 'typeAnnotation' in param.left;\n\n if ('typeAnnotation' in param || hasLeftTypeAnnotation) {\n const typeAnnotation = hasLeftTypeAnnotation ? param.left.typeAnnotation : param.typeAnnotation;\n\n if (typeAnnotation.typeAnnotation.type === 'TSTypeLiteral') {\n const propertyNames = typeAnnotation.typeAnnotation.members.map((member) => {\n return getPropertiesFromPropertySignature(member);\n });\n const flattened = {\n ...flattenRoots(propertyNames),\n annotationParamName: param.name,\n };\n const hasLeftName = 'left' in param && 'name' in param.left;\n\n if ('name' in param || hasLeftName) {\n return [\n hasLeftName ? param.left.name : param.name, flattened,\n ];\n }\n\n return [\n undefined, flattened,\n ];\n }\n }\n\n if ('name' in param) {\n return param.name;\n }\n\n if ('left' in param && 'name' in param.left) {\n return param.left.name;\n }\n\n if (param.type === 'ObjectPattern' || param.left?.type === 'ObjectPattern') {\n const properties = param.properties || param.left?.properties;\n const roots = properties.map((prop) => {\n return getParamName(prop, true);\n });\n\n return [\n undefined, flattenRoots(roots),\n ];\n }\n\n if (param.type === 'Property') {\n // eslint-disable-next-line default-case\n switch (param.value.type) {\n case 'ArrayPattern':\n return [\n param.key.name, param.value.elements.map((prop, idx) => {\n return {\n name: idx,\n restElement: prop.type === 'RestElement',\n };\n }),\n ];\n case 'ObjectPattern':\n return [\n param.key.name, param.value.properties.map((prop) => {\n return getParamName(prop, isProperty);\n }),\n ];\n case 'AssignmentPattern': {\n // eslint-disable-next-line default-case\n switch (param.value.left.type) {\n case 'Identifier':\n // Default parameter\n if (checkDefaultObjects && param.value.right.type === 'ObjectExpression') {\n return [\n param.key.name, param.value.right.properties.map((prop) => {\n return getParamName(prop, isProperty);\n }),\n ];\n }\n\n break;\n case 'ObjectPattern':\n return [\n param.key.name, param.value.left.properties.map((prop) => {\n return getParamName(prop, isProperty);\n }),\n ];\n case 'ArrayPattern':\n return [\n param.key.name, param.value.left.elements.map((prop, idx) => {\n return {\n name: idx,\n restElement: prop.type === 'RestElement',\n };\n }),\n ];\n }\n }\n }\n\n switch (param.key.type) {\n case 'Identifier':\n return param.key.name;\n\n // The key of an object could also be a string or number\n case 'Literal':\n return param.key.raw ||\n // istanbul ignore next -- `raw` may not be present in all parsers\n param.key.value;\n\n // case 'MemberExpression':\n default:\n // Todo: We should really create a structure (and a corresponding\n // option analogous to `checkRestProperty`) which allows for\n // (and optionally requires) dynamic properties to have a single\n // line of documentation\n return undefined;\n }\n }\n\n if (param.type === 'ArrayPattern' || param.left?.type === 'ArrayPattern') {\n const elements = param.elements || param.left?.elements;\n const roots = elements.map((prop, idx) => {\n return {\n name: `\"${idx}\"`,\n restElement: prop?.type === 'RestElement',\n };\n });\n\n return [\n undefined, flattenRoots(roots),\n ];\n }\n\n if ([\n 'RestElement', 'ExperimentalRestProperty',\n ].includes(param.type)) {\n return {\n isRestProperty: isProperty,\n name: param.argument.name,\n restElement: true,\n };\n }\n\n if (param.type === 'TSParameterProperty') {\n return getParamName(param.parameter, true);\n }\n\n throw new Error(`Unsupported function signature format: \\`${param.type}\\`.`);\n };\n\n return (functionNode.params || functionNode.value.params).map((param) => {\n return getParamName(param);\n });\n};\n\n/**\n * @param {Node} functionNode\n * @returns {Integer}\n */\nconst hasParams = (functionNode) => {\n // Should also check `functionNode.value.params` if supporting `MethodDefinition`\n return functionNode.params.length;\n};\n\n/**\n * Gets all names of the target type, including those that refer to a path, e.g.\n * \"@param foo; @param foo.bar\".\n *\n * @param {object} jsdoc\n * @param {string} targetTagName\n * @returns {Array<object>}\n */\nconst getJsdocTagsDeep = (jsdoc, targetTagName) => {\n const ret = [];\n for (const [\n idx,\n {\n name,\n tag,\n type,\n },\n ] of jsdoc.tags.entries()) {\n if (tag !== targetTagName) {\n continue;\n }\n\n ret.push({\n idx,\n name,\n type,\n });\n }\n\n return ret;\n};\n\nconst modeWarnSettings = WarnSettings();\n\n/**\n * @param {string} mode\n * @param context\n */\nconst getTagNamesForMode = (mode, context) => {\n switch (mode) {\n case 'jsdoc':\n return jsdocTags;\n case 'typescript':\n return typeScriptTags;\n case 'closure': case 'permissive':\n return closureTags;\n default:\n if (!modeWarnSettings.hasBeenWarned(context, 'mode')) {\n context.report({\n loc: {\n start: {\n column: 1,\n line: 1,\n },\n },\n message: `Unrecognized value \\`${mode}\\` for \\`settings.jsdoc.mode\\`.`,\n });\n modeWarnSettings.markSettingAsWarned(context, 'mode');\n }\n\n // We'll avoid breaking too many other rules\n return jsdocTags;\n }\n};\n\n/**\n * @param context\n * @param {ParserMode} mode\n * @param {string} name\n * @param {object} tagPreference\n * @returns {string|object}\n */\nconst getPreferredTagName = (\n context,\n mode,\n name,\n tagPreference = {},\n) => {\n const prefValues = Object.values(tagPreference);\n if (prefValues.includes(name) || prefValues.some((prefVal) => {\n return prefVal && typeof prefVal === 'object' && prefVal.replacement === name;\n })) {\n return name;\n }\n\n // Allow keys to have a 'tag ' prefix to avoid upstream bug in ESLint\n // that disallows keys that conflict with Object.prototype,\n // e.g. 'tag constructor' for 'constructor':\n // https://github.com/eslint/eslint/issues/13289\n // https://github.com/gajus/eslint-plugin-jsdoc/issues/537\n const tagPreferenceFixed = Object.fromEntries(\n Object\n .entries(tagPreference)\n .map(([\n key,\n value,\n ]) => {\n return [\n key.replace(/^tag /u, ''), value,\n ];\n }),\n );\n\n if (name in tagPreferenceFixed) {\n return tagPreferenceFixed[name];\n }\n\n const tagNames = getTagNamesForMode(mode, context);\n\n const preferredTagName = Object.entries(tagNames).find(([\n , aliases,\n ]) => {\n return aliases.includes(name);\n })?.[0];\n if (preferredTagName) {\n return preferredTagName;\n }\n\n return name;\n};\n\n/**\n * @param context\n * @param {ParserMode} mode\n * @param {string} name\n * @param {Array} definedTags\n * @returns {boolean}\n */\nconst isValidTag = (\n context,\n mode,\n name,\n definedTags,\n) => {\n const tagNames = getTagNamesForMode(mode, context);\n\n const validTagNames = Object.keys(tagNames).concat(Object.values(tagNames).flat());\n const additionalTags = definedTags;\n const allTags = validTagNames.concat(additionalTags);\n\n return allTags.includes(name);\n};\n\n/**\n * @param {object} jsdoc\n * @param {string} targetTagName\n * @returns {boolean}\n */\nconst hasTag = (jsdoc, targetTagName) => {\n const targetTagLower = targetTagName.toLowerCase();\n\n return jsdoc.tags.some((doc) => {\n return doc.tag.toLowerCase() === targetTagLower;\n });\n};\n\n/**\n * @param {object} jsdoc\n * @param {Array} targetTagNames\n * @returns {boolean}\n */\nconst hasATag = (jsdoc, targetTagNames) => {\n return targetTagNames.some((targetTagName) => {\n return hasTag(jsdoc, targetTagName);\n });\n};\n\n/**\n * Checks if the JSDoc comment declares a defined type.\n *\n * @param {JsDocTag} tag\n * the tag which should be checked.\n * @returns {boolean}\n * true in case a defined type is declared; otherwise false.\n */\nconst hasDefinedTypeTag = (tag) => {\n // The function should not continue in the event the type is not defined...\n if (typeof tag === 'undefined' || tag === null) {\n return false;\n }\n\n // .. same applies if it declares an `{undefined}` or `{void}` type\n const tagType = tag.type.trim();\n if (tagType === 'undefined' || tagType === 'void') {\n return false;\n }\n\n // In any other case, a type is present\n return true;\n};\n\n/**\n * @param map\n * @param tag\n * @returns {Map}\n */\nconst ensureMap = (map, tag) => {\n if (!map.has(tag)) {\n map.set(tag, new Map());\n }\n\n return map.get(tag);\n};\n\n/**\n * @param structuredTags\n * @param tagMap\n */\nconst overrideTagStructure = (structuredTags, tagMap = tagStructure) => {\n for (const [\n tag,\n {\n name,\n type,\n required = [],\n },\n ] of Object.entries(structuredTags)) {\n const tagStruct = ensureMap(tagMap, tag);\n\n tagStruct.set('nameContents', name);\n tagStruct.set('typeAllowed', type);\n\n const requiredName = required.includes('name');\n if (requiredName && name === false) {\n throw new Error('Cannot add \"name\" to `require` with the tag\\'s `name` set to `false`');\n }\n\n tagStruct.set('nameRequired', requiredName);\n\n const requiredType = required.includes('type');\n if (requiredType && type === false) {\n throw new Error('Cannot add \"type\" to `require` with the tag\\'s `type` set to `false`');\n }\n\n tagStruct.set('typeRequired', requiredType);\n\n const typeOrNameRequired = required.includes('typeOrNameRequired');\n if (typeOrNameRequired && name === false) {\n throw new Error('Cannot add \"typeOrNameRequired\" to `require` with the tag\\'s `name` set to `false`');\n }\n\n if (typeOrNameRequired && type === false) {\n throw new Error('Cannot add \"typeOrNameRequired\" to `require` with the tag\\'s `type` set to `false`');\n }\n\n tagStruct.set('typeOrNameRequired', typeOrNameRequired);\n }\n};\n\n/**\n * @param mode\n * @param structuredTags\n * @returns {Map}\n */\nconst getTagStructureForMode = (mode, structuredTags) => {\n const tagStruct = getDefaultTagStructureForMode(mode);\n\n try {\n overrideTagStructure(structuredTags, tagStruct);\n } catch {\n //\n }\n\n return tagStruct;\n};\n\n/**\n * @param tag\n * @param {Map} tagMap\n * @returns {boolean}\n */\nconst isNamepathDefiningTag = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n return tagStruct.get('nameContents') === 'namepath-defining';\n};\n\n/**\n * @param tag\n * @param {Map} tagMap\n * @returns {boolean}\n */\nconst tagMustHaveTypePosition = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n return tagStruct.get('typeRequired');\n};\n\n/**\n * @param tag\n * @param {Map} tagMap\n * @returns {boolean}\n */\nconst tagMightHaveTypePosition = (tag, tagMap = tagStructure) => {\n if (tagMustHaveTypePosition(tag, tagMap)) {\n return true;\n }\n\n const tagStruct = ensureMap(tagMap, tag);\n\n const ret = tagStruct.get('typeAllowed');\n\n return ret === undefined ? true : ret;\n};\n\nconst namepathTypes = new Set([\n 'namepath-defining', 'namepath-referencing',\n]);\n\n/**\n * @param tag\n * @param {Map} tagMap\n * @returns {boolean}\n */\nconst tagMightHaveNamePosition = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n const ret = tagStruct.get('nameContents');\n\n return ret === undefined ? true : Boolean(ret);\n};\n\n/**\n * @param tag\n * @param {Map} tagMap\n * @returns {boolean}\n */\nconst tagMightHaveNamepath = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n return namepathTypes.has(tagStruct.get('nameContents'));\n};\n\n/**\n * @param tag\n * @param {Map} tagMap\n * @returns {boolean}\n */\nconst tagMustHaveNamePosition = (tag, tagMap = tagStructure) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n return tagStruct.get('nameRequired');\n};\n\n/**\n * @param tag\n * @param {Map} tagMap\n * @returns {boolean}\n */\nconst tagMightHaveEitherTypeOrNamePosition = (tag, tagMap) => {\n return tagMightHaveTypePosition(tag, tagMap) || tagMightHaveNamepath(tag, tagMap);\n};\n\n/**\n * @param tag\n * @param {Map} tagMap\n * @returns {boolean}\n */\nconst tagMustHaveEitherTypeOrNamePosition = (tag, tagMap) => {\n const tagStruct = ensureMap(tagMap, tag);\n\n return tagStruct.get('typeOrNameRequired');\n};\n\n/**\n * @param tag\n * @param {Map} tagMap\n * @returns {boolean}\n */\nconst tagMissingRequiredTypeOrNamepath = (tag, tagMap = tagStructure) => {\n const mustHaveTypePosition = tagMustHaveTypePosition(tag.tag, tagMap);\n const mightHaveTypePosition = tagMightHaveTypePosition(tag.tag, tagMap);\n const hasTypePosition = mightHaveTypePosition && Boolean(tag.type);\n const hasNameOrNamepathPosition = (\n tagMustHaveNamePosition(tag.tag, tagMap) ||\n tagMightHaveNamepath(tag.tag, tagMap)\n ) && Boolean(tag.name);\n const mustHaveEither = tagMustHaveEitherTypeOrNamePosition(tag.tag, tagMap);\n const hasEither = tagMightHaveEitherTypeOrNamePosition(tag.tag, tagMap) &&\n (hasTypePosition || hasNameOrNamepathPosition);\n\n return mustHaveEither && !hasEither && !mustHaveTypePosition;\n};\n\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.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\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 {PromiseFilter} promFilter\n * @returns {boolean|Node}\n */\n// eslint-disable-next-line complexity\nconst hasReturnValue = (node, promFilter) => {\n if (!node) {\n return false;\n }\n\n switch (node.type) {\n case 'TSFunctionType':\n case 'TSMethodSignature':\n return ![\n 'TSVoidKeyword',\n 'TSUndefinedKeyword',\n ].includes(node?.returnType?.typeAnnotation?.type);\n case 'MethodDefinition':\n return hasReturnValue(node.value, promFilter);\n case 'FunctionExpression':\n case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n return node.expression && (!isNewPromiseExpression(node.body) || !isVoidPromise(node?.body)) ||\n hasReturnValue(node.body, promFilter);\n }\n\n case 'BlockStatement': {\n return node.body.some((bodyNode) => {\n return bodyNode.type !== 'FunctionDeclaration' && hasReturnValue(bodyNode, 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, promFilter);\n }\n\n case 'IfStatement': {\n return hasReturnValue(node.consequent, promFilter) || hasReturnValue(node.alternate, promFilter);\n }\n\n case 'TryStatement': {\n return hasReturnValue(node.block, promFilter) ||\n hasReturnValue(node.handler && node.handler.body, promFilter) ||\n hasReturnValue(node.finalizer, promFilter);\n }\n\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some((nde) => {\n return hasReturnValue(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 * 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 * @returns {boolean}\n */\nconst hasValueOrExecutorHasNonEmptyResolveValue = (node, anyPromiseAsReturn) => {\n return hasReturnValue(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\n// eslint-disable-next-line complexity\nconst hasNonFunctionYield = (node, checkYieldReturnValue) => {\n if (!node) {\n return false;\n }\n\n switch (node.type) {\n case 'BlockStatement': {\n return node.body.some((bodyNode) => {\n return ![\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n ].includes(bodyNode.type) && hasNonFunctionYield(\n bodyNode, checkYieldReturnValue,\n );\n });\n }\n\n // istanbul ignore next -- In Babel?\n case 'OptionalCallExpression':\n case 'CallExpression':\n return node.arguments.some((element) => {\n return hasNonFunctionYield(element, checkYieldReturnValue);\n });\n case 'ChainExpression':\n case 'ExpressionStatement': {\n return hasNonFunctionYield(node.expression, checkYieldReturnValue);\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 hasNonFunctionYield(node.body, checkYieldReturnValue);\n }\n\n case 'ConditionalExpression':\n case 'IfStatement': {\n return hasNonFunctionYield(node.test, checkYieldReturnValue) ||\n hasNonFunctionYield(node.consequent, checkYieldReturnValue) ||\n hasNonFunctionYield(node.alternate, checkYieldReturnValue);\n }\n\n case 'TryStatement': {\n return hasNonFunctionYield(node.block, checkYieldReturnValue) ||\n hasNonFunctionYield(node.handler && node.handler.body, checkYieldReturnValue) ||\n hasNonFunctionYield(node.finalizer, checkYieldReturnValue);\n }\n\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some((nde) => {\n return hasNonFunctionYield(nde, checkYieldReturnValue);\n });\n },\n );\n }\n\n case 'ArrayPattern':\n case 'ArrayExpression':\n return node.elements.some((element) => {\n return hasNonFunctionYield(element, checkYieldReturnValue);\n });\n case 'AssignmentPattern':\n return hasNonFunctionYield(node.right, checkYieldReturnValue);\n\n case 'VariableDeclaration': {\n return node.declarations.some((nde) => {\n return hasNonFunctionYield(nde, checkYieldReturnValue);\n });\n }\n\n case 'VariableDeclarator': {\n return hasNonFunctionYield(node.id, checkYieldReturnValue) ||\n hasNonFunctionYield(node.init, checkYieldReturnValue);\n }\n\n case 'AssignmentExpression':\n case 'BinaryExpression':\n case 'LogicalExpression': {\n return hasNonFunctionYield(node.left, checkYieldReturnValue) ||\n hasNonFunctionYield(node.right, checkYieldReturnValue);\n }\n\n // Comma\n case 'SequenceExpression':\n case 'TemplateLiteral':\n return node.expressions.some((subExpression) => {\n return hasNonFunctionYield(subExpression, checkYieldReturnValue);\n });\n\n case 'ObjectPattern':\n case 'ObjectExpression':\n return node.properties.some((property) => {\n return hasNonFunctionYield(property, checkYieldReturnValue);\n });\n\n // istanbul ignore next -- In Babel?\n case 'PropertyDefinition':\n /* eslint-disable no-fallthrough */\n // istanbul ignore next -- In Babel?\n case 'ObjectProperty':\n // istanbul ignore next -- In Babel?\n case 'ClassProperty':\n /* eslint-enable no-fallthrough */\n case 'Property':\n return node.computed && hasNonFunctionYield(node.key, checkYieldReturnValue) ||\n hasNonFunctionYield(node.value, checkYieldReturnValue);\n // istanbul ignore next -- In Babel?\n case 'ObjectMethod':\n // istanbul ignore next -- In Babel?\n return node.computed && hasNonFunctionYield(node.key, checkYieldReturnValue) ||\n node.arguments.some((nde) => {\n return hasNonFunctionYield(nde, checkYieldReturnValue);\n });\n\n case 'SpreadElement':\n case 'UnaryExpression':\n return hasNonFunctionYield(node.argument, checkYieldReturnValue);\n\n case 'TaggedTemplateExpression':\n return hasNonFunctionYield(node.quasi, checkYieldReturnValue);\n\n // ?.\n // istanbul ignore next -- In Babel?\n case 'OptionalMemberExpression':\n case 'MemberExpression':\n return hasNonFunctionYield(node.object, checkYieldReturnValue) ||\n hasNonFunctionYield(node.property, checkYieldReturnValue);\n\n // istanbul ignore next -- In Babel?\n case 'Import':\n case 'ImportExpression':\n return hasNonFunctionYield(node.source, checkYieldReturnValue);\n\n case 'ReturnStatement': {\n if (node.argument === null) {\n return false;\n }\n\n return hasNonFunctionYield(node.argument, checkYieldReturnValue);\n }\n\n case 'YieldExpression': {\n if (checkYieldReturnValue) {\n if (node.parent.type === 'VariableDeclarator') {\n return true;\n }\n\n return false;\n }\n\n // void return does not count.\n if (node.argument === null) {\n return false;\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 * @returns {boolean}\n */\nconst hasYieldValue = (node, checkYieldReturnValue) => {\n return node.generator && (\n node.expression || hasNonFunctionYield(node.body, checkYieldReturnValue)\n );\n};\n\n/**\n * Checks if a node has a throws statement.\n *\n * @param {object} node\n * @param {boolean} innerFunction\n * @returns {boolean}\n */\n// eslint-disable-next-line complexity\nconst hasThrowValue = (node, innerFunction) => {\n if (!node) {\n return false;\n }\n\n // There are cases where a function may execute its inner function which\n // throws, but we're treating functions atomically rather than trying to\n // follow them\n switch (node.type) {\n case 'FunctionExpression':\n case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n return !innerFunction && !node.async && hasThrowValue(node.body, true);\n }\n\n case 'BlockStatement': {\n return node.body.some((bodyNode) => {\n return bodyNode.type !== 'FunctionDeclaration' && hasThrowValue(bodyNode);\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 hasThrowValue(node.body);\n }\n\n case 'IfStatement': {\n return hasThrowValue(node.consequent) || hasThrowValue(node.alternate);\n }\n\n // We only consider it to throw an error if the catch or finally blocks throw an error.\n case 'TryStatement': {\n return hasThrowValue(node.handler && node.handler.body) ||\n hasThrowValue(node.finalizer);\n }\n\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some((nde) => {\n return hasThrowValue(nde);\n });\n },\n );\n }\n\n case 'ThrowStatement': {\n return true;\n }\n\n default: {\n return false;\n }\n }\n};\n\n/**\n * @param {string} tag\n */\n/*\nconst isInlineTag = (tag) => {\n return /^(@link|@linkcode|@linkplain|@tutorial) /u.test(tag);\n};\n*/\n\n/**\n * Parses GCC Generic/Template types\n *\n * @see {https://github.com/google/closure-compiler/wiki/Generic-Types}\n * @see {https://www.typescriptlang.org/docs/handbook/jsdoc-supported-types.html#template}\n * @param {JsDocTag} tag\n * @returns {Array<string>}\n */\nconst parseClosureTemplateTag = (tag) => {\n return tag.name\n .split(',')\n .map((type) => {\n return type.trim();\n });\n};\n\n/**\n * Checks user option for `contexts` array, defaulting to\n * contexts designated by the rule. Returns an array of\n * ESTree AST types, indicating allowable contexts.\n *\n * @param {*} context\n * @param {true|string[]} defaultContexts\n * @returns {string[]}\n */\nconst enforcedContexts = (context, defaultContexts) => {\n const {\n contexts = defaultContexts === true ? [\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n ] : defaultContexts,\n } = context.options[0] || {};\n\n return contexts;\n};\n\n/**\n * @param {string[]} contexts\n * @param {Function} checkJsdoc\n * @param {Function} handler\n */\nconst getContextObject = (contexts, checkJsdoc, handler) => {\n const properties = {};\n\n for (const [\n idx,\n prop,\n ] of contexts.entries()) {\n let property;\n let value;\n\n if (typeof prop === 'object') {\n const selInfo = {\n lastIndex: idx,\n selector: prop.context,\n };\n if (prop.comment) {\n property = prop.context;\n value = checkJsdoc.bind(\n null, {\n ...selInfo,\n comment: prop.comment,\n }, handler.bind(null, prop.comment),\n );\n } else {\n property = prop.context;\n value = checkJsdoc.bind(null, selInfo, null);\n }\n } else {\n const selInfo = {\n lastIndex: idx,\n selector: prop,\n };\n property = prop;\n value = checkJsdoc.bind(null, selInfo, null);\n }\n\n const old = properties[property];\n properties[property] = old ? function (...args) {\n old(...args);\n value(...args);\n } : value;\n }\n\n return properties;\n};\n\nconst filterTags = (tags, filter) => {\n return tags.filter((tag) => {\n return filter(tag);\n });\n};\n\nconst tagsWithNamesAndDescriptions = new Set([\n 'param', 'arg', 'argument', 'property', 'prop',\n 'template',\n\n // These two are parsed by our custom parser as though having a `name`\n 'returns', 'return',\n]);\n\nconst getTagsByType = (context, mode, tags, tagPreference) => {\n const descName = getPreferredTagName(context, mode, 'description', tagPreference);\n const tagsWithoutNames = [];\n const tagsWithNames = filterTags(tags, (tag) => {\n const {\n tag: tagName,\n } = tag;\n const tagWithName = tagsWithNamesAndDescriptions.has(tagName);\n if (!tagWithName && tagName !== descName) {\n tagsWithoutNames.push(tag);\n }\n\n return tagWithName;\n });\n\n return {\n tagsWithNames,\n tagsWithoutNames,\n };\n};\n\nconst getIndent = (sourceCode) => {\n return (sourceCode.text.match(/^\\n*([ \\t]+)/u)?.[1] ?? '') + ' ';\n};\n\nconst isConstructor = (node) => {\n return node?.type === 'MethodDefinition' && node.kind === 'constructor' ||\n node?.parent?.kind === 'constructor';\n};\n\nconst isGetter = (node) => {\n return node && node.parent?.kind === 'get';\n};\n\nconst isSetter = (node) => {\n return node && node.parent?.kind === 'set';\n};\n\nconst hasAccessorPair = (node) => {\n const {\n type,\n kind: sourceKind,\n key: {\n name: sourceName,\n },\n } = node;\n const oppositeKind = sourceKind === 'get' ? 'set' : 'get';\n\n const children = type === 'MethodDefinition' ? 'body' : 'properties';\n\n return node.parent[children].some(({\n kind,\n key: {\n name,\n },\n }) => {\n return kind === oppositeKind && name === sourceName;\n });\n};\n\nconst exemptSpeciaMethods = (jsdoc, node, context, schema) => {\n const hasSchemaOption = (prop) => {\n const schemaProperties = schema[0].properties;\n\n return context.options[0]?.[prop] ??\n (schemaProperties[prop] && schemaProperties[prop].default);\n };\n\n const checkGetters = hasSchemaOption('checkGetters');\n const checkSetters = hasSchemaOption('checkSetters');\n\n return !hasSchemaOption('checkConstructors') &&\n (\n isConstructor(node) ||\n hasATag(jsdoc, [\n 'class',\n 'constructor',\n ])) ||\n isGetter(node) && (\n !checkGetters ||\n checkGetters === 'no-setter' && hasAccessorPair(node.parent)\n ) ||\n isSetter(node) && (\n !checkSetters ||\n checkSetters === 'no-getter' && hasAccessorPair(node.parent)\n );\n};\n\n/**\n * Since path segments may be unquoted (if matching a reserved word,\n * identifier or numeric literal) or single or double quoted, in either\n * the `@param` or in source, we need to strip the quotes to give a fair\n * comparison.\n *\n * @param {string} str\n * @returns {string}\n */\nconst dropPathSegmentQuotes = (str) => {\n return str.replace(/\\.(['\"])(.*)\\1/gu, '.$2');\n};\n\n/**\n * @param {string} name\n * @returns {(otherPathName: string) => void}\n */\nconst comparePaths = (name) => {\n return (otherPathName) => {\n return otherPathName === name ||\n dropPathSegmentQuotes(otherPathName) === dropPathSegmentQuotes(name);\n };\n};\n\n/**\n * @param {string} name\n * @param {string} otherPathName\n * @returns {boolean}\n */\nconst pathDoesNotBeginWith = (name, otherPathName) => {\n return !name.startsWith(otherPathName) &&\n !dropPathSegmentQuotes(name).startsWith(dropPathSegmentQuotes(otherPathName));\n};\n\n/**\n * @param {string} regexString\n * @param {string} requiredFlags\n * @returns {RegExp}\n */\nconst getRegexFromString = (regexString, requiredFlags) => {\n const match = regexString.match(/^\\/(.*)\\/([gimyus]*)$/us);\n let flags = 'u';\n let regex = regexString;\n if (match) {\n [\n , regex,\n flags,\n ] = match;\n if (!flags) {\n flags = 'u';\n }\n }\n\n const uniqueFlags = [\n ...new Set(flags + (requiredFlags || '')),\n ];\n flags = uniqueFlags.join('');\n\n return new RegExp(regex, flags);\n};\n\nexport default {\n comparePaths,\n dropPathSegmentQuotes,\n enforcedContexts,\n exemptSpeciaMethods,\n filterTags,\n flattenRoots,\n getContextObject,\n getFunctionParameterNames,\n getIndent,\n getJsdocTagsDeep,\n getPreferredTagName,\n getRegexFromString,\n getTagsByType,\n getTagStructureForMode,\n hasATag,\n hasDefinedTypeTag,\n hasParams,\n hasReturnValue,\n hasTag,\n hasThrowValue,\n hasValueOrExecutorHasNonEmptyResolveValue,\n hasYieldValue,\n isConstructor,\n isGetter,\n isNamepathDefiningTag,\n isSetter,\n isValidTag,\n overrideTagStructure,\n parseClosureTemplateTag,\n pathDoesNotBeginWith,\n setTagStructure,\n tagMightHaveNamepath,\n tagMightHaveNamePosition,\n tagMightHaveTypePosition,\n tagMissingRequiredTypeOrNamepath,\n tagMustHaveNamePosition,\n tagMustHaveTypePosition,\n};\n"],"file":"jsdocUtils.js"}
|
|
@@ -82,7 +82,7 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
82
82
|
return true;
|
|
83
83
|
}
|
|
84
84
|
|
|
85
|
-
return iteratingFunction && utils.hasValueOrExecutorHasNonEmptyResolveValue(forceReturnsWithAsync);
|
|
85
|
+
return !isAsync && iteratingFunction && utils.hasValueOrExecutorHasNonEmptyResolveValue(forceReturnsWithAsync);
|
|
86
86
|
};
|
|
87
87
|
|
|
88
88
|
if (shouldReport()) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/rules/requireReturns.js"],"names":["canSkip","utils","hasATag","avoidDocs","report","context","forceRequireReturn","forceReturnsWithAsync","options","tagName","getPreferredTagName","tags","getTags","length","iteratingFunction","isIteratingFunction","tag","missingReturnTag","shouldReport","isVirtualFunction","isAsync","hasTag","hasValueOrExecutorHasNonEmptyResolveValue","contextDefaults","meta","docs","description","url","schema","additionalProperties","properties","checkConstructors","default","type","checkGetters","contexts","items","anyOf","comment","exemptedBy"],"mappings":";;;;;;;AAAA;;;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMA,OAAO,GAAIC,KAAD,IAAW;AACzB,SAAOA,KAAK,CAACC,OAAN,CAAc,CACnB;AACA;AACA;AACA;AACA;AACA,YANmB,EAOnB,SAPmB,EASnB;AACA;AACA,SAXmB,EAYnB,aAZmB,EAcnB;AACA,QAfmB,EAiBnB;AACA,aAlBmB,CAAd,KAoBLD,KAAK,CAACE,SAAN,EApBF;AAqBD,CAtBD;;eAwBe,2BAAa,CAAC;AAC3BC,EAAAA,MAD2B;AAE3BH,EAAAA,KAF2B;AAG3BI,EAAAA;AAH2B,CAAD,KAItB;AACJ,QAAM;AACJC,IAAAA,kBAAkB,GAAG,KADjB;AAEJC,IAAAA,qBAAqB,GAAG;AAFpB,MAGFF,OAAO,CAACG,OAAR,CAAgB,CAAhB,KAAsB,EAH1B,CADI,CAMJ;AACA;;AACA,MAAIR,OAAO,CAACC,KAAD,CAAX,EAAoB;AAClB;AACD;;AAED,QAAMQ,OAAO,GAAGR,KAAK,CAACS,mBAAN,CAA0B;AACxCD,IAAAA,OAAO,EAAE;AAD+B,GAA1B,CAAhB;;AAGA,MAAI,CAACA,OAAL,EAAc;AACZ;AACD;;AAED,QAAME,IAAI,GAAGV,KAAK,CAACW,OAAN,CAAcH,OAAd,CAAb;;AAEA,MAAIE,IAAI,CAACE,MAAL,GAAc,CAAlB,EAAqB;AACnBT,IAAAA,MAAM,CAAE,wBAAuBK,OAAQ,eAAjC,CAAN;AACD;;AAED,QAAMK,iBAAiB,GAAGb,KAAK,CAACc,mBAAN,EAA1B,CAzBI,CA2BJ;;AACA,QAAM,CACJC,GADI,IAEFL,IAFJ;AAGA,QAAMM,gBAAgB,GAAG,OAAOD,GAAP,KAAe,WAAf,IAA8BA,GAAG,KAAK,IAA/D;;AAEA,QAAME,YAAY,GAAG,MAAM;AACzB,QAAI,CAACD,gBAAL,EAAuB;AACrB,aAAO,KAAP;AACD;;AAED,QAAIX,kBAAkB,KACpBQ,iBAAiB,IAAIb,KAAK,CAACkB,iBAAN,EADD,CAAtB,EAEG;AACD,aAAO,IAAP;AACD;;AAED,UAAMC,OAAO,GAAG,CAACN,iBAAD,IAAsBb,KAAK,CAACoB,MAAN,CAAa,OAAb,CAAtB,IACdP,iBAAiB,IAAIb,KAAK,CAACmB,OAAN,EADvB;;AAGA,QAAIb,qBAAqB,IAAIa,OAA7B,EAAsC;AACpC,aAAO,IAAP;AACD;;AAED,
|
|
1
|
+
{"version":3,"sources":["../../src/rules/requireReturns.js"],"names":["canSkip","utils","hasATag","avoidDocs","report","context","forceRequireReturn","forceReturnsWithAsync","options","tagName","getPreferredTagName","tags","getTags","length","iteratingFunction","isIteratingFunction","tag","missingReturnTag","shouldReport","isVirtualFunction","isAsync","hasTag","hasValueOrExecutorHasNonEmptyResolveValue","contextDefaults","meta","docs","description","url","schema","additionalProperties","properties","checkConstructors","default","type","checkGetters","contexts","items","anyOf","comment","exemptedBy"],"mappings":"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","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\n/**\n * We can skip checking for a return value, in case the documentation is inherited\n * or the method is either a constructor or an abstract method.\n *\n * In either of these cases the return value is optional or not defined.\n *\n * @param {*} utils\n * a reference to the utils which are used to probe if a tag is present or not.\n * @returns {boolean}\n * true in case deep checking can be skipped; otherwise false.\n */\nconst canSkip = (utils) => {\n return utils.hasATag([\n // inheritdoc implies that all documentation is inherited\n // see https://jsdoc.app/tags-inheritdoc.html\n //\n // Abstract methods are by definition incomplete,\n // so it is not an error if it declares a return value but does not implement it.\n 'abstract',\n 'virtual',\n\n // Constructors do not have a return value by definition (https://jsdoc.app/tags-class.html)\n // So we can bail out here, too.\n 'class',\n 'constructor',\n\n // Return type is specified by type in @type\n 'type',\n\n // This seems to imply a class as well\n 'interface',\n ]) ||\n utils.avoidDocs();\n};\n\nexport default iterateJsdoc(({\n report,\n utils,\n context,\n}) => {\n const {\n forceRequireReturn = false,\n forceReturnsWithAsync = false,\n } = context.options[0] || {};\n\n // A preflight check. We do not need to run a deep check\n // in case the @returns comment is optional or undefined.\n if (canSkip(utils)) {\n return;\n }\n\n const tagName = utils.getPreferredTagName({\n tagName: 'returns',\n });\n if (!tagName) {\n return;\n }\n\n const tags = utils.getTags(tagName);\n\n if (tags.length > 1) {\n report(`Found more than one @${tagName} declaration.`);\n }\n\n const iteratingFunction = utils.isIteratingFunction();\n\n // In case the code returns something, we expect a return value in JSDoc.\n const [\n tag,\n ] = tags;\n const missingReturnTag = typeof tag === 'undefined' || tag === null;\n\n const shouldReport = () => {\n if (!missingReturnTag) {\n return false;\n }\n\n if (forceRequireReturn && (\n iteratingFunction || utils.isVirtualFunction()\n )) {\n return true;\n }\n\n const isAsync = !iteratingFunction && utils.hasTag('async') ||\n iteratingFunction && utils.isAsync();\n\n if (forceReturnsWithAsync && isAsync) {\n return true;\n }\n\n return !isAsync && iteratingFunction && utils.hasValueOrExecutorHasNonEmptyResolveValue(\n forceReturnsWithAsync,\n );\n };\n\n if (shouldReport()) {\n report(`Missing JSDoc @${tagName} declaration.`);\n }\n}, {\n contextDefaults: true,\n meta: {\n docs: {\n description: 'Requires that returns are documented.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-returns',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n checkConstructors: {\n default: false,\n type: 'boolean',\n },\n checkGetters: {\n default: true,\n type: 'boolean',\n },\n contexts: {\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n comment: {\n type: 'string',\n },\n context: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n exemptedBy: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n forceRequireReturn: {\n default: false,\n type: 'boolean',\n },\n forceReturnsWithAsync: {\n default: false,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"requireReturns.js"}
|
package/package.json
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
"url": "http://gajus.com"
|
|
6
6
|
},
|
|
7
7
|
"dependencies": {
|
|
8
|
-
"@es-joy/jsdoccomment": "~0.20.
|
|
8
|
+
"@es-joy/jsdoccomment": "~0.20.1",
|
|
9
9
|
"comment-parser": "1.3.0",
|
|
10
10
|
"debug": "^4.3.3",
|
|
11
11
|
"escape-string-regexp": "^4.0.0",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"description": "JSDoc linting rules for ESLint.",
|
|
18
18
|
"devDependencies": {
|
|
19
19
|
"@babel/cli": "^7.17.3",
|
|
20
|
-
"@babel/core": "^7.17.
|
|
20
|
+
"@babel/core": "^7.17.5",
|
|
21
21
|
"@babel/eslint-parser": "^7.17.0",
|
|
22
22
|
"@babel/node": "^7.16.8",
|
|
23
23
|
"@babel/plugin-syntax-class-properties": "^7.12.13",
|
|
@@ -64,9 +64,17 @@
|
|
|
64
64
|
},
|
|
65
65
|
"main": "./dist/index.js",
|
|
66
66
|
"name": "eslint-plugin-jsdoc",
|
|
67
|
+
"mocha": {
|
|
68
|
+
"require": [
|
|
69
|
+
"@babel/register"
|
|
70
|
+
],
|
|
71
|
+
"reporter": "dot",
|
|
72
|
+
"recursive": true,
|
|
73
|
+
"timeout": 12000
|
|
74
|
+
},
|
|
67
75
|
"nyc": {
|
|
68
76
|
"branches": 100,
|
|
69
|
-
"check-coverage":
|
|
77
|
+
"check-coverage": true,
|
|
70
78
|
"exclude": [
|
|
71
79
|
"src/rules/checkExamples.js"
|
|
72
80
|
],
|
|
@@ -76,6 +84,7 @@
|
|
|
76
84
|
],
|
|
77
85
|
"instrument": false,
|
|
78
86
|
"lines": 100,
|
|
87
|
+
"reporter": "text-summary",
|
|
79
88
|
"require": [
|
|
80
89
|
"@babel/register"
|
|
81
90
|
],
|
|
@@ -102,10 +111,10 @@
|
|
|
102
111
|
"lint-arg": "eslint --report-unused-disable-directives",
|
|
103
112
|
"lint-fix": "npm run lint-arg -- --fix .",
|
|
104
113
|
"prepare": "husky install",
|
|
105
|
-
"test": "cross-env BABEL_ENV=test
|
|
106
|
-
"test
|
|
107
|
-
"test-
|
|
108
|
-
"test-
|
|
114
|
+
"test-no-cov": "cross-env BABEL_ENV=test mocha",
|
|
115
|
+
"test": "nyc npm run test-no-cov",
|
|
116
|
+
"test-cov": "cross-env TIMING=1 nyc --reporter text npm run test-no-cov",
|
|
117
|
+
"test-index": "npm run test-no-cov -- test/rules/index.js"
|
|
109
118
|
},
|
|
110
|
-
"version": "37.9.
|
|
119
|
+
"version": "37.9.5"
|
|
111
120
|
}
|