{"version":3,"file":"requireReturns.cjs","names":["_exportParser","_interopRequireDefault","require","_iterateJsdoc","e","__esModule","default","canSkip","utils","hasATag","avoidDocs","_default","exports","iterateJsdoc","info","comment","node","report","settings","context","contexts","enableFixer","forceRequireReturn","forceReturnsWithAsync","publicOnly","options","forceRequireReturnContext","foundContext","findContext","tagName","getPreferredTagName","tags","getTags","length","iteratingFunction","isIteratingFunction","tag","missingReturnTag","shouldReport","opt","ancestorsOnly","Boolean","esm","initModuleExports","cjs","initWindow","window","sourceCode","getSourceCode","exported","exportParser","isUncommentedExport","isVirtualFunction","isAsync","hasTag","hasValueOrExecutorHasNonEmptyResolveValue","reportJSDoc","addTag","contextDefaults","meta","docs","description","url","fixable","schema","additionalProperties","properties","checkConstructors","type","checkGetters","items","anyOf","exemptedBy","oneOf","module"],"sources":["../../src/rules/requireReturns.js"],"sourcesContent":["import exportParser from '../exportParser.js';\nimport iterateJsdoc from '../iterateJsdoc.js';\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 * @param {import('../iterateJsdoc.js').Utils} 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  info: {\n    comment,\n  },\n  node,\n  report,\n  settings,\n  utils,\n  context,\n}) => {\n  const {\n    contexts,\n    enableFixer = false,\n    forceRequireReturn = false,\n    forceReturnsWithAsync = false,\n    publicOnly = 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  /** @type {boolean|undefined} */\n  let forceRequireReturnContext;\n  if (contexts) {\n    const {\n      foundContext,\n    } = utils.findContext(contexts, comment);\n    if (typeof foundContext === 'object') {\n      forceRequireReturnContext = foundContext.forceRequireReturn;\n    }\n  }\n\n  const tagName = /** @type {string} */ (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 (publicOnly) {\n      /** @type {import('./requireJsdoc.js').RequireJsdocOpts} */\n      const opt = {\n        ancestorsOnly: Boolean(publicOnly?.ancestorsOnly ?? false),\n        esm: Boolean(publicOnly?.esm ?? true),\n        initModuleExports: Boolean(publicOnly?.cjs ?? true),\n        initWindow: Boolean(publicOnly?.window ?? false),\n      };\n      /* c8 ignore next -- Fallback to deprecated method */\n      const {\n        sourceCode = context.getSourceCode(),\n      } = context;\n      const exported = exportParser.isUncommentedExport(\n        /** @type {import('eslint').Rule.Node} */ (node), sourceCode, opt, settings,\n      );\n\n      if (!exported) {\n        return false;\n      }\n    }\n\n    if ((forceRequireReturn || forceRequireReturnContext) && (\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 iteratingFunction && utils.hasValueOrExecutorHasNonEmptyResolveValue(\n      forceReturnsWithAsync,\n    );\n  };\n\n  if (shouldReport()) {\n    utils.reportJSDoc(`Missing JSDoc @${tagName} declaration.`, null, enableFixer ? () => {\n      utils.addTag(tagName);\n    } : null);\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/blob/main/docs/rules/require-returns.md#repos-sticky-header',\n    },\n    fixable: 'code',\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                    forceRequireReturn: {\n                      type: 'boolean',\n                    },\n                  },\n                  type: 'object',\n                },\n              ],\n            },\n            type: 'array',\n          },\n          enableFixer: {\n            type: 'boolean',\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          publicOnly: {\n            oneOf: [\n              {\n                default: false,\n                type: 'boolean',\n              },\n              {\n                additionalProperties: false,\n                default: {},\n                properties: {\n                  ancestorsOnly: {\n                    type: 'boolean',\n                  },\n                  cjs: {\n                    type: 'boolean',\n                  },\n                  esm: {\n                    type: 'boolean',\n                  },\n                  window: {\n                    type: 'boolean',\n                  },\n                },\n                type: 'object',\n              },\n            ],\n          },\n        },\n        type: 'object',\n      },\n    ],\n    type: 'suggestion',\n  },\n});\n"],"mappings":"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","ignoreList":[]}