eslint-plugin-jsdoc 15.7.2 → 15.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +54 -1
- package/dist/iterateJsdoc.js +2 -2
- package/dist/iterateJsdoc.js.map +1 -1
- package/dist/jsdocUtils.js +50 -282
- package/dist/jsdocUtils.js.map +1 -1
- package/dist/rules/checkTypes.js +1 -1
- package/dist/rules/checkTypes.js.map +1 -1
- package/dist/rules/requireReturns.js +17 -1
- package/dist/rules/requireReturns.js.map +1 -1
- package/dist/rules/requireReturnsCheck.js +4 -0
- package/dist/rules/requireReturnsCheck.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1565,7 +1565,9 @@ undefined
|
|
|
1565
1565
|
null
|
|
1566
1566
|
boolean
|
|
1567
1567
|
number
|
|
1568
|
+
bigint
|
|
1568
1569
|
string
|
|
1570
|
+
symbol
|
|
1569
1571
|
object
|
|
1570
1572
|
Array
|
|
1571
1573
|
Function
|
|
@@ -6320,7 +6322,7 @@ function assign({name, department}) {
|
|
|
6320
6322
|
<a name="eslint-plugin-jsdoc-rules-require-returns-check"></a>
|
|
6321
6323
|
### <code>require-returns-check</code>
|
|
6322
6324
|
|
|
6323
|
-
|
|
6325
|
+
Requires a return statement in function body if a `@returns` tag is specified in jsdoc comment.
|
|
6324
6326
|
|
|
6325
6327
|
Will also report if multiple `@returns` tags are present.
|
|
6326
6328
|
|
|
@@ -6394,6 +6396,20 @@ function quux () {
|
|
|
6394
6396
|
}
|
|
6395
6397
|
// Settings: {"jsdoc":{"tagNamePreference":{"returns":false}}}
|
|
6396
6398
|
// Message: Unexpected tag `@returns`
|
|
6399
|
+
|
|
6400
|
+
/**
|
|
6401
|
+
* @returns {string}
|
|
6402
|
+
*/
|
|
6403
|
+
function f () {
|
|
6404
|
+
function g() {
|
|
6405
|
+
return 'foo'
|
|
6406
|
+
}
|
|
6407
|
+
|
|
6408
|
+
() => {
|
|
6409
|
+
return 5
|
|
6410
|
+
}
|
|
6411
|
+
}
|
|
6412
|
+
// Message: JSDoc @returns declaration present but return expression not available in function.
|
|
6397
6413
|
````
|
|
6398
6414
|
|
|
6399
6415
|
The following patterns are not considered problems:
|
|
@@ -6610,6 +6626,43 @@ function quux () {
|
|
|
6610
6626
|
return;
|
|
6611
6627
|
}
|
|
6612
6628
|
|
|
6629
|
+
/**
|
|
6630
|
+
* @returns {true}
|
|
6631
|
+
*/
|
|
6632
|
+
function quux () {
|
|
6633
|
+
for (const a in b) {
|
|
6634
|
+
return true;
|
|
6635
|
+
}
|
|
6636
|
+
}
|
|
6637
|
+
|
|
6638
|
+
/**
|
|
6639
|
+
* @returns {true}
|
|
6640
|
+
*/
|
|
6641
|
+
function quux () {
|
|
6642
|
+
for (let i=0; i<n; i+=1) {
|
|
6643
|
+
return true;
|
|
6644
|
+
}
|
|
6645
|
+
}
|
|
6646
|
+
|
|
6647
|
+
/**
|
|
6648
|
+
* @returns {true}
|
|
6649
|
+
*/
|
|
6650
|
+
function quux () {
|
|
6651
|
+
while(true) {
|
|
6652
|
+
return true
|
|
6653
|
+
}
|
|
6654
|
+
}
|
|
6655
|
+
|
|
6656
|
+
/**
|
|
6657
|
+
* @returns {true}
|
|
6658
|
+
*/
|
|
6659
|
+
function quux () {
|
|
6660
|
+
do {
|
|
6661
|
+
return true
|
|
6662
|
+
}
|
|
6663
|
+
while(true)
|
|
6664
|
+
}
|
|
6665
|
+
|
|
6613
6666
|
/**
|
|
6614
6667
|
* @returns {true}
|
|
6615
6668
|
*/
|
package/dist/iterateJsdoc.js
CHANGED
|
@@ -209,8 +209,8 @@ const getUtils = (node, jsdoc, jsdocNode, {
|
|
|
209
209
|
return _jsdocUtils.default.hasDefinedTypeReturnTag(tag);
|
|
210
210
|
};
|
|
211
211
|
|
|
212
|
-
utils.hasReturnValue = (
|
|
213
|
-
return _jsdocUtils.default.hasReturnValue(node
|
|
212
|
+
utils.hasReturnValue = () => {
|
|
213
|
+
return _jsdocUtils.default.hasReturnValue(node);
|
|
214
214
|
};
|
|
215
215
|
|
|
216
216
|
utils.isAsync = () => {
|
package/dist/iterateJsdoc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/iterateJsdoc.js"],"names":["parseComment","commentNode","indent","trim","value","parsers","commentParser","PARSERS","parse_tag","parse_type","str","data","includes","tag","parse_name","parse_description","errors","length","result","match","description","undefined","source","getUtils","node","jsdoc","jsdocNode","tagNamePreference","overrideReplacesDocs","implementsReplacesDocs","augmentsExtendsReplacesDocs","maxLines","minLines","report","context","ancestors","getAncestors","sourceCode","getSourceCode","utils","stringify","tagBlock","jsdocUtils","getIndent","slice","reportJSDoc","msg","handler","fixer","replacement","replaceText","getFunctionParameterNames","isConstructor","parent","kind","isSetter","getJsdocParameterNamesDeep","param","getPreferredTagName","tagName","getJsdocParameterNames","skipReportingBlockedTag","allowObjectReturn","defaultMessage","ret","isObject","hasTag","blocked","message","getTags","isValidTag","name","definedTags","hasATag","avoidDocs","classHasTag","exemptedBy","_","get","getPresentTags","isNamepathDefiningTag","isNamepathTag","checkSeesForNamepaths","isTagWithType","passesEmptyNamepathCheck","allowEmptyNamepaths","isPotentiallyEmptyNamepathTag","hasDefinedTypeReturnTag","hasReturnValue","ignoreAsync","isAsync","async","filterTags","item","tagList","filter","tags","getTagsByType","getClassNode","greatGrandParent","getAncestor","greatGrandParentValue","getFirstToken","getClassJsdoc","classNode","classJsdocNode","repeat","loc","start","column","classJsdoc","forEachPreferredTag","arrayHandler","targetTagName","matchingJsdocTags","forEach","matchingJsdocTag","reportSettings","line","getSettings","settings","ignorePrivate","Boolean","Number","preferredTypes","makeReport","fix","jsdocLoc","lineNumber","end","colNumber","iterateAllJsdocs","iterator","ruleConfig","create","comments","getAllComments","comment","getText","startsWith","noTrim","meta","iterateJsdoc","metaType","TypeError","checkJsdoc","contextDefaults","contexts","enforcedContexts","getContextObject","ArrowFunctionExpression","FunctionDeclaration","FunctionExpression"],"mappings":"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","sourcesContent":["// eslint-disable-next-line import/no-named-default\nimport {default as commentParser, stringify as commentStringify} from 'comment-parser';\nimport _ from 'lodash';\nimport jsdocUtils from './jsdocUtils';\nimport getJSDocComment from './eslint/getJSDocComment';\n\n/**\n *\n * @param {object} commentNode\n * @param {string} indent Whitespace\n * @returns {object}\n */\nconst parseComment = (commentNode, indent, trim = true) => {\n // Preserve JSDoc block start/end indentation.\n return commentParser(`${indent}/*${commentNode.value}${indent}*/`, {\n // @see https://github.com/yavorskiy/comment-parser/issues/21\n parsers: [\n commentParser.PARSERS.parse_tag,\n commentParser.PARSERS.parse_type,\n (str, data) => {\n if (['example', 'return', 'returns', 'throws', 'exception'].includes(data.tag)) {\n return null;\n }\n\n return commentParser.PARSERS.parse_name(str, data);\n },\n trim ?\n commentParser.PARSERS.parse_description :\n\n // parse_description\n (str, data) => {\n // Only expected throw in previous step is if bad name (i.e.,\n // missing end bracket on optional name), but `@example`\n // skips name parsing\n /* istanbul ignore next */\n if (data.errors && data.errors.length) {\n return null;\n }\n\n // Tweak original regex to capture only single optional space\n const result = str.match(/^\\s?((.|\\s)+)?/);\n\n // Always has at least whitespace due to `indent` we've added\n /* istanbul ignore next */\n if (result) {\n return {\n data: {\n description: result[1] === undefined ? '' : result[1]\n },\n source: result[0]\n };\n }\n\n // Always has at least whitespace due to `indent` we've added\n /* istanbul ignore next */\n return null;\n }\n ],\n trim\n })[0] || {};\n};\n\nconst getUtils = (\n node,\n jsdoc,\n jsdocNode,\n {\n tagNamePreference,\n overrideReplacesDocs,\n implementsReplacesDocs,\n augmentsExtendsReplacesDocs,\n maxLines,\n minLines\n },\n report,\n context\n) => {\n const ancestors = context.getAncestors();\n const sourceCode = context.getSourceCode();\n\n const utils = {};\n\n utils.stringify = (tagBlock) => {\n const indent = jsdocUtils.getIndent(sourceCode);\n\n return commentStringify([tagBlock], {indent}).slice(indent.length - 1);\n };\n\n utils.reportJSDoc = (msg, tag, handler) => {\n report(msg, (fixer) => {\n handler();\n const replacement = utils.stringify(jsdoc);\n\n return fixer.replaceText(jsdocNode, replacement);\n }, tag);\n };\n\n utils.getFunctionParameterNames = () => {\n return jsdocUtils.getFunctionParameterNames(node);\n };\n\n utils.isConstructor = () => {\n return node.parent && node.parent.kind === 'constructor';\n };\n\n utils.isSetter = () => {\n return node.parent.kind === 'set';\n };\n\n utils.getJsdocParameterNamesDeep = () => {\n const param = utils.getPreferredTagName({tagName: 'param'});\n if (!param) {\n return false;\n }\n\n return jsdocUtils.getJsdocParameterNamesDeep(jsdoc, param);\n };\n\n utils.getJsdocParameterNames = () => {\n const param = utils.getPreferredTagName({tagName: 'param'});\n if (!param) {\n return false;\n }\n\n return jsdocUtils.getJsdocParameterNames(jsdoc, param);\n };\n\n utils.getPreferredTagName = ({tagName, skipReportingBlockedTag = false, allowObjectReturn = false, defaultMessage = `Unexpected tag \\`@${tagName}\\``}) => {\n const ret = jsdocUtils.getPreferredTagName(tagName, tagNamePreference);\n const isObject = ret && typeof ret === 'object';\n if (utils.hasTag(tagName) && (ret === false || isObject && !ret.replacement)) {\n if (skipReportingBlockedTag) {\n return {\n blocked: true,\n tagName\n };\n }\n const message = isObject && ret.message || defaultMessage;\n report(message, null, utils.getTags(tagName)[0]);\n\n return false;\n }\n\n return isObject && !allowObjectReturn ? ret.replacement : ret;\n };\n\n utils.isValidTag = (name, definedTags) => {\n return jsdocUtils.isValidTag(name, definedTags);\n };\n\n utils.hasATag = (name) => {\n return jsdocUtils.hasATag(jsdoc, name);\n };\n\n utils.hasTag = (name) => {\n return jsdocUtils.hasTag(jsdoc, name);\n };\n\n utils.avoidDocs = () => {\n if (\n overrideReplacesDocs !== false &&\n (utils.hasTag('override') || utils.classHasTag('override')) ||\n implementsReplacesDocs !== false &&\n (utils.hasTag('implements') || utils.classHasTag('implements')) ||\n\n // inheritdoc implies that all documentation is inherited; see https://jsdoc.app/tags-inheritdoc.html\n utils.hasTag('inheritdoc') ||\n\n augmentsExtendsReplacesDocs &&\n (utils.hasATag(['augments', 'extends']) ||\n utils.classHasTag('augments') ||\n utils.classHasTag('extends'))) {\n return true;\n }\n\n const exemptedBy = _.get(context, 'options[0].exemptedBy');\n if (exemptedBy && exemptedBy.length && utils.getPresentTags(exemptedBy).length) {\n return true;\n }\n\n return false;\n };\n\n utils.isNamepathDefiningTag = (tagName) => {\n return jsdocUtils.isNamepathDefiningTag(tagName);\n };\n utils.isNamepathTag = (tagName, checkSeesForNamepaths) => {\n return jsdocUtils.isNamepathTag(tagName, checkSeesForNamepaths);\n };\n\n utils.isTagWithType = (tagName) => {\n return jsdocUtils.isTagWithType(tagName);\n };\n\n utils.passesEmptyNamepathCheck = (tag, allowEmptyNamepaths) => {\n return !tag.name && allowEmptyNamepaths &&\n jsdocUtils.isPotentiallyEmptyNamepathTag(tag.tag);\n };\n\n utils.hasDefinedTypeReturnTag = (tag) => {\n return jsdocUtils.hasDefinedTypeReturnTag(tag);\n };\n\n utils.hasReturnValue = (ignoreAsync = false) => {\n return jsdocUtils.hasReturnValue(node, context, ignoreAsync);\n };\n\n utils.isAsync = () => {\n return node.async;\n };\n\n utils.getTags = (tagName) => {\n return utils.filterTags((item) => {\n return item.tag === tagName;\n });\n };\n\n utils.getPresentTags = (tagList) => {\n return utils.filterTags((tag) => {\n return tagList.includes(tag.tag);\n });\n };\n\n utils.filterTags = (filter) => {\n return jsdocUtils.filterTags(jsdoc.tags, filter);\n };\n\n utils.getTagsByType = (tags) => {\n return jsdocUtils.getTagsByType(tags, tagNamePreference);\n };\n\n utils.getClassNode = () => {\n // Ancestors missing in `Program` comment iteration\n const greatGrandParent = ancestors.length ?\n ancestors.slice(-3)[0] :\n jsdocUtils.getAncestor(sourceCode, jsdocNode, 3);\n\n const greatGrandParentValue = greatGrandParent && sourceCode.getFirstToken(greatGrandParent).value;\n\n if (greatGrandParentValue === 'class') {\n return greatGrandParent;\n }\n\n return false;\n };\n\n utils.getClassJsdoc = () => {\n const classNode = utils.getClassNode();\n const classJsdocNode = getJSDocComment(sourceCode, classNode, {\n maxLines,\n minLines\n });\n\n if (classJsdocNode) {\n const indent = ' '.repeat(classJsdocNode.loc.start.column);\n\n return parseComment(classJsdocNode, indent);\n }\n\n return null;\n };\n\n utils.classHasTag = (tagName) => {\n const classJsdoc = utils.getClassJsdoc();\n\n return classJsdoc && jsdocUtils.hasTag(classJsdoc, tagName);\n };\n\n utils.forEachPreferredTag = (tagName, arrayHandler, skipReportingBlockedTag = false) => {\n const targetTagName = utils.getPreferredTagName({\n skipReportingBlockedTag,\n tagName\n });\n if (!targetTagName ||\n skipReportingBlockedTag && targetTagName && typeof targetTagName === 'object'\n ) {\n return;\n }\n const matchingJsdocTags = _.filter(jsdoc.tags || [], {\n tag: targetTagName\n });\n\n matchingJsdocTags.forEach((matchingJsdocTag) => {\n arrayHandler(matchingJsdocTag, targetTagName);\n });\n };\n\n utils.reportSettings = (message) => {\n context.report({\n loc: {\n start: {\n column: 1,\n line: 1\n }\n },\n message\n });\n };\n\n return utils;\n};\n\nconst getSettings = (context) => {\n const settings = {};\n\n // All rules\n settings.ignorePrivate = Boolean(_.get(context, 'settings.jsdoc.ignorePrivate'));\n settings.minLines = Number(_.get(context, 'settings.jsdoc.minLines', 0));\n settings.maxLines = Number(_.get(context, 'settings.jsdoc.maxLines', 1));\n\n // `check-tag-names` and many returns/param rules\n settings.tagNamePreference = _.get(context, 'settings.jsdoc.tagNamePreference') || {};\n\n // `check-types` and `no-undefined-types`\n settings.preferredTypes = _.get(context, 'settings.jsdoc.preferredTypes') || {};\n\n // `require-param`, `require-description`, `require-example`, `require-returns`\n settings.overrideReplacesDocs = _.get(context, 'settings.jsdoc.overrideReplacesDocs');\n settings.implementsReplacesDocs = _.get(context, 'settings.jsdoc.implementsReplacesDocs');\n settings.augmentsExtendsReplacesDocs = _.get(context, 'settings.jsdoc.augmentsExtendsReplacesDocs');\n\n return settings;\n};\n\n/**\n * Create the report function\n *\n * @param {object} context\n * @param {object} commentNode\n */\nconst makeReport = (context, commentNode) => {\n const report = (message, fix = null, jsdocLoc = null, data = null) => {\n let loc;\n\n if (jsdocLoc) {\n const lineNumber = commentNode.loc.start.line + jsdocLoc.line;\n\n loc = {\n end: {line: lineNumber},\n start: {line: lineNumber}\n };\n if (jsdocLoc.column) {\n const colNumber = commentNode.loc.start.column + jsdocLoc.column;\n\n loc.end.column = colNumber;\n loc.start.column = colNumber;\n }\n }\n\n context.report({\n data,\n fix,\n loc,\n message,\n node: commentNode\n });\n };\n\n return report;\n};\n\n/**\n * @typedef {ReturnType<typeof getUtils>} Utils\n * @typedef {ReturnType<typeof getSettings>} Settings\n * @typedef {(\n * arg: {\n * context: Object,\n * sourceCode: Object,\n * indent: string,\n * jsdoc: Object,\n * jsdocNode: Object,\n * node: Object | null,\n * report: ReturnType<typeof makeReport>,\n * settings: Settings,\n * utils: Utils,\n * }\n * ) => any } JsdocVisitor\n */\n\n/**\n * Create an eslint rule that iterates over all JSDocs, regardless of whether\n * they are attached to a function-like node.\n *\n * @param {JsdocVisitor} iterator\n * @param {{meta: any}} ruleConfig\n */\nconst iterateAllJsdocs = (iterator, ruleConfig) => {\n return {\n create (context) {\n return {\n 'Program' () {\n const sourceCode = context.getSourceCode();\n const comments = sourceCode.getAllComments();\n\n comments.forEach((comment) => {\n if (!sourceCode.getText(comment).startsWith('/**')) {\n return;\n }\n\n const indent = ' '.repeat(comment.loc.start.column);\n const jsdoc = parseComment(comment, indent, !ruleConfig.noTrim);\n const settings = getSettings(context);\n const report = makeReport(context, comment);\n const jsdocNode = comment;\n\n iterator({\n context,\n indent,\n jsdoc,\n jsdocNode,\n node: null,\n report,\n settings,\n sourceCode,\n utils: getUtils(null, jsdoc, jsdocNode, settings, report, context)\n });\n });\n }\n };\n },\n meta: ruleConfig.meta\n };\n};\n\nexport {\n getSettings,\n parseComment\n};\n\n/**\n * @param {JsdocVisitor} iterator\n * @param {{\n * meta: any,\n * contextDefaults?: true | string[],\n * iterateAllJsdocs?: true,\n * }} ruleConfig\n */\nexport default function iterateJsdoc (iterator, ruleConfig) {\n const metaType = _.get(ruleConfig, 'meta.type');\n if (!metaType || !['problem', 'suggestion', 'layout'].includes(metaType)) {\n throw new TypeError('Rule must include `meta.type` option (with value \"problem\", \"suggestion\", or \"layout\")');\n }\n if (typeof iterator !== 'function') {\n throw new TypeError('The iterator argument must be a function.');\n }\n\n if (ruleConfig.iterateAllJsdocs) {\n return iterateAllJsdocs(iterator, {\n meta: ruleConfig.meta,\n noTrim: ruleConfig.noTrim\n });\n }\n\n return {\n /**\n * The entrypoint for the JSDoc rule.\n *\n * @param {*} context\n * a reference to the context which hold all important information\n * like settings and the sourcecode to check.\n * @returns {object}\n * a list with parser callback function.\n */\n create (context) {\n const sourceCode = context.getSourceCode();\n\n const settings = getSettings(context);\n\n const checkJsdoc = (node) => {\n const jsdocNode = getJSDocComment(sourceCode, node, settings);\n\n if (!jsdocNode) {\n return;\n }\n\n const indent = ' '.repeat(jsdocNode.loc.start.column);\n\n const jsdoc = parseComment(jsdocNode, indent);\n\n const report = makeReport(context, jsdocNode);\n\n const utils = getUtils(\n node,\n jsdoc,\n jsdocNode,\n settings,\n report,\n context\n );\n\n if (\n settings.ignorePrivate &&\n utils.hasTag('private')\n ) {\n return;\n }\n\n iterator({\n context,\n indent,\n jsdoc,\n jsdocNode,\n node,\n report,\n settings,\n sourceCode,\n utils\n });\n };\n\n if (ruleConfig.contextDefaults) {\n const contexts = jsdocUtils.enforcedContexts(context, ruleConfig.contextDefaults);\n\n return jsdocUtils.getContextObject(contexts, checkJsdoc);\n }\n\n return {\n ArrowFunctionExpression: checkJsdoc,\n FunctionDeclaration: checkJsdoc,\n FunctionExpression: checkJsdoc\n };\n },\n meta: ruleConfig.meta\n };\n}\n"],"file":"iterateJsdoc.js"}
|
|
1
|
+
{"version":3,"sources":["../src/iterateJsdoc.js"],"names":["parseComment","commentNode","indent","trim","value","parsers","commentParser","PARSERS","parse_tag","parse_type","str","data","includes","tag","parse_name","parse_description","errors","length","result","match","description","undefined","source","getUtils","node","jsdoc","jsdocNode","tagNamePreference","overrideReplacesDocs","implementsReplacesDocs","augmentsExtendsReplacesDocs","maxLines","minLines","report","context","ancestors","getAncestors","sourceCode","getSourceCode","utils","stringify","tagBlock","jsdocUtils","getIndent","slice","reportJSDoc","msg","handler","fixer","replacement","replaceText","getFunctionParameterNames","isConstructor","parent","kind","isSetter","getJsdocParameterNamesDeep","param","getPreferredTagName","tagName","getJsdocParameterNames","skipReportingBlockedTag","allowObjectReturn","defaultMessage","ret","isObject","hasTag","blocked","message","getTags","isValidTag","name","definedTags","hasATag","avoidDocs","classHasTag","exemptedBy","_","get","getPresentTags","isNamepathDefiningTag","isNamepathTag","checkSeesForNamepaths","isTagWithType","passesEmptyNamepathCheck","allowEmptyNamepaths","isPotentiallyEmptyNamepathTag","hasDefinedTypeReturnTag","hasReturnValue","isAsync","async","filterTags","item","tagList","filter","tags","getTagsByType","getClassNode","greatGrandParent","getAncestor","greatGrandParentValue","getFirstToken","getClassJsdoc","classNode","classJsdocNode","repeat","loc","start","column","classJsdoc","forEachPreferredTag","arrayHandler","targetTagName","matchingJsdocTags","forEach","matchingJsdocTag","reportSettings","line","getSettings","settings","ignorePrivate","Boolean","Number","preferredTypes","makeReport","fix","jsdocLoc","lineNumber","end","colNumber","iterateAllJsdocs","iterator","ruleConfig","create","comments","getAllComments","comment","getText","startsWith","noTrim","meta","iterateJsdoc","metaType","TypeError","checkJsdoc","contextDefaults","contexts","enforcedContexts","getContextObject","ArrowFunctionExpression","FunctionDeclaration","FunctionExpression"],"mappings":"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","sourcesContent":["// eslint-disable-next-line import/no-named-default\nimport {default as commentParser, stringify as commentStringify} from 'comment-parser';\nimport _ from 'lodash';\nimport jsdocUtils from './jsdocUtils';\nimport getJSDocComment from './eslint/getJSDocComment';\n\n/**\n *\n * @param {object} commentNode\n * @param {string} indent Whitespace\n * @returns {object}\n */\nconst parseComment = (commentNode, indent, trim = true) => {\n // Preserve JSDoc block start/end indentation.\n return commentParser(`${indent}/*${commentNode.value}${indent}*/`, {\n // @see https://github.com/yavorskiy/comment-parser/issues/21\n parsers: [\n commentParser.PARSERS.parse_tag,\n commentParser.PARSERS.parse_type,\n (str, data) => {\n if (['example', 'return', 'returns', 'throws', 'exception'].includes(data.tag)) {\n return null;\n }\n\n return commentParser.PARSERS.parse_name(str, data);\n },\n trim ?\n commentParser.PARSERS.parse_description :\n\n // parse_description\n (str, data) => {\n // Only expected throw in previous step is if bad name (i.e.,\n // missing end bracket on optional name), but `@example`\n // skips name parsing\n /* istanbul ignore next */\n if (data.errors && data.errors.length) {\n return null;\n }\n\n // Tweak original regex to capture only single optional space\n const result = str.match(/^\\s?((.|\\s)+)?/);\n\n // Always has at least whitespace due to `indent` we've added\n /* istanbul ignore next */\n if (result) {\n return {\n data: {\n description: result[1] === undefined ? '' : result[1]\n },\n source: result[0]\n };\n }\n\n // Always has at least whitespace due to `indent` we've added\n /* istanbul ignore next */\n return null;\n }\n ],\n trim\n })[0] || {};\n};\n\nconst getUtils = (\n node,\n jsdoc,\n jsdocNode,\n {\n tagNamePreference,\n overrideReplacesDocs,\n implementsReplacesDocs,\n augmentsExtendsReplacesDocs,\n maxLines,\n minLines\n },\n report,\n context\n) => {\n const ancestors = context.getAncestors();\n const sourceCode = context.getSourceCode();\n\n const utils = {};\n\n utils.stringify = (tagBlock) => {\n const indent = jsdocUtils.getIndent(sourceCode);\n\n return commentStringify([tagBlock], {indent}).slice(indent.length - 1);\n };\n\n utils.reportJSDoc = (msg, tag, handler) => {\n report(msg, (fixer) => {\n handler();\n const replacement = utils.stringify(jsdoc);\n\n return fixer.replaceText(jsdocNode, replacement);\n }, tag);\n };\n\n utils.getFunctionParameterNames = () => {\n return jsdocUtils.getFunctionParameterNames(node);\n };\n\n utils.isConstructor = () => {\n return node.parent && node.parent.kind === 'constructor';\n };\n\n utils.isSetter = () => {\n return node.parent.kind === 'set';\n };\n\n utils.getJsdocParameterNamesDeep = () => {\n const param = utils.getPreferredTagName({tagName: 'param'});\n if (!param) {\n return false;\n }\n\n return jsdocUtils.getJsdocParameterNamesDeep(jsdoc, param);\n };\n\n utils.getJsdocParameterNames = () => {\n const param = utils.getPreferredTagName({tagName: 'param'});\n if (!param) {\n return false;\n }\n\n return jsdocUtils.getJsdocParameterNames(jsdoc, param);\n };\n\n utils.getPreferredTagName = ({tagName, skipReportingBlockedTag = false, allowObjectReturn = false, defaultMessage = `Unexpected tag \\`@${tagName}\\``}) => {\n const ret = jsdocUtils.getPreferredTagName(tagName, tagNamePreference);\n const isObject = ret && typeof ret === 'object';\n if (utils.hasTag(tagName) && (ret === false || isObject && !ret.replacement)) {\n if (skipReportingBlockedTag) {\n return {\n blocked: true,\n tagName\n };\n }\n const message = isObject && ret.message || defaultMessage;\n report(message, null, utils.getTags(tagName)[0]);\n\n return false;\n }\n\n return isObject && !allowObjectReturn ? ret.replacement : ret;\n };\n\n utils.isValidTag = (name, definedTags) => {\n return jsdocUtils.isValidTag(name, definedTags);\n };\n\n utils.hasATag = (name) => {\n return jsdocUtils.hasATag(jsdoc, name);\n };\n\n utils.hasTag = (name) => {\n return jsdocUtils.hasTag(jsdoc, name);\n };\n\n utils.avoidDocs = () => {\n if (\n overrideReplacesDocs !== false &&\n (utils.hasTag('override') || utils.classHasTag('override')) ||\n implementsReplacesDocs !== false &&\n (utils.hasTag('implements') || utils.classHasTag('implements')) ||\n\n // inheritdoc implies that all documentation is inherited; see https://jsdoc.app/tags-inheritdoc.html\n utils.hasTag('inheritdoc') ||\n\n augmentsExtendsReplacesDocs &&\n (utils.hasATag(['augments', 'extends']) ||\n utils.classHasTag('augments') ||\n utils.classHasTag('extends'))) {\n return true;\n }\n\n const exemptedBy = _.get(context, 'options[0].exemptedBy');\n if (exemptedBy && exemptedBy.length && utils.getPresentTags(exemptedBy).length) {\n return true;\n }\n\n return false;\n };\n\n utils.isNamepathDefiningTag = (tagName) => {\n return jsdocUtils.isNamepathDefiningTag(tagName);\n };\n utils.isNamepathTag = (tagName, checkSeesForNamepaths) => {\n return jsdocUtils.isNamepathTag(tagName, checkSeesForNamepaths);\n };\n\n utils.isTagWithType = (tagName) => {\n return jsdocUtils.isTagWithType(tagName);\n };\n\n utils.passesEmptyNamepathCheck = (tag, allowEmptyNamepaths) => {\n return !tag.name && allowEmptyNamepaths &&\n jsdocUtils.isPotentiallyEmptyNamepathTag(tag.tag);\n };\n\n utils.hasDefinedTypeReturnTag = (tag) => {\n return jsdocUtils.hasDefinedTypeReturnTag(tag);\n };\n\n utils.hasReturnValue = () => {\n return jsdocUtils.hasReturnValue(node);\n };\n\n utils.isAsync = () => {\n return node.async;\n };\n\n utils.getTags = (tagName) => {\n return utils.filterTags((item) => {\n return item.tag === tagName;\n });\n };\n\n utils.getPresentTags = (tagList) => {\n return utils.filterTags((tag) => {\n return tagList.includes(tag.tag);\n });\n };\n\n utils.filterTags = (filter) => {\n return jsdocUtils.filterTags(jsdoc.tags, filter);\n };\n\n utils.getTagsByType = (tags) => {\n return jsdocUtils.getTagsByType(tags, tagNamePreference);\n };\n\n utils.getClassNode = () => {\n // Ancestors missing in `Program` comment iteration\n const greatGrandParent = ancestors.length ?\n ancestors.slice(-3)[0] :\n jsdocUtils.getAncestor(sourceCode, jsdocNode, 3);\n\n const greatGrandParentValue = greatGrandParent && sourceCode.getFirstToken(greatGrandParent).value;\n\n if (greatGrandParentValue === 'class') {\n return greatGrandParent;\n }\n\n return false;\n };\n\n utils.getClassJsdoc = () => {\n const classNode = utils.getClassNode();\n const classJsdocNode = getJSDocComment(sourceCode, classNode, {\n maxLines,\n minLines\n });\n\n if (classJsdocNode) {\n const indent = ' '.repeat(classJsdocNode.loc.start.column);\n\n return parseComment(classJsdocNode, indent);\n }\n\n return null;\n };\n\n utils.classHasTag = (tagName) => {\n const classJsdoc = utils.getClassJsdoc();\n\n return classJsdoc && jsdocUtils.hasTag(classJsdoc, tagName);\n };\n\n utils.forEachPreferredTag = (tagName, arrayHandler, skipReportingBlockedTag = false) => {\n const targetTagName = utils.getPreferredTagName({\n skipReportingBlockedTag,\n tagName\n });\n if (!targetTagName ||\n skipReportingBlockedTag && targetTagName && typeof targetTagName === 'object'\n ) {\n return;\n }\n const matchingJsdocTags = _.filter(jsdoc.tags || [], {\n tag: targetTagName\n });\n\n matchingJsdocTags.forEach((matchingJsdocTag) => {\n arrayHandler(matchingJsdocTag, targetTagName);\n });\n };\n\n utils.reportSettings = (message) => {\n context.report({\n loc: {\n start: {\n column: 1,\n line: 1\n }\n },\n message\n });\n };\n\n return utils;\n};\n\nconst getSettings = (context) => {\n const settings = {};\n\n // All rules\n settings.ignorePrivate = Boolean(_.get(context, 'settings.jsdoc.ignorePrivate'));\n settings.minLines = Number(_.get(context, 'settings.jsdoc.minLines', 0));\n settings.maxLines = Number(_.get(context, 'settings.jsdoc.maxLines', 1));\n\n // `check-tag-names` and many returns/param rules\n settings.tagNamePreference = _.get(context, 'settings.jsdoc.tagNamePreference') || {};\n\n // `check-types` and `no-undefined-types`\n settings.preferredTypes = _.get(context, 'settings.jsdoc.preferredTypes') || {};\n\n // `require-param`, `require-description`, `require-example`, `require-returns`\n settings.overrideReplacesDocs = _.get(context, 'settings.jsdoc.overrideReplacesDocs');\n settings.implementsReplacesDocs = _.get(context, 'settings.jsdoc.implementsReplacesDocs');\n settings.augmentsExtendsReplacesDocs = _.get(context, 'settings.jsdoc.augmentsExtendsReplacesDocs');\n\n return settings;\n};\n\n/**\n * Create the report function\n *\n * @param {object} context\n * @param {object} commentNode\n */\nconst makeReport = (context, commentNode) => {\n const report = (message, fix = null, jsdocLoc = null, data = null) => {\n let loc;\n\n if (jsdocLoc) {\n const lineNumber = commentNode.loc.start.line + jsdocLoc.line;\n\n loc = {\n end: {line: lineNumber},\n start: {line: lineNumber}\n };\n if (jsdocLoc.column) {\n const colNumber = commentNode.loc.start.column + jsdocLoc.column;\n\n loc.end.column = colNumber;\n loc.start.column = colNumber;\n }\n }\n\n context.report({\n data,\n fix,\n loc,\n message,\n node: commentNode\n });\n };\n\n return report;\n};\n\n/**\n * @typedef {ReturnType<typeof getUtils>} Utils\n * @typedef {ReturnType<typeof getSettings>} Settings\n * @typedef {(\n * arg: {\n * context: Object,\n * sourceCode: Object,\n * indent: string,\n * jsdoc: Object,\n * jsdocNode: Object,\n * node: Object | null,\n * report: ReturnType<typeof makeReport>,\n * settings: Settings,\n * utils: Utils,\n * }\n * ) => any } JsdocVisitor\n */\n\n/**\n * Create an eslint rule that iterates over all JSDocs, regardless of whether\n * they are attached to a function-like node.\n *\n * @param {JsdocVisitor} iterator\n * @param {{meta: any}} ruleConfig\n */\nconst iterateAllJsdocs = (iterator, ruleConfig) => {\n return {\n create (context) {\n return {\n 'Program' () {\n const sourceCode = context.getSourceCode();\n const comments = sourceCode.getAllComments();\n\n comments.forEach((comment) => {\n if (!sourceCode.getText(comment).startsWith('/**')) {\n return;\n }\n\n const indent = ' '.repeat(comment.loc.start.column);\n const jsdoc = parseComment(comment, indent, !ruleConfig.noTrim);\n const settings = getSettings(context);\n const report = makeReport(context, comment);\n const jsdocNode = comment;\n\n iterator({\n context,\n indent,\n jsdoc,\n jsdocNode,\n node: null,\n report,\n settings,\n sourceCode,\n utils: getUtils(null, jsdoc, jsdocNode, settings, report, context)\n });\n });\n }\n };\n },\n meta: ruleConfig.meta\n };\n};\n\nexport {\n getSettings,\n parseComment\n};\n\n/**\n * @param {JsdocVisitor} iterator\n * @param {{\n * meta: any,\n * contextDefaults?: true | string[],\n * iterateAllJsdocs?: true,\n * }} ruleConfig\n */\nexport default function iterateJsdoc (iterator, ruleConfig) {\n const metaType = _.get(ruleConfig, 'meta.type');\n if (!metaType || !['problem', 'suggestion', 'layout'].includes(metaType)) {\n throw new TypeError('Rule must include `meta.type` option (with value \"problem\", \"suggestion\", or \"layout\")');\n }\n if (typeof iterator !== 'function') {\n throw new TypeError('The iterator argument must be a function.');\n }\n\n if (ruleConfig.iterateAllJsdocs) {\n return iterateAllJsdocs(iterator, {\n meta: ruleConfig.meta,\n noTrim: ruleConfig.noTrim\n });\n }\n\n return {\n /**\n * The entrypoint for the JSDoc rule.\n *\n * @param {*} context\n * a reference to the context which hold all important information\n * like settings and the sourcecode to check.\n * @returns {object}\n * a list with parser callback function.\n */\n create (context) {\n const sourceCode = context.getSourceCode();\n\n const settings = getSettings(context);\n\n const checkJsdoc = (node) => {\n const jsdocNode = getJSDocComment(sourceCode, node, settings);\n\n if (!jsdocNode) {\n return;\n }\n\n const indent = ' '.repeat(jsdocNode.loc.start.column);\n\n const jsdoc = parseComment(jsdocNode, indent);\n\n const report = makeReport(context, jsdocNode);\n\n const utils = getUtils(\n node,\n jsdoc,\n jsdocNode,\n settings,\n report,\n context\n );\n\n if (\n settings.ignorePrivate &&\n utils.hasTag('private')\n ) {\n return;\n }\n\n iterator({\n context,\n indent,\n jsdoc,\n jsdocNode,\n node,\n report,\n settings,\n sourceCode,\n utils\n });\n };\n\n if (ruleConfig.contextDefaults) {\n const contexts = jsdocUtils.enforcedContexts(context, ruleConfig.contextDefaults);\n\n return jsdocUtils.getContextObject(contexts, checkJsdoc);\n }\n\n return {\n ArrowFunctionExpression: checkJsdoc,\n FunctionDeclaration: checkJsdoc,\n FunctionExpression: checkJsdoc\n };\n },\n meta: ruleConfig.meta\n };\n}\n"],"file":"iterateJsdoc.js"}
|
package/dist/jsdocUtils.js
CHANGED
|
@@ -171,310 +171,78 @@ tagsWithTypes = tagsWithTypes.concat(tagsWithTypesAliases, closureTagsWithTypes)
|
|
|
171
171
|
const isTagWithType = tagName => {
|
|
172
172
|
return tagsWithTypes.includes(tagName);
|
|
173
173
|
};
|
|
174
|
+
/**
|
|
175
|
+
* Checks if a node has a return statement. Void return does not count.
|
|
176
|
+
*
|
|
177
|
+
* @param {object} node
|
|
178
|
+
* @returns {boolean}
|
|
179
|
+
*/
|
|
180
|
+
// eslint-disable-next-line complexity
|
|
174
181
|
|
|
175
|
-
const LOOP_STATEMENTS = ['WhileStatement', 'DoWhileStatement', 'ForStatement', 'ForInStatement', 'ForOfStatement'];
|
|
176
|
-
const STATEMENTS_WITH_CHILDREN = ['@loop', 'SwitchStatement', 'IfStatement', 'BlockStatement', 'TryStatement', 'WithStatement'];
|
|
177
|
-
const RETURNFREE_STATEMENTS = ['VariableDeclaration', 'ThrowStatement', 'FunctionDeclaration', 'BreakStatement', 'ContinueStatement', 'LabeledStatement', 'DebuggerStatement', 'EmptyStatement', 'ThrowStatement', 'ExpressionStatement'];
|
|
178
|
-
const ENTRY_POINTS = ['FunctionDeclaration', 'ArrowFunctionExpression', 'FunctionExpression'];
|
|
179
|
-
/* eslint-disable sort-keys */
|
|
180
|
-
|
|
181
|
-
const lookupTable = {
|
|
182
|
-
ReturnStatement: {
|
|
183
|
-
is(node) {
|
|
184
|
-
return node.type === 'ReturnStatement';
|
|
185
|
-
},
|
|
186
|
-
|
|
187
|
-
check(node) {
|
|
188
|
-
/* istanbul ignore next */
|
|
189
|
-
if (!lookupTable.ReturnStatement.is(node)) {
|
|
190
|
-
return false;
|
|
191
|
-
} // A return without any arguments just exits the function
|
|
192
|
-
// and is typically not documented at all in jsdoc.
|
|
193
182
|
|
|
183
|
+
const hasReturnValue = node => {
|
|
184
|
+
if (!node) {
|
|
185
|
+
return false;
|
|
186
|
+
}
|
|
194
187
|
|
|
195
|
-
|
|
196
|
-
|
|
188
|
+
switch (node.type) {
|
|
189
|
+
case 'FunctionExpression':
|
|
190
|
+
case 'FunctionDeclaration':
|
|
191
|
+
case 'ArrowFunctionExpression':
|
|
192
|
+
{
|
|
193
|
+
return node.expression || hasReturnValue(node.body);
|
|
197
194
|
}
|
|
198
195
|
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
is(node) {
|
|
205
|
-
return node.type === 'WithStatement';
|
|
206
|
-
},
|
|
207
|
-
|
|
208
|
-
check(node, context) {
|
|
209
|
-
return lookupTable.BlockStatement.check(node.body, context);
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
},
|
|
213
|
-
IfStatement: {
|
|
214
|
-
is(node) {
|
|
215
|
-
return node.type === 'IfStatement';
|
|
216
|
-
},
|
|
217
|
-
|
|
218
|
-
check(node) {
|
|
219
|
-
/* istanbul ignore next */
|
|
220
|
-
if (!lookupTable.IfStatement.is(node)) {
|
|
221
|
-
return false;
|
|
196
|
+
case 'BlockStatement':
|
|
197
|
+
{
|
|
198
|
+
return node.body.some(bodyNode => {
|
|
199
|
+
return bodyNode.type !== 'FunctionDeclaration' && hasReturnValue(bodyNode);
|
|
200
|
+
});
|
|
222
201
|
}
|
|
223
202
|
|
|
224
|
-
|
|
225
|
-
|
|
203
|
+
case 'WhileStatement':
|
|
204
|
+
case 'DoWhileStatement':
|
|
205
|
+
case 'ForStatement':
|
|
206
|
+
case 'ForInStatement':
|
|
207
|
+
case 'ForOfStatement':
|
|
208
|
+
case 'WithStatement':
|
|
209
|
+
{
|
|
210
|
+
return hasReturnValue(node.body);
|
|
226
211
|
}
|
|
227
212
|
|
|
228
|
-
|
|
229
|
-
|
|
213
|
+
case 'IfStatement':
|
|
214
|
+
{
|
|
215
|
+
return hasReturnValue(node.consequent) || hasReturnValue(node.alternate);
|
|
230
216
|
}
|
|
231
217
|
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
},
|
|
236
|
-
'@loop': {
|
|
237
|
-
is(node) {
|
|
238
|
-
return LOOP_STATEMENTS.includes(node.type);
|
|
239
|
-
},
|
|
240
|
-
|
|
241
|
-
check(node) {
|
|
242
|
-
return lookupTable['@default'].check(node.body);
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
},
|
|
246
|
-
SwitchStatement: {
|
|
247
|
-
is(node) {
|
|
248
|
-
return node.type === 'SwitchStatement';
|
|
249
|
-
},
|
|
250
|
-
|
|
251
|
-
check(node) {
|
|
252
|
-
var _iteratorNormalCompletion = true;
|
|
253
|
-
var _didIteratorError = false;
|
|
254
|
-
var _iteratorError = undefined;
|
|
255
|
-
|
|
256
|
-
try {
|
|
257
|
-
for (var _iterator = node.cases[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
|
|
258
|
-
const item = _step.value;
|
|
259
|
-
var _iteratorNormalCompletion2 = true;
|
|
260
|
-
var _didIteratorError2 = false;
|
|
261
|
-
var _iteratorError2 = undefined;
|
|
262
|
-
|
|
263
|
-
try {
|
|
264
|
-
for (var _iterator2 = item.consequent[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
|
|
265
|
-
const statement = _step2.value;
|
|
266
|
-
|
|
267
|
-
if (lookupTable['@default'].check(statement)) {
|
|
268
|
-
return true;
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
} catch (err) {
|
|
272
|
-
_didIteratorError2 = true;
|
|
273
|
-
_iteratorError2 = err;
|
|
274
|
-
} finally {
|
|
275
|
-
try {
|
|
276
|
-
if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
|
|
277
|
-
_iterator2.return();
|
|
278
|
-
}
|
|
279
|
-
} finally {
|
|
280
|
-
if (_didIteratorError2) {
|
|
281
|
-
throw _iteratorError2;
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
} catch (err) {
|
|
287
|
-
_didIteratorError = true;
|
|
288
|
-
_iteratorError = err;
|
|
289
|
-
} finally {
|
|
290
|
-
try {
|
|
291
|
-
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
292
|
-
_iterator.return();
|
|
293
|
-
}
|
|
294
|
-
} finally {
|
|
295
|
-
if (_didIteratorError) {
|
|
296
|
-
throw _iteratorError;
|
|
297
|
-
}
|
|
298
|
-
}
|
|
218
|
+
case 'TryStatement':
|
|
219
|
+
{
|
|
220
|
+
return hasReturnValue(node.block) || hasReturnValue(node.handler && node.handler.body) || hasReturnValue(node.finalizer);
|
|
299
221
|
}
|
|
300
222
|
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
is(node) {
|
|
307
|
-
return node.type === 'TryStatement';
|
|
308
|
-
},
|
|
309
|
-
|
|
310
|
-
check(node) {
|
|
311
|
-
/* istanbul ignore next */
|
|
312
|
-
if (!lookupTable.TryStatement.is(node)) {
|
|
313
|
-
return false;
|
|
223
|
+
case 'SwitchStatement':
|
|
224
|
+
{
|
|
225
|
+
return node.cases.some(someCase => {
|
|
226
|
+
return someCase.consequent.some(hasReturnValue);
|
|
227
|
+
});
|
|
314
228
|
}
|
|
315
229
|
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
if (lookupTable['@default'].check(node.handler.body)) {
|
|
322
|
-
return true;
|
|
230
|
+
case 'ReturnStatement':
|
|
231
|
+
{
|
|
232
|
+
// void return does not count.
|
|
233
|
+
if (node.argument === null) {
|
|
234
|
+
return false;
|
|
323
235
|
}
|
|
324
|
-
}
|
|
325
236
|
|
|
326
|
-
if (lookupTable.BlockStatement.check(node.finalizer)) {
|
|
327
237
|
return true;
|
|
328
238
|
}
|
|
329
239
|
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
},
|
|
334
|
-
BlockStatement: {
|
|
335
|
-
is(node) {
|
|
336
|
-
return node.type === 'BlockStatement';
|
|
337
|
-
},
|
|
338
|
-
|
|
339
|
-
check(node, context) {
|
|
340
|
-
// E.g. the catch block statement is optional.
|
|
341
|
-
|
|
342
|
-
/* istanbul ignore next */
|
|
343
|
-
if (typeof node === 'undefined' || node === null) {
|
|
344
|
-
return false;
|
|
345
|
-
}
|
|
346
|
-
/* istanbul ignore next */
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
if (!lookupTable.BlockStatement.is(node)) {
|
|
240
|
+
default:
|
|
241
|
+
{
|
|
350
242
|
return false;
|
|
351
243
|
}
|
|
352
|
-
|
|
353
|
-
var _iteratorNormalCompletion3 = true;
|
|
354
|
-
var _didIteratorError3 = false;
|
|
355
|
-
var _iteratorError3 = undefined;
|
|
356
|
-
|
|
357
|
-
try {
|
|
358
|
-
for (var _iterator3 = node.body[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
|
|
359
|
-
const item = _step3.value;
|
|
360
|
-
|
|
361
|
-
if (lookupTable['@default'].check(item, context)) {
|
|
362
|
-
return true;
|
|
363
|
-
}
|
|
364
|
-
}
|
|
365
|
-
} catch (err) {
|
|
366
|
-
_didIteratorError3 = true;
|
|
367
|
-
_iteratorError3 = err;
|
|
368
|
-
} finally {
|
|
369
|
-
try {
|
|
370
|
-
if (!_iteratorNormalCompletion3 && _iterator3.return != null) {
|
|
371
|
-
_iterator3.return();
|
|
372
|
-
}
|
|
373
|
-
} finally {
|
|
374
|
-
if (_didIteratorError3) {
|
|
375
|
-
throw _iteratorError3;
|
|
376
|
-
}
|
|
377
|
-
}
|
|
378
|
-
}
|
|
379
|
-
|
|
380
|
-
return false;
|
|
381
|
-
}
|
|
382
|
-
|
|
383
|
-
},
|
|
384
|
-
FunctionExpression: {
|
|
385
|
-
is(node) {
|
|
386
|
-
return node.type === 'FunctionExpression';
|
|
387
|
-
},
|
|
388
|
-
|
|
389
|
-
check(node, context, ignoreAsync) {
|
|
390
|
-
return !ignoreAsync && node.async || lookupTable.BlockStatement.check(node.body, context);
|
|
391
|
-
}
|
|
392
|
-
|
|
393
|
-
},
|
|
394
|
-
ArrowFunctionExpression: {
|
|
395
|
-
is(node) {
|
|
396
|
-
return node.type === 'ArrowFunctionExpression';
|
|
397
|
-
},
|
|
398
|
-
|
|
399
|
-
check(node, context, ignoreAsync) {
|
|
400
|
-
// An expression always has a return value.
|
|
401
|
-
return node.expression || !ignoreAsync && node.async || lookupTable.BlockStatement.check(node.body, context);
|
|
402
|
-
}
|
|
403
|
-
|
|
404
|
-
},
|
|
405
|
-
FunctionDeclaration: {
|
|
406
|
-
is(node) {
|
|
407
|
-
return node.type === 'FunctionDeclaration';
|
|
408
|
-
},
|
|
409
|
-
|
|
410
|
-
check(node, context, ignoreAsync) {
|
|
411
|
-
return !ignoreAsync && node.async || lookupTable.BlockStatement.check(node.body, context);
|
|
412
|
-
}
|
|
413
|
-
|
|
414
|
-
},
|
|
415
|
-
'@default': {
|
|
416
|
-
check(node, context) {
|
|
417
|
-
// In case it is a `ReturnStatement`, we found what we were looking for
|
|
418
|
-
if (lookupTable.ReturnStatement.is(node)) {
|
|
419
|
-
return lookupTable.ReturnStatement.check(node, context);
|
|
420
|
-
} // In case the element has children, we need to traverse them.
|
|
421
|
-
// Examples are BlockStatement, Choices, TryStatement, Loops, ...
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
for (var _i = 0, _STATEMENTS_WITH_CHIL = STATEMENTS_WITH_CHILDREN; _i < _STATEMENTS_WITH_CHIL.length; _i++) {
|
|
425
|
-
const item = _STATEMENTS_WITH_CHIL[_i];
|
|
426
|
-
|
|
427
|
-
if (lookupTable[item].is(node)) {
|
|
428
|
-
return lookupTable[item].check(node, context);
|
|
429
|
-
}
|
|
430
|
-
} // Everything else cannot return anything.
|
|
431
|
-
|
|
432
|
-
/* istanbul ignore next */
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
if (RETURNFREE_STATEMENTS.includes(node.type)) {
|
|
436
|
-
return false;
|
|
437
|
-
}
|
|
438
|
-
/* istanbul ignore next */
|
|
439
|
-
// If we end up here, we stumbled upon an unknown element.
|
|
440
|
-
// Most likely it is enough to add it to the blacklist.
|
|
441
|
-
//
|
|
442
|
-
// throw new Error('Unknown node type: ' + node.type);
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
return false;
|
|
446
|
-
}
|
|
447
|
-
|
|
448
244
|
}
|
|
449
245
|
};
|
|
450
|
-
/**
|
|
451
|
-
* Checks if the source code returns a return value.
|
|
452
|
-
* It traverses the parsed source code and returns as
|
|
453
|
-
* soon as it stumbles upon the first return statement.
|
|
454
|
-
*
|
|
455
|
-
* @param {object} node
|
|
456
|
-
* the node which should be checked.
|
|
457
|
-
* @param {object} context
|
|
458
|
-
* @param {boolean} ignoreAsync
|
|
459
|
-
* ignore implicit async return.
|
|
460
|
-
* @returns {boolean}
|
|
461
|
-
* true in case the code returns a return value
|
|
462
|
-
*/
|
|
463
|
-
|
|
464
|
-
const hasReturnValue = (node, context, ignoreAsync) => {
|
|
465
|
-
// Loop through all of our entry points
|
|
466
|
-
for (var _i2 = 0, _ENTRY_POINTS = ENTRY_POINTS; _i2 < _ENTRY_POINTS.length; _i2++) {
|
|
467
|
-
const item = _ENTRY_POINTS[_i2];
|
|
468
|
-
|
|
469
|
-
if (lookupTable[item].is(node)) {
|
|
470
|
-
return lookupTable[item].check(node, context, ignoreAsync);
|
|
471
|
-
}
|
|
472
|
-
}
|
|
473
|
-
/* istanbul ignore next */
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
throw new Error(`Unknown element ${node.type}`);
|
|
477
|
-
};
|
|
478
246
|
/** @param {string} tag */
|
|
479
247
|
|
|
480
248
|
/*
|
|
@@ -549,8 +317,8 @@ const getTagsByType = (tags, tagPreference) => {
|
|
|
549
317
|
return tagWithName;
|
|
550
318
|
});
|
|
551
319
|
return {
|
|
552
|
-
|
|
553
|
-
|
|
320
|
+
tagsWithNames,
|
|
321
|
+
tagsWithoutNames
|
|
554
322
|
};
|
|
555
323
|
};
|
|
556
324
|
|
package/dist/jsdocUtils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/jsdocUtils.js"],"names":["getFunctionParameterNames","functionNode","getParamName","param","_","has","name","left","type","get","argument","parameter","Error","params","map","getJsdocParameterNamesDeep","jsdoc","targetTagName","jsdocParameterNames","filter","tags","tag","getJsdocParameterNames","includes","getPreferredTagName","tagPreference","values","preferredTagName","findKey","tagNames","aliases","isValidTag","definedTags","validTagNames","keys","concat","flatten","additionalTags","allTags","hasTag","targetTagLower","toLowerCase","some","doc","hasATag","targetTagNames","hasDefinedTypeReturnTag","tagType","trim","namepathDefiningTags","namepathPointingTags","isNamepathDefiningTag","tagName","isNamepathPointingTag","checkSeesForNamepaths","isNamepathTag","potentiallyEmptyNamepathTags","isPotentiallyEmptyNamepathTag","tagsWithTypes","closureTagsWithTypes","tagsWithTypesAliases","isTagWithType","LOOP_STATEMENTS","STATEMENTS_WITH_CHILDREN","RETURNFREE_STATEMENTS","ENTRY_POINTS","lookupTable","ReturnStatement","is","node","check","WithStatement","context","BlockStatement","body","IfStatement","consequent","alternate","SwitchStatement","cases","item","statement","TryStatement","block","handler","finalizer","FunctionExpression","ignoreAsync","async","ArrowFunctionExpression","expression","FunctionDeclaration","hasReturnValue","parseClosureTemplateTag","source","split","enforcedContexts","defaultContexts","options","contexts","getContextObject","checkJsdoc","reduce","obj","prop","filterTags","tagsWithNamesAndDescriptions","getTagsByType","descName","tagsWithoutNames","tagsWithNames","tagWithName","push","getAncestor","sourceCode","nde","depth","idx","prevToken","getTokenBefore","getIndent","indent","text","match","charAt"],"mappings":"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","sourcesContent":["import _ from 'lodash';\nimport tagNames from './tagNames';\n\nconst getFunctionParameterNames = (functionNode : Object) : Array<string> => {\n const getParamName = (param) => {\n if (_.has(param, 'name')) {\n return param.name;\n }\n\n if (_.has(param, 'left.name')) {\n return param.left.name;\n }\n\n if (param.type === 'ObjectPattern' || _.get(param, 'left.type') === 'ObjectPattern') {\n return '<ObjectPattern>';\n }\n\n if (param.type === 'ArrayPattern' || _.get(param, 'left.type') === 'ArrayPattern') {\n return '<ArrayPattern>';\n }\n\n if (param.type === 'RestElement') {\n return param.argument.name;\n }\n\n if (param.type === 'TSParameterProperty') {\n return getParamName(param.parameter);\n }\n\n throw new Error('Unsupported function signature format.');\n };\n\n return functionNode.params.map(getParamName);\n};\n\n/**\n * Gets all parameter names, including those that refer to a path, e.g. \"@param foo; @param foo.bar\".\n */\nconst getJsdocParameterNamesDeep = (jsdoc : Object, targetTagName : string) : Array<string> => {\n let jsdocParameterNames;\n\n jsdocParameterNames = _.filter(jsdoc.tags, {\n tag: targetTagName\n });\n\n jsdocParameterNames = _.map(jsdocParameterNames, 'name');\n\n return jsdocParameterNames;\n};\n\nconst getJsdocParameterNames = (jsdoc : Object, targetTagName : string) : Array<string> => {\n let jsdocParameterNames;\n\n jsdocParameterNames = getJsdocParameterNamesDeep(jsdoc, targetTagName);\n\n jsdocParameterNames = jsdocParameterNames.filter((name) => {\n return !name.includes('.');\n });\n\n return jsdocParameterNames;\n};\n\nconst getPreferredTagName = (name : string, tagPreference : Object = {}) : string => {\n if (_.values(tagPreference).includes(name)) {\n return name;\n }\n\n if (_.has(tagPreference, name)) {\n return tagPreference[name];\n }\n\n const preferredTagName = _.findKey(tagNames, (aliases) => {\n return aliases.includes(name);\n });\n if (preferredTagName) {\n return preferredTagName;\n }\n\n return name;\n};\n\nconst isValidTag = (name : string, definedTags : Array) : boolean => {\n const validTagNames = _.keys(tagNames).concat(_.flatten(_.values(tagNames)));\n const additionalTags = definedTags;\n const allTags = validTagNames.concat(additionalTags);\n\n return allTags.includes(name);\n};\n\nconst hasTag = (jsdoc : Object, targetTagName : string) : boolean => {\n const targetTagLower = targetTagName.toLowerCase();\n\n return _.some(jsdoc.tags, (doc : Object) => {\n return doc.tag.toLowerCase() === targetTagLower;\n });\n};\n\nconst hasATag = (jsdoc : Object, targetTagNames : Array) : boolean => {\n return targetTagNames.some((targetTagName) => {\n return hasTag(jsdoc, targetTagName);\n });\n};\n\n/**\n * Checks if the JSDoc comment declares a return value.\n *\n * @param {JsDocTag} tag\n * the tag which should be checked.\n * @returns {boolean}\n * true in case a return value is declared; otherwise false.\n */\nconst hasDefinedTypeReturnTag = (tag) => {\n // The function should not continue in the event @returns is not defined...\n if (typeof tag === 'undefined' || tag === null) {\n return false;\n }\n\n // .. same applies if it declares `@returns {undefined}` or `@returns {void}`\n const tagType = tag.type.trim();\n if (tagType === 'undefined' || tagType === 'void') {\n return false;\n }\n\n // In any other case, something must be returned, and\n // a return statement is expected\n return true;\n};\n\nconst namepathDefiningTags = [\n // NOT USEFUL WITHOUT NAMEPATH\n 'external', 'host',\n 'name',\n 'typedef',\n\n // MAY BE USEFUL WITHOUT NAMEPATH\n 'event',\n\n // MAY BE USEFUL WITHOUT NAMEPATH (OR\n // BLOCK CAN USE NAMEPATH FROM ELSEWHERE)\n 'class', 'constructor',\n 'constant', 'const',\n 'callback',\n 'function', 'func', 'method',\n 'interface',\n 'member', 'var',\n 'mixin',\n 'namespace'\n];\n\nconst namepathPointingTags = [\n // NOT USEFUL WITHOUT NAMEPATH\n 'alias',\n 'augments', 'extends',\n\n // `borrows` has a different format, however, so needs special parsing\n 'borrows',\n 'lends',\n 'memberof',\n 'memberof!',\n 'mixes',\n 'this',\n\n // MAY BE USEFUL WITHOUT NAMEPATH\n 'emits',\n 'fires',\n 'listens'\n];\n\nconst isNamepathDefiningTag = (tagName) => {\n return namepathDefiningTags.includes(tagName);\n};\n\nconst isNamepathPointingTag = (tagName, checkSeesForNamepaths) => {\n return namepathPointingTags.includes(tagName) ||\n tagName === 'see' && checkSeesForNamepaths;\n};\n\nconst isNamepathTag = (tagName, checkSeesForNamepaths) => {\n return isNamepathDefiningTag(tagName) ||\n isNamepathPointingTag(tagName, checkSeesForNamepaths);\n};\n\nconst potentiallyEmptyNamepathTags = [\n // These may serve some minor purpose when empty or\n // their namepath can be expressed elsewhere on the block\n 'event',\n 'callback',\n 'class', 'constructor',\n 'constant', 'const',\n 'function', 'func', 'method',\n 'interface',\n 'member', 'var',\n 'mixin',\n 'namespace',\n 'listens', 'fires', 'emits'\n];\n\nconst isPotentiallyEmptyNamepathTag = (tag) => {\n return potentiallyEmptyNamepathTags.includes(tag);\n};\n\nlet tagsWithTypes = [\n 'class',\n 'constant',\n 'enum',\n 'implements',\n 'member',\n 'module',\n 'namespace',\n 'param',\n 'property',\n 'returns',\n 'throws',\n 'type',\n 'typedef',\n 'yields'\n];\n\nconst closureTagsWithTypes = [\n 'package', 'private', 'protected', 'public', 'static'\n];\n\nconst tagsWithTypesAliases = [\n 'constructor',\n 'const',\n 'var',\n 'arg',\n 'argument',\n 'prop',\n 'return',\n 'exception',\n 'yield'\n];\n\ntagsWithTypes = tagsWithTypes.concat(tagsWithTypesAliases, closureTagsWithTypes);\n\nconst isTagWithType = (tagName) => {\n return tagsWithTypes.includes(tagName);\n};\n\nconst LOOP_STATEMENTS = ['WhileStatement', 'DoWhileStatement', 'ForStatement', 'ForInStatement', 'ForOfStatement'];\n\nconst STATEMENTS_WITH_CHILDREN = [\n '@loop',\n 'SwitchStatement',\n 'IfStatement',\n 'BlockStatement',\n 'TryStatement',\n 'WithStatement'\n];\n\nconst RETURNFREE_STATEMENTS = [\n 'VariableDeclaration',\n 'ThrowStatement',\n 'FunctionDeclaration',\n 'BreakStatement',\n 'ContinueStatement',\n 'LabeledStatement',\n 'DebuggerStatement',\n 'EmptyStatement',\n 'ThrowStatement',\n 'ExpressionStatement'\n];\n\nconst ENTRY_POINTS = ['FunctionDeclaration', 'ArrowFunctionExpression', 'FunctionExpression'];\n\n/* eslint-disable sort-keys */\nconst lookupTable = {\n ReturnStatement: {\n is (node) {\n return node.type === 'ReturnStatement';\n },\n check (node) {\n /* istanbul ignore next */\n if (!lookupTable.ReturnStatement.is(node)) {\n return false;\n }\n\n // A return without any arguments just exits the function\n // and is typically not documented at all in jsdoc.\n if (node.argument === null) {\n return false;\n }\n\n return true;\n }\n },\n WithStatement: {\n is (node) {\n return node.type === 'WithStatement';\n },\n check (node, context) {\n return lookupTable.BlockStatement.check(node.body, context);\n }\n },\n IfStatement: {\n is (node) {\n return node.type === 'IfStatement';\n },\n check (node) {\n /* istanbul ignore next */\n if (!lookupTable.IfStatement.is(node)) {\n return false;\n }\n\n if (lookupTable['@default'].check(node.consequent)) {\n return true;\n }\n\n if (node.alternate && lookupTable['@default'].check(node.alternate)) {\n return true;\n }\n\n return false;\n }\n },\n '@loop': {\n is (node) {\n return LOOP_STATEMENTS.includes(node.type);\n },\n check (node) {\n return lookupTable['@default'].check(node.body);\n }\n },\n SwitchStatement: {\n is (node) {\n return node.type === 'SwitchStatement';\n },\n check (node) {\n for (const item of node.cases) {\n for (const statement of item.consequent) {\n if (lookupTable['@default'].check(statement)) {\n return true;\n }\n }\n }\n\n return false;\n }\n },\n TryStatement: {\n is (node) {\n return node.type === 'TryStatement';\n },\n check (node) {\n /* istanbul ignore next */\n if (!lookupTable.TryStatement.is(node)) {\n return false;\n }\n\n if (lookupTable.BlockStatement.check(node.block)) {\n return true;\n }\n\n if (node.handler && node.handler.body) {\n if (lookupTable['@default'].check(node.handler.body)) {\n return true;\n }\n }\n if (lookupTable.BlockStatement.check(node.finalizer)) {\n return true;\n }\n\n return false;\n }\n },\n BlockStatement: {\n is (node) {\n return node.type === 'BlockStatement';\n },\n check (node, context) {\n // E.g. the catch block statement is optional.\n /* istanbul ignore next */\n if (typeof node === 'undefined' || node === null) {\n return false;\n }\n\n /* istanbul ignore next */\n if (!lookupTable.BlockStatement.is(node)) {\n return false;\n }\n\n for (const item of node.body) {\n if (lookupTable['@default'].check(item, context)) {\n return true;\n }\n }\n\n return false;\n }\n },\n FunctionExpression: {\n is (node) {\n return node.type === 'FunctionExpression';\n },\n check (node, context, ignoreAsync) {\n return !ignoreAsync && node.async || lookupTable.BlockStatement.check(node.body, context);\n }\n },\n ArrowFunctionExpression: {\n is (node) {\n return node.type === 'ArrowFunctionExpression';\n },\n check (node, context, ignoreAsync) {\n // An expression always has a return value.\n return node.expression ||\n !ignoreAsync && node.async ||\n lookupTable.BlockStatement.check(node.body, context);\n }\n },\n FunctionDeclaration: {\n is (node) {\n return node.type === 'FunctionDeclaration';\n },\n check (node, context, ignoreAsync) {\n return !ignoreAsync && node.async || lookupTable.BlockStatement.check(node.body, context);\n }\n },\n '@default': {\n check (node, context) {\n // In case it is a `ReturnStatement`, we found what we were looking for\n if (lookupTable.ReturnStatement.is(node)) {\n return lookupTable.ReturnStatement.check(node, context);\n }\n\n // In case the element has children, we need to traverse them.\n // Examples are BlockStatement, Choices, TryStatement, Loops, ...\n for (const item of STATEMENTS_WITH_CHILDREN) {\n if (lookupTable[item].is(node)) {\n return lookupTable[item].check(node, context);\n }\n }\n\n // Everything else cannot return anything.\n /* istanbul ignore next */\n if (RETURNFREE_STATEMENTS.includes(node.type)) {\n return false;\n }\n\n /* istanbul ignore next */\n // If we end up here, we stumbled upon an unknown element.\n // Most likely it is enough to add it to the blacklist.\n //\n // throw new Error('Unknown node type: ' + node.type);\n return false;\n }\n }\n};\n\n/**\n * Checks if the source code returns a return value.\n * It traverses the parsed source code and returns as\n * soon as it stumbles upon the first return statement.\n *\n * @param {object} node\n * the node which should be checked.\n * @param {object} context\n * @param {boolean} ignoreAsync\n * ignore implicit async return.\n * @returns {boolean}\n * true in case the code returns a return value\n */\nconst hasReturnValue = (node, context, ignoreAsync) => {\n // Loop through all of our entry points\n for (const item of ENTRY_POINTS) {\n if (lookupTable[item].is(node)) {\n return lookupTable[item].check(node, context, ignoreAsync);\n }\n }\n /* istanbul ignore next */\n throw new Error(`Unknown element ${node.type}`);\n};\n\n/** @param {string} tag */\n/*\nconst isInlineTag = (tag) => {\n return /^(@link|@linkcode|@linkplain|@tutorial) /.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 * @param {JsDocTag} tag\n * @returns {Array<string>}\n */\nconst parseClosureTemplateTag = (tag) => {\n return tag.source\n .split('@template')[1]\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 /* istanbul ignore next */\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 */\nconst getContextObject = (contexts, checkJsdoc) => {\n return contexts.reduce((obj, prop) => {\n obj[prop] = checkJsdoc;\n\n return obj;\n }, {});\n};\n\nconst filterTags = (tags = [], filter) => {\n return tags.filter(filter);\n};\n\nconst tagsWithNamesAndDescriptions = [\n 'param', 'arg', 'argument', 'property', 'prop',\n\n // These two are parsed by our custom parser as though having a `name`\n 'returns', 'return'\n];\n\nconst getTagsByType = (tags, tagPreference) => {\n const descName = getPreferredTagName('description', tagPreference);\n const tagsWithoutNames = [];\n const tagsWithNames = filterTags(tags, (tag) => {\n const {tag: tagName} = tag;\n const tagWithName = tagsWithNamesAndDescriptions.includes(tagName);\n if (!tagWithName && tagName !== descName) {\n tagsWithoutNames.push(tag);\n }\n\n return tagWithName;\n });\n\n return {\n tagsWithoutNames,\n tagsWithNames\n };\n};\n\nconst getAncestor = (sourceCode, nde, depth, idx = 0) => {\n if (idx === depth) {\n return nde;\n }\n const prevToken = sourceCode.getTokenBefore(nde);\n if (prevToken) {\n return getAncestor(sourceCode, prevToken, depth, idx + 1);\n }\n\n return null;\n};\n\nconst getIndent = (sourceCode) => {\n let indent = sourceCode.text.match(/^\\n*([ \\t]+)/);\n /* istanbul ignore next */\n indent = indent ? indent[1] + indent[1].charAt() : ' ';\n\n return indent;\n};\n\nexport default {\n enforcedContexts,\n filterTags,\n getAncestor,\n getContextObject,\n getFunctionParameterNames,\n getIndent,\n getJsdocParameterNames,\n getJsdocParameterNamesDeep,\n getPreferredTagName,\n getTagsByType,\n hasATag,\n hasDefinedTypeReturnTag,\n hasReturnValue,\n hasTag,\n isNamepathDefiningTag,\n isNamepathTag,\n isPotentiallyEmptyNamepathTag,\n isTagWithType,\n isValidTag,\n parseClosureTemplateTag\n};\n"],"file":"jsdocUtils.js"}
|
|
1
|
+
{"version":3,"sources":["../src/jsdocUtils.js"],"names":["getFunctionParameterNames","functionNode","getParamName","param","_","has","name","left","type","get","argument","parameter","Error","params","map","getJsdocParameterNamesDeep","jsdoc","targetTagName","jsdocParameterNames","filter","tags","tag","getJsdocParameterNames","includes","getPreferredTagName","tagPreference","values","preferredTagName","findKey","tagNames","aliases","isValidTag","definedTags","validTagNames","keys","concat","flatten","additionalTags","allTags","hasTag","targetTagLower","toLowerCase","some","doc","hasATag","targetTagNames","hasDefinedTypeReturnTag","tagType","trim","namepathDefiningTags","namepathPointingTags","isNamepathDefiningTag","tagName","isNamepathPointingTag","checkSeesForNamepaths","isNamepathTag","potentiallyEmptyNamepathTags","isPotentiallyEmptyNamepathTag","tagsWithTypes","closureTagsWithTypes","tagsWithTypesAliases","isTagWithType","hasReturnValue","node","expression","body","bodyNode","consequent","alternate","block","handler","finalizer","cases","someCase","parseClosureTemplateTag","source","split","enforcedContexts","context","defaultContexts","options","contexts","getContextObject","checkJsdoc","reduce","obj","prop","filterTags","tagsWithNamesAndDescriptions","getTagsByType","descName","tagsWithoutNames","tagsWithNames","tagWithName","push","getAncestor","sourceCode","nde","depth","idx","prevToken","getTokenBefore","getIndent","indent","text","match","charAt"],"mappings":";;;;;;;AAAA;;AACA;;;;AAEA,MAAMA,yBAAyB,GAAIC,YAAD,IAA2C;AAC3E,QAAMC,YAAY,GAAIC,KAAD,IAAW;AAC9B,QAAIC,gBAAEC,GAAF,CAAMF,KAAN,EAAa,MAAb,CAAJ,EAA0B;AACxB,aAAOA,KAAK,CAACG,IAAb;AACD;;AAED,QAAIF,gBAAEC,GAAF,CAAMF,KAAN,EAAa,WAAb,CAAJ,EAA+B;AAC7B,aAAOA,KAAK,CAACI,IAAN,CAAWD,IAAlB;AACD;;AAED,QAAIH,KAAK,CAACK,IAAN,KAAe,eAAf,IAAkCJ,gBAAEK,GAAF,CAAMN,KAAN,EAAa,WAAb,MAA8B,eAApE,EAAqF;AACnF,aAAO,iBAAP;AACD;;AAED,QAAIA,KAAK,CAACK,IAAN,KAAe,cAAf,IAAiCJ,gBAAEK,GAAF,CAAMN,KAAN,EAAa,WAAb,MAA8B,cAAnE,EAAmF;AACjF,aAAO,gBAAP;AACD;;AAED,QAAIA,KAAK,CAACK,IAAN,KAAe,aAAnB,EAAkC;AAChC,aAAOL,KAAK,CAACO,QAAN,CAAeJ,IAAtB;AACD;;AAED,QAAIH,KAAK,CAACK,IAAN,KAAe,qBAAnB,EAA0C;AACxC,aAAON,YAAY,CAACC,KAAK,CAACQ,SAAP,CAAnB;AACD;;AAED,UAAM,IAAIC,KAAJ,CAAU,wCAAV,CAAN;AACD,GA1BD;;AA4BA,SAAOX,YAAY,CAACY,MAAb,CAAoBC,GAApB,CAAwBZ,YAAxB,CAAP;AACD,CA9BD;AAgCA;;;;;AAGA,MAAMa,0BAA0B,GAAG,CAACC,KAAD,EAAiBC,aAAjB,KAA4D;AAC7F,MAAIC,mBAAJ;AAEAA,EAAAA,mBAAmB,GAAGd,gBAAEe,MAAF,CAASH,KAAK,CAACI,IAAf,EAAqB;AACzCC,IAAAA,GAAG,EAAEJ;AADoC,GAArB,CAAtB;AAIAC,EAAAA,mBAAmB,GAAGd,gBAAEU,GAAF,CAAMI,mBAAN,EAA2B,MAA3B,CAAtB;AAEA,SAAOA,mBAAP;AACD,CAVD;;AAYA,MAAMI,sBAAsB,GAAG,CAACN,KAAD,EAAiBC,aAAjB,KAA4D;AACzF,MAAIC,mBAAJ;AAEAA,EAAAA,mBAAmB,GAAGH,0BAA0B,CAACC,KAAD,EAAQC,aAAR,CAAhD;AAEAC,EAAAA,mBAAmB,GAAGA,mBAAmB,CAACC,MAApB,CAA4Bb,IAAD,IAAU;AACzD,WAAO,CAACA,IAAI,CAACiB,QAAL,CAAc,GAAd,CAAR;AACD,GAFqB,CAAtB;AAIA,SAAOL,mBAAP;AACD,CAVD;;AAYA,MAAMM,mBAAmB,GAAG,CAAClB,IAAD,EAAgBmB,aAAsB,GAAG,EAAzC,KAAyD;AACnF,MAAIrB,gBAAEsB,MAAF,CAASD,aAAT,EAAwBF,QAAxB,CAAiCjB,IAAjC,CAAJ,EAA4C;AAC1C,WAAOA,IAAP;AACD;;AAED,MAAIF,gBAAEC,GAAF,CAAMoB,aAAN,EAAqBnB,IAArB,CAAJ,EAAgC;AAC9B,WAAOmB,aAAa,CAACnB,IAAD,CAApB;AACD;;AAED,QAAMqB,gBAAgB,GAAGvB,gBAAEwB,OAAF,CAAUC,iBAAV,EAAqBC,OAAD,IAAa;AACxD,WAAOA,OAAO,CAACP,QAAR,CAAiBjB,IAAjB,CAAP;AACD,GAFwB,CAAzB;;AAGA,MAAIqB,gBAAJ,EAAsB;AACpB,WAAOA,gBAAP;AACD;;AAED,SAAOrB,IAAP;AACD,CAjBD;;AAmBA,MAAMyB,UAAU,GAAG,CAACzB,IAAD,EAAgB0B,WAAhB,KAAkD;AACnE,QAAMC,aAAa,GAAG7B,gBAAE8B,IAAF,CAAOL,iBAAP,EAAiBM,MAAjB,CAAwB/B,gBAAEgC,OAAF,CAAUhC,gBAAEsB,MAAF,CAASG,iBAAT,CAAV,CAAxB,CAAtB;;AACA,QAAMQ,cAAc,GAAGL,WAAvB;AACA,QAAMM,OAAO,GAAGL,aAAa,CAACE,MAAd,CAAqBE,cAArB,CAAhB;AAEA,SAAOC,OAAO,CAACf,QAAR,CAAiBjB,IAAjB,CAAP;AACD,CAND;;AAQA,MAAMiC,MAAM,GAAG,CAACvB,KAAD,EAAiBC,aAAjB,KAAsD;AACnE,QAAMuB,cAAc,GAAGvB,aAAa,CAACwB,WAAd,EAAvB;AAEA,SAAOrC,gBAAEsC,IAAF,CAAO1B,KAAK,CAACI,IAAb,EAAoBuB,GAAD,IAAkB;AAC1C,WAAOA,GAAG,CAACtB,GAAJ,CAAQoB,WAAR,OAA0BD,cAAjC;AACD,GAFM,CAAP;AAGD,CAND;;AAQA,MAAMI,OAAO,GAAG,CAAC5B,KAAD,EAAiB6B,cAAjB,KAAsD;AACpE,SAAOA,cAAc,CAACH,IAAf,CAAqBzB,aAAD,IAAmB;AAC5C,WAAOsB,MAAM,CAACvB,KAAD,EAAQC,aAAR,CAAb;AACD,GAFM,CAAP;AAGD,CAJD;AAMA;;;;;;;;;;AAQA,MAAM6B,uBAAuB,GAAIzB,GAAD,IAAS;AACvC;AACA,MAAI,OAAOA,GAAP,KAAe,WAAf,IAA8BA,GAAG,KAAK,IAA1C,EAAgD;AAC9C,WAAO,KAAP;AACD,GAJsC,CAMvC;;;AACA,QAAM0B,OAAO,GAAG1B,GAAG,CAACb,IAAJ,CAASwC,IAAT,EAAhB;;AACA,MAAID,OAAO,KAAK,WAAZ,IAA2BA,OAAO,KAAK,MAA3C,EAAmD;AACjD,WAAO,KAAP;AACD,GAVsC,CAYvC;AACA;;;AACA,SAAO,IAAP;AACD,CAfD;;AAiBA,MAAME,oBAAoB,GAAG,CAC3B;AACA,UAF2B,EAEf,MAFe,EAG3B,MAH2B,EAI3B,SAJ2B,EAM3B;AACA,OAP2B,EAS3B;AACA;AACA,OAX2B,EAWlB,aAXkB,EAY3B,UAZ2B,EAYf,OAZe,EAa3B,UAb2B,EAc3B,UAd2B,EAcf,MAde,EAcP,QAdO,EAe3B,WAf2B,EAgB3B,QAhB2B,EAgBjB,KAhBiB,EAiB3B,OAjB2B,EAkB3B,WAlB2B,CAA7B;AAqBA,MAAMC,oBAAoB,GAAG,CAC3B;AACA,OAF2B,EAG3B,UAH2B,EAGf,SAHe,EAK3B;AACA,SAN2B,EAO3B,OAP2B,EAQ3B,UAR2B,EAS3B,WAT2B,EAU3B,OAV2B,EAW3B,MAX2B,EAa3B;AACA,OAd2B,EAe3B,OAf2B,EAgB3B,SAhB2B,CAA7B;;AAmBA,MAAMC,qBAAqB,GAAIC,OAAD,IAAa;AACzC,SAAOH,oBAAoB,CAAC1B,QAArB,CAA8B6B,OAA9B,CAAP;AACD,CAFD;;AAIA,MAAMC,qBAAqB,GAAG,CAACD,OAAD,EAAUE,qBAAV,KAAoC;AAChE,SAAOJ,oBAAoB,CAAC3B,QAArB,CAA8B6B,OAA9B,KACLA,OAAO,KAAK,KAAZ,IAAqBE,qBADvB;AAED,CAHD;;AAKA,MAAMC,aAAa,GAAG,CAACH,OAAD,EAAUE,qBAAV,KAAoC;AACxD,SAAOH,qBAAqB,CAACC,OAAD,CAArB,IACLC,qBAAqB,CAACD,OAAD,EAAUE,qBAAV,CADvB;AAED,CAHD;;AAKA,MAAME,4BAA4B,GAAG,CACnC;AACA;AACA,OAHmC,EAInC,UAJmC,EAKnC,OALmC,EAK1B,aAL0B,EAMnC,UANmC,EAMvB,OANuB,EAOnC,UAPmC,EAOvB,MAPuB,EAOf,QAPe,EAQnC,WARmC,EASnC,QATmC,EASzB,KATyB,EAUnC,OAVmC,EAWnC,WAXmC,EAYnC,SAZmC,EAYxB,OAZwB,EAYf,OAZe,CAArC;;AAeA,MAAMC,6BAA6B,GAAIpC,GAAD,IAAS;AAC7C,SAAOmC,4BAA4B,CAACjC,QAA7B,CAAsCF,GAAtC,CAAP;AACD,CAFD;;AAIA,IAAIqC,aAAa,GAAG,CAClB,OADkB,EAElB,UAFkB,EAGlB,MAHkB,EAIlB,YAJkB,EAKlB,QALkB,EAMlB,QANkB,EAOlB,WAPkB,EAQlB,OARkB,EASlB,UATkB,EAUlB,SAVkB,EAWlB,QAXkB,EAYlB,MAZkB,EAalB,SAbkB,EAclB,QAdkB,CAApB;AAiBA,MAAMC,oBAAoB,GAAG,CAC3B,SAD2B,EAChB,SADgB,EACL,WADK,EACQ,QADR,EACkB,QADlB,CAA7B;AAIA,MAAMC,oBAAoB,GAAG,CAC3B,aAD2B,EAE3B,OAF2B,EAG3B,KAH2B,EAI3B,KAJ2B,EAK3B,UAL2B,EAM3B,MAN2B,EAO3B,QAP2B,EAQ3B,WAR2B,EAS3B,OAT2B,CAA7B;AAYAF,aAAa,GAAGA,aAAa,CAACvB,MAAd,CAAqByB,oBAArB,EAA2CD,oBAA3C,CAAhB;;AAEA,MAAME,aAAa,GAAIT,OAAD,IAAa;AACjC,SAAOM,aAAa,CAACnC,QAAd,CAAuB6B,OAAvB,CAAP;AACD,CAFD;AAIA;;;;;;AAMA;;;AACA,MAAMU,cAAc,GAAIC,IAAD,IAAU;AAC/B,MAAI,CAACA,IAAL,EAAW;AACT,WAAO,KAAP;AACD;;AACD,UAAQA,IAAI,CAACvD,IAAb;AACA,SAAK,oBAAL;AACA,SAAK,qBAAL;AACA,SAAK,yBAAL;AAAgC;AAC9B,eAAOuD,IAAI,CAACC,UAAL,IAAmBF,cAAc,CAACC,IAAI,CAACE,IAAN,CAAxC;AACD;;AACD,SAAK,gBAAL;AAAuB;AACrB,eAAOF,IAAI,CAACE,IAAL,CAAUvB,IAAV,CAAgBwB,QAAD,IAAc;AAClC,iBAAOA,QAAQ,CAAC1D,IAAT,KAAkB,qBAAlB,IAA2CsD,cAAc,CAACI,QAAD,CAAhE;AACD,SAFM,CAAP;AAGD;;AACD,SAAK,gBAAL;AACA,SAAK,kBAAL;AACA,SAAK,cAAL;AACA,SAAK,gBAAL;AACA,SAAK,gBAAL;AACA,SAAK,eAAL;AAAsB;AACpB,eAAOJ,cAAc,CAACC,IAAI,CAACE,IAAN,CAArB;AACD;;AACD,SAAK,aAAL;AAAoB;AAClB,eAAOH,cAAc,CAACC,IAAI,CAACI,UAAN,CAAd,IAAmCL,cAAc,CAACC,IAAI,CAACK,SAAN,CAAxD;AACD;;AACD,SAAK,cAAL;AAAqB;AACnB,eAAON,cAAc,CAACC,IAAI,CAACM,KAAN,CAAd,IACLP,cAAc,CAACC,IAAI,CAACO,OAAL,IAAgBP,IAAI,CAACO,OAAL,CAAaL,IAA9B,CADT,IAELH,cAAc,CAACC,IAAI,CAACQ,SAAN,CAFhB;AAGD;;AACD,SAAK,iBAAL;AAAwB;AACtB,eAAOR,IAAI,CAACS,KAAL,CAAW9B,IAAX,CACJ+B,QAAD,IAAc;AACZ,iBAAOA,QAAQ,CAACN,UAAT,CAAoBzB,IAApB,CAAyBoB,cAAzB,CAAP;AACD,SAHI,CAAP;AAKD;;AACD,SAAK,iBAAL;AAAwB;AACtB;AACA,YAAIC,IAAI,CAACrD,QAAL,KAAkB,IAAtB,EAA4B;AAC1B,iBAAO,KAAP;AACD;;AAED,eAAO,IAAP;AACD;;AACD;AAAS;AACP,eAAO,KAAP;AACD;AA5CD;AA8CD,CAlDD;AAoDA;;AACA;;;;;;AAMA;;;;;;;;;AAOA,MAAMgE,uBAAuB,GAAIrD,GAAD,IAAS;AACvC,SAAOA,GAAG,CAACsD,MAAJ,CACJC,KADI,CACE,WADF,EACe,CADf,EAEJA,KAFI,CAEE,GAFF,EAGJ9D,GAHI,CAGCN,IAAD,IAAU;AACb,WAAOA,IAAI,CAACwC,IAAL,EAAP;AACD,GALI,CAAP;AAMD,CAPD;AASA;;;;;;;;;;;AASA,MAAM6B,gBAAgB,GAAG,CAACC,OAAD,EAAUC,eAAV,KAA8B;AAAA,eAQjDD,OAAO,CAACE,OAAR,CAAgB,CAAhB,KAAsB,EAR2B;AAAA,6BAGnDC,QAHmD;AAAA,QAGnDA,QAHmD,8BAGxCF,eAAe,KAAK,IAApB,GAA2B,CACpC,yBADoC,EAEpC,qBAFoC,EAGpC,oBAHoC,CAA3B,GAIPA,eAP+C;;AAUrD,SAAOE,QAAP;AACD,CAXD;AAaA;;;;;;AAIA,MAAMC,gBAAgB,GAAG,CAACD,QAAD,EAAWE,UAAX,KAA0B;AACjD,SAAOF,QAAQ,CAACG,MAAT,CAAgB,CAACC,GAAD,EAAMC,IAAN,KAAe;AACpCD,IAAAA,GAAG,CAACC,IAAD,CAAH,GAAYH,UAAZ;AAEA,WAAOE,GAAP;AACD,GAJM,EAIJ,EAJI,CAAP;AAKD,CAND;;AAQA,MAAME,UAAU,GAAG,CAACnE,IAAI,GAAG,EAAR,EAAYD,MAAZ,KAAuB;AACxC,SAAOC,IAAI,CAACD,MAAL,CAAYA,MAAZ,CAAP;AACD,CAFD;;AAIA,MAAMqE,4BAA4B,GAAG,CACnC,OADmC,EAC1B,KAD0B,EACnB,UADmB,EACP,UADO,EACK,MADL,EAGnC;AACA,SAJmC,EAIxB,QAJwB,CAArC;;AAOA,MAAMC,aAAa,GAAG,CAACrE,IAAD,EAAOK,aAAP,KAAyB;AAC7C,QAAMiE,QAAQ,GAAGlE,mBAAmB,CAAC,aAAD,EAAgBC,aAAhB,CAApC;AACA,QAAMkE,gBAAgB,GAAG,EAAzB;AACA,QAAMC,aAAa,GAAGL,UAAU,CAACnE,IAAD,EAAQC,GAAD,IAAS;AAAA,UAClC+B,OADkC,GACvB/B,GADuB,CACvCA,GADuC;AAE9C,UAAMwE,WAAW,GAAGL,4BAA4B,CAACjE,QAA7B,CAAsC6B,OAAtC,CAApB;;AACA,QAAI,CAACyC,WAAD,IAAgBzC,OAAO,KAAKsC,QAAhC,EAA0C;AACxCC,MAAAA,gBAAgB,CAACG,IAAjB,CAAsBzE,GAAtB;AACD;;AAED,WAAOwE,WAAP;AACD,GAR+B,CAAhC;AAUA,SAAO;AACLD,IAAAA,aADK;AAELD,IAAAA;AAFK,GAAP;AAID,CAjBD;;AAmBA,MAAMI,WAAW,GAAG,CAACC,UAAD,EAAaC,GAAb,EAAkBC,KAAlB,EAAyBC,GAAG,GAAG,CAA/B,KAAqC;AACvD,MAAIA,GAAG,KAAKD,KAAZ,EAAmB;AACjB,WAAOD,GAAP;AACD;;AACD,QAAMG,SAAS,GAAGJ,UAAU,CAACK,cAAX,CAA0BJ,GAA1B,CAAlB;;AACA,MAAIG,SAAJ,EAAe;AACb,WAAOL,WAAW,CAACC,UAAD,EAAaI,SAAb,EAAwBF,KAAxB,EAA+BC,GAAG,GAAG,CAArC,CAAlB;AACD;;AAED,SAAO,IAAP;AACD,CAVD;;AAYA,MAAMG,SAAS,GAAIN,UAAD,IAAgB;AAChC,MAAIO,MAAM,GAAGP,UAAU,CAACQ,IAAX,CAAgBC,KAAhB,CAAsB,cAAtB,CAAb;AACA;;AACAF,EAAAA,MAAM,GAAGA,MAAM,GAAGA,MAAM,CAAC,CAAD,CAAN,GAAYA,MAAM,CAAC,CAAD,CAAN,CAAUG,MAAV,EAAf,GAAoC,GAAnD;AAEA,SAAOH,MAAP;AACD,CAND;;eAQe;AACb1B,EAAAA,gBADa;AAEbU,EAAAA,UAFa;AAGbQ,EAAAA,WAHa;AAIbb,EAAAA,gBAJa;AAKblF,EAAAA,yBALa;AAMbsG,EAAAA,SANa;AAObhF,EAAAA,sBAPa;AAQbP,EAAAA,0BARa;AASbS,EAAAA,mBATa;AAUbiE,EAAAA,aAVa;AAWb7C,EAAAA,OAXa;AAYbE,EAAAA,uBAZa;AAabgB,EAAAA,cAba;AAcbvB,EAAAA,MAda;AAebY,EAAAA,qBAfa;AAgBbI,EAAAA,aAhBa;AAiBbE,EAAAA,6BAjBa;AAkBbI,EAAAA,aAlBa;AAmBb9B,EAAAA,UAnBa;AAoBb2C,EAAAA;AApBa,C","sourcesContent":["import _ from 'lodash';\nimport tagNames from './tagNames';\n\nconst getFunctionParameterNames = (functionNode : Object) : Array<string> => {\n const getParamName = (param) => {\n if (_.has(param, 'name')) {\n return param.name;\n }\n\n if (_.has(param, 'left.name')) {\n return param.left.name;\n }\n\n if (param.type === 'ObjectPattern' || _.get(param, 'left.type') === 'ObjectPattern') {\n return '<ObjectPattern>';\n }\n\n if (param.type === 'ArrayPattern' || _.get(param, 'left.type') === 'ArrayPattern') {\n return '<ArrayPattern>';\n }\n\n if (param.type === 'RestElement') {\n return param.argument.name;\n }\n\n if (param.type === 'TSParameterProperty') {\n return getParamName(param.parameter);\n }\n\n throw new Error('Unsupported function signature format.');\n };\n\n return functionNode.params.map(getParamName);\n};\n\n/**\n * Gets all parameter names, including those that refer to a path, e.g. \"@param foo; @param foo.bar\".\n */\nconst getJsdocParameterNamesDeep = (jsdoc : Object, targetTagName : string) : Array<string> => {\n let jsdocParameterNames;\n\n jsdocParameterNames = _.filter(jsdoc.tags, {\n tag: targetTagName\n });\n\n jsdocParameterNames = _.map(jsdocParameterNames, 'name');\n\n return jsdocParameterNames;\n};\n\nconst getJsdocParameterNames = (jsdoc : Object, targetTagName : string) : Array<string> => {\n let jsdocParameterNames;\n\n jsdocParameterNames = getJsdocParameterNamesDeep(jsdoc, targetTagName);\n\n jsdocParameterNames = jsdocParameterNames.filter((name) => {\n return !name.includes('.');\n });\n\n return jsdocParameterNames;\n};\n\nconst getPreferredTagName = (name : string, tagPreference : Object = {}) : string => {\n if (_.values(tagPreference).includes(name)) {\n return name;\n }\n\n if (_.has(tagPreference, name)) {\n return tagPreference[name];\n }\n\n const preferredTagName = _.findKey(tagNames, (aliases) => {\n return aliases.includes(name);\n });\n if (preferredTagName) {\n return preferredTagName;\n }\n\n return name;\n};\n\nconst isValidTag = (name : string, definedTags : Array) : boolean => {\n const validTagNames = _.keys(tagNames).concat(_.flatten(_.values(tagNames)));\n const additionalTags = definedTags;\n const allTags = validTagNames.concat(additionalTags);\n\n return allTags.includes(name);\n};\n\nconst hasTag = (jsdoc : Object, targetTagName : string) : boolean => {\n const targetTagLower = targetTagName.toLowerCase();\n\n return _.some(jsdoc.tags, (doc : Object) => {\n return doc.tag.toLowerCase() === targetTagLower;\n });\n};\n\nconst hasATag = (jsdoc : Object, targetTagNames : Array) : boolean => {\n return targetTagNames.some((targetTagName) => {\n return hasTag(jsdoc, targetTagName);\n });\n};\n\n/**\n * Checks if the JSDoc comment declares a return value.\n *\n * @param {JsDocTag} tag\n * the tag which should be checked.\n * @returns {boolean}\n * true in case a return value is declared; otherwise false.\n */\nconst hasDefinedTypeReturnTag = (tag) => {\n // The function should not continue in the event @returns is not defined...\n if (typeof tag === 'undefined' || tag === null) {\n return false;\n }\n\n // .. same applies if it declares `@returns {undefined}` or `@returns {void}`\n const tagType = tag.type.trim();\n if (tagType === 'undefined' || tagType === 'void') {\n return false;\n }\n\n // In any other case, something must be returned, and\n // a return statement is expected\n return true;\n};\n\nconst namepathDefiningTags = [\n // NOT USEFUL WITHOUT NAMEPATH\n 'external', 'host',\n 'name',\n 'typedef',\n\n // MAY BE USEFUL WITHOUT NAMEPATH\n 'event',\n\n // MAY BE USEFUL WITHOUT NAMEPATH (OR\n // BLOCK CAN USE NAMEPATH FROM ELSEWHERE)\n 'class', 'constructor',\n 'constant', 'const',\n 'callback',\n 'function', 'func', 'method',\n 'interface',\n 'member', 'var',\n 'mixin',\n 'namespace'\n];\n\nconst namepathPointingTags = [\n // NOT USEFUL WITHOUT NAMEPATH\n 'alias',\n 'augments', 'extends',\n\n // `borrows` has a different format, however, so needs special parsing\n 'borrows',\n 'lends',\n 'memberof',\n 'memberof!',\n 'mixes',\n 'this',\n\n // MAY BE USEFUL WITHOUT NAMEPATH\n 'emits',\n 'fires',\n 'listens'\n];\n\nconst isNamepathDefiningTag = (tagName) => {\n return namepathDefiningTags.includes(tagName);\n};\n\nconst isNamepathPointingTag = (tagName, checkSeesForNamepaths) => {\n return namepathPointingTags.includes(tagName) ||\n tagName === 'see' && checkSeesForNamepaths;\n};\n\nconst isNamepathTag = (tagName, checkSeesForNamepaths) => {\n return isNamepathDefiningTag(tagName) ||\n isNamepathPointingTag(tagName, checkSeesForNamepaths);\n};\n\nconst potentiallyEmptyNamepathTags = [\n // These may serve some minor purpose when empty or\n // their namepath can be expressed elsewhere on the block\n 'event',\n 'callback',\n 'class', 'constructor',\n 'constant', 'const',\n 'function', 'func', 'method',\n 'interface',\n 'member', 'var',\n 'mixin',\n 'namespace',\n 'listens', 'fires', 'emits'\n];\n\nconst isPotentiallyEmptyNamepathTag = (tag) => {\n return potentiallyEmptyNamepathTags.includes(tag);\n};\n\nlet tagsWithTypes = [\n 'class',\n 'constant',\n 'enum',\n 'implements',\n 'member',\n 'module',\n 'namespace',\n 'param',\n 'property',\n 'returns',\n 'throws',\n 'type',\n 'typedef',\n 'yields'\n];\n\nconst closureTagsWithTypes = [\n 'package', 'private', 'protected', 'public', 'static'\n];\n\nconst tagsWithTypesAliases = [\n 'constructor',\n 'const',\n 'var',\n 'arg',\n 'argument',\n 'prop',\n 'return',\n 'exception',\n 'yield'\n];\n\ntagsWithTypes = tagsWithTypes.concat(tagsWithTypesAliases, closureTagsWithTypes);\n\nconst isTagWithType = (tagName) => {\n return tagsWithTypes.includes(tagName);\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 */\n// eslint-disable-next-line complexity\nconst hasReturnValue = (node) => {\n if (!node) {\n return false;\n }\n switch (node.type) {\n case 'FunctionExpression':\n case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n return node.expression || hasReturnValue(node.body);\n }\n case 'BlockStatement': {\n return node.body.some((bodyNode) => {\n return bodyNode.type !== 'FunctionDeclaration' && hasReturnValue(bodyNode);\n });\n }\n case 'WhileStatement':\n case 'DoWhileStatement':\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WithStatement': {\n return hasReturnValue(node.body);\n }\n case 'IfStatement': {\n return hasReturnValue(node.consequent) || hasReturnValue(node.alternate);\n }\n case 'TryStatement': {\n return hasReturnValue(node.block) ||\n hasReturnValue(node.handler && node.handler.body) ||\n hasReturnValue(node.finalizer);\n }\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some(hasReturnValue);\n }\n );\n }\n case 'ReturnStatement': {\n // void return does not count.\n if (node.argument === null) {\n return false;\n }\n\n return true;\n }\n default: {\n return false;\n }\n }\n};\n\n/** @param {string} tag */\n/*\nconst isInlineTag = (tag) => {\n return /^(@link|@linkcode|@linkplain|@tutorial) /.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 * @param {JsDocTag} tag\n * @returns {Array<string>}\n */\nconst parseClosureTemplateTag = (tag) => {\n return tag.source\n .split('@template')[1]\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 /* istanbul ignore next */\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 */\nconst getContextObject = (contexts, checkJsdoc) => {\n return contexts.reduce((obj, prop) => {\n obj[prop] = checkJsdoc;\n\n return obj;\n }, {});\n};\n\nconst filterTags = (tags = [], filter) => {\n return tags.filter(filter);\n};\n\nconst tagsWithNamesAndDescriptions = [\n 'param', 'arg', 'argument', 'property', 'prop',\n\n // These two are parsed by our custom parser as though having a `name`\n 'returns', 'return'\n];\n\nconst getTagsByType = (tags, tagPreference) => {\n const descName = getPreferredTagName('description', tagPreference);\n const tagsWithoutNames = [];\n const tagsWithNames = filterTags(tags, (tag) => {\n const {tag: tagName} = tag;\n const tagWithName = tagsWithNamesAndDescriptions.includes(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 getAncestor = (sourceCode, nde, depth, idx = 0) => {\n if (idx === depth) {\n return nde;\n }\n const prevToken = sourceCode.getTokenBefore(nde);\n if (prevToken) {\n return getAncestor(sourceCode, prevToken, depth, idx + 1);\n }\n\n return null;\n};\n\nconst getIndent = (sourceCode) => {\n let indent = sourceCode.text.match(/^\\n*([ \\t]+)/);\n /* istanbul ignore next */\n indent = indent ? indent[1] + indent[1].charAt() : ' ';\n\n return indent;\n};\n\nexport default {\n enforcedContexts,\n filterTags,\n getAncestor,\n getContextObject,\n getFunctionParameterNames,\n getIndent,\n getJsdocParameterNames,\n getJsdocParameterNamesDeep,\n getPreferredTagName,\n getTagsByType,\n hasATag,\n hasDefinedTypeReturnTag,\n hasReturnValue,\n hasTag,\n isNamepathDefiningTag,\n isNamepathTag,\n isPotentiallyEmptyNamepathTag,\n isTagWithType,\n isValidTag,\n parseClosureTemplateTag\n};\n"],"file":"jsdocUtils.js"}
|
package/dist/rules/checkTypes.js
CHANGED
|
@@ -21,7 +21,7 @@ function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d =
|
|
|
21
21
|
|
|
22
22
|
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
|
|
23
23
|
|
|
24
|
-
const strictNativeTypes = ['undefined', 'null', 'boolean', 'number', 'string', 'object', 'Array', 'Function', 'Date', 'RegExp'];
|
|
24
|
+
const strictNativeTypes = ['undefined', 'null', 'boolean', 'number', 'bigint', 'string', 'symbol', 'object', 'Array', 'Function', 'Date', 'RegExp'];
|
|
25
25
|
|
|
26
26
|
var _default = (0, _iterateJsdoc.default)(({
|
|
27
27
|
jsdocNode,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/rules/checkTypes.js"],"names":["strictNativeTypes","jsdocNode","sourceCode","report","utils","settings","context","jsdocTags","filterTags","tag","isTagWithType","preferredTypes","optionObj","options","noDefaults","_","get","unifyParentAndChildTypeChecks","forEach","jsdocTag","invalidTypes","typeAst","type","error","getPreferredTypeInfo","nodeName","parentName","parentNode","hasMatchingPreferredType","isGenericMatch","typeName","Object","keys","length","parentType","syntax","some","checkPostFix","syn","undefined","directNameMatch","unifiedSyntaxParentMatch","adjustNames","preferred","node","ret","meta","dotBracketEnd","match","slice","bracketEnd","endsWith","name","replace","includes","preferredSetting","push","reportSettings","strictNativeType","toLowerCase","fixedType","tagName","badType","preferredType","message","fix","fixer","replaceText","getText","tagValue","iterateAllJsdocs","fixable","schema","additionalProperties","properties"],"mappings":"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","sourcesContent":["import _ from 'lodash';\nimport {parse, traverse, publish} from 'jsdoctypeparser';\nimport iterateJsdoc from '../iterateJsdoc';\n\nconst strictNativeTypes = [\n 'undefined',\n 'null',\n 'boolean',\n 'number',\n 'string',\n 'object',\n 'Array',\n 'Function',\n 'Date',\n 'RegExp'\n];\n\nexport default iterateJsdoc(({\n jsdocNode,\n sourceCode,\n report,\n utils,\n settings,\n context\n}) => {\n const jsdocTags = utils.filterTags((tag) => {\n return utils.isTagWithType(tag.tag);\n });\n\n const {preferredTypes} = settings;\n const optionObj = context.options[0];\n const noDefaults = _.get(optionObj, 'noDefaults');\n const unifyParentAndChildTypeChecks = _.get(optionObj, 'unifyParentAndChildTypeChecks');\n\n jsdocTags.forEach((jsdocTag) => {\n const invalidTypes = [];\n let typeAst;\n\n try {\n typeAst = parse(jsdocTag.type);\n } catch (error) {\n return;\n }\n\n const getPreferredTypeInfo = (type, nodeName, parentName, parentNode) => {\n let hasMatchingPreferredType;\n let isGenericMatch;\n let typeName = nodeName;\n if (Object.keys(preferredTypes).length) {\n const parentType = parentName === 'subject';\n if (unifyParentAndChildTypeChecks || parentType) {\n const syntax = _.get(parentNode, 'meta.syntax');\n\n [\n ['.', 'ANGLE_BRACKET_WITH_DOT'],\n ['.<>', 'ANGLE_BRACKET_WITH_DOT'],\n ['<>', 'ANGLE_BRACKET']\n ].some(([checkPostFix, syn]) => {\n isGenericMatch = _.get(\n preferredTypes,\n nodeName + checkPostFix\n ) !== undefined &&\n syntax === syn;\n if (isGenericMatch) {\n typeName += checkPostFix;\n }\n\n return isGenericMatch;\n });\n if (!isGenericMatch && parentType) {\n [\n ['[]', 'SQUARE_BRACKET'],\n ['.', 'ANGLE_BRACKET_WITH_DOT'],\n ['.<>', 'ANGLE_BRACKET_WITH_DOT'],\n ['<>', 'ANGLE_BRACKET']\n ].some(([checkPostFix, syn]) => {\n isGenericMatch = _.get(preferredTypes, checkPostFix) !== undefined &&\n syntax === syn;\n if (isGenericMatch) {\n typeName = checkPostFix;\n }\n\n return isGenericMatch;\n });\n }\n }\n const directNameMatch = _.get(preferredTypes, nodeName) !== undefined;\n const unifiedSyntaxParentMatch = parentType && directNameMatch && unifyParentAndChildTypeChecks;\n isGenericMatch = isGenericMatch || unifiedSyntaxParentMatch;\n\n hasMatchingPreferredType = isGenericMatch ||\n directNameMatch && !parentType;\n }\n\n return [hasMatchingPreferredType, typeName, isGenericMatch];\n };\n\n const adjustNames = (type, preferred, isGenericMatch, nodeName, node, parentNode) => {\n let ret = preferred;\n if (isGenericMatch) {\n if (preferred === '[]') {\n parentNode.meta.syntax = 'SQUARE_BRACKET';\n ret = 'Array';\n } else {\n const dotBracketEnd = preferred.match(/\\.(?:<>)?$/);\n if (dotBracketEnd) {\n parentNode.meta.syntax = 'ANGLE_BRACKET_WITH_DOT';\n ret = preferred.slice(0, -dotBracketEnd[0].length);\n } else {\n const bracketEnd = preferred.endsWith('<>');\n if (bracketEnd) {\n parentNode.meta.syntax = 'ANGLE_BRACKET';\n ret = preferred.slice(0, -2);\n }\n }\n }\n } else if (type === 'ANY') {\n node.type = 'NAME';\n }\n node.name = ret.replace(/(?:\\.|<>|\\.<>|\\[])$/, '');\n\n // For bare pseudo-types like `<>`\n if (!ret) {\n node.name = nodeName;\n }\n\n return ret;\n };\n\n traverse(typeAst, (node, parentName, parentNode) => {\n const {type, name} = node;\n if (!['NAME', 'ANY'].includes(type)) {\n return;\n }\n let nodeName = type === 'ANY' ? '*' : name;\n\n const [hasMatchingPreferredType, typeName, isGenericMatch] = getPreferredTypeInfo(type, nodeName, parentName, parentNode);\n\n let preferred;\n if (hasMatchingPreferredType) {\n const preferredSetting = preferredTypes[typeName];\n nodeName = typeName === '[]' ? typeName : nodeName;\n\n if (!preferredSetting) {\n invalidTypes.push([nodeName]);\n } else if (typeof preferredSetting === 'string') {\n preferred = preferredSetting;\n invalidTypes.push([nodeName, preferred]);\n } else if (typeof preferredSetting === 'object') {\n preferred = _.get(preferredSetting, 'replacement');\n invalidTypes.push([\n nodeName,\n preferred,\n _.get(preferredSetting, 'message')\n ]);\n } else {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.'\n );\n\n return;\n }\n } else if (!noDefaults && type === 'NAME') {\n for (const strictNativeType of strictNativeTypes) {\n if (strictNativeType.toLowerCase() === nodeName.toLowerCase() &&\n strictNativeType !== nodeName &&\n\n // Don't report if user has own map for a strict native type\n (!preferredTypes || _.get(preferredTypes, strictNativeType) === undefined)\n ) {\n preferred = strictNativeType;\n invalidTypes.push([nodeName, preferred]);\n break;\n }\n }\n }\n\n // For fixer\n if (preferred) {\n preferred = adjustNames(type, preferred, isGenericMatch, nodeName, node, parentNode);\n }\n });\n\n if (invalidTypes.length) {\n const fixedType = publish(typeAst);\n\n const tagName = jsdocTag.tag;\n invalidTypes.forEach(([badType, preferredType = '', message]) => {\n const fix = (fixer) => {\n return fixer.replaceText(\n jsdocNode,\n sourceCode.getText(jsdocNode).replace(\n `{${jsdocTag.type}}`,\n `{${fixedType}}`\n )\n );\n };\n\n const tagValue = jsdocTag.name ? ` \"${jsdocTag.name}\"` : '';\n\n report(\n message ||\n `Invalid JSDoc @${tagName}${tagValue} type \"${badType}\"` +\n (preferredType ? '; ' : '.') +\n (preferredType ? `prefer: \"${preferredType}\".` : ''),\n preferredType ? fix : null,\n jsdocTag,\n message ? {\n tagName,\n tagValue\n } : null\n );\n });\n }\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n noDefaults: {\n type: 'boolean'\n },\n unifyParentAndChildTypeChecks: {\n type: 'boolean'\n }\n },\n type: 'object'\n }\n ],\n type: 'suggestion'\n }\n});\n"],"file":"checkTypes.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/rules/checkTypes.js"],"names":["strictNativeTypes","jsdocNode","sourceCode","report","utils","settings","context","jsdocTags","filterTags","tag","isTagWithType","preferredTypes","optionObj","options","noDefaults","_","get","unifyParentAndChildTypeChecks","forEach","jsdocTag","invalidTypes","typeAst","type","error","getPreferredTypeInfo","nodeName","parentName","parentNode","hasMatchingPreferredType","isGenericMatch","typeName","Object","keys","length","parentType","syntax","some","checkPostFix","syn","undefined","directNameMatch","unifiedSyntaxParentMatch","adjustNames","preferred","node","ret","meta","dotBracketEnd","match","slice","bracketEnd","endsWith","name","replace","includes","preferredSetting","push","reportSettings","strictNativeType","toLowerCase","fixedType","tagName","badType","preferredType","message","fix","fixer","replaceText","getText","tagValue","iterateAllJsdocs","fixable","schema","additionalProperties","properties"],"mappings":"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","sourcesContent":["import _ from 'lodash';\nimport {parse, traverse, publish} from 'jsdoctypeparser';\nimport iterateJsdoc from '../iterateJsdoc';\n\nconst strictNativeTypes = [\n 'undefined',\n 'null',\n 'boolean',\n 'number',\n 'bigint',\n 'string',\n 'symbol',\n 'object',\n 'Array',\n 'Function',\n 'Date',\n 'RegExp'\n];\n\nexport default iterateJsdoc(({\n jsdocNode,\n sourceCode,\n report,\n utils,\n settings,\n context\n}) => {\n const jsdocTags = utils.filterTags((tag) => {\n return utils.isTagWithType(tag.tag);\n });\n\n const {preferredTypes} = settings;\n const optionObj = context.options[0];\n const noDefaults = _.get(optionObj, 'noDefaults');\n const unifyParentAndChildTypeChecks = _.get(optionObj, 'unifyParentAndChildTypeChecks');\n\n jsdocTags.forEach((jsdocTag) => {\n const invalidTypes = [];\n let typeAst;\n\n try {\n typeAst = parse(jsdocTag.type);\n } catch (error) {\n return;\n }\n\n const getPreferredTypeInfo = (type, nodeName, parentName, parentNode) => {\n let hasMatchingPreferredType;\n let isGenericMatch;\n let typeName = nodeName;\n if (Object.keys(preferredTypes).length) {\n const parentType = parentName === 'subject';\n if (unifyParentAndChildTypeChecks || parentType) {\n const syntax = _.get(parentNode, 'meta.syntax');\n\n [\n ['.', 'ANGLE_BRACKET_WITH_DOT'],\n ['.<>', 'ANGLE_BRACKET_WITH_DOT'],\n ['<>', 'ANGLE_BRACKET']\n ].some(([checkPostFix, syn]) => {\n isGenericMatch = _.get(\n preferredTypes,\n nodeName + checkPostFix\n ) !== undefined &&\n syntax === syn;\n if (isGenericMatch) {\n typeName += checkPostFix;\n }\n\n return isGenericMatch;\n });\n if (!isGenericMatch && parentType) {\n [\n ['[]', 'SQUARE_BRACKET'],\n ['.', 'ANGLE_BRACKET_WITH_DOT'],\n ['.<>', 'ANGLE_BRACKET_WITH_DOT'],\n ['<>', 'ANGLE_BRACKET']\n ].some(([checkPostFix, syn]) => {\n isGenericMatch = _.get(preferredTypes, checkPostFix) !== undefined &&\n syntax === syn;\n if (isGenericMatch) {\n typeName = checkPostFix;\n }\n\n return isGenericMatch;\n });\n }\n }\n const directNameMatch = _.get(preferredTypes, nodeName) !== undefined;\n const unifiedSyntaxParentMatch = parentType && directNameMatch && unifyParentAndChildTypeChecks;\n isGenericMatch = isGenericMatch || unifiedSyntaxParentMatch;\n\n hasMatchingPreferredType = isGenericMatch ||\n directNameMatch && !parentType;\n }\n\n return [hasMatchingPreferredType, typeName, isGenericMatch];\n };\n\n const adjustNames = (type, preferred, isGenericMatch, nodeName, node, parentNode) => {\n let ret = preferred;\n if (isGenericMatch) {\n if (preferred === '[]') {\n parentNode.meta.syntax = 'SQUARE_BRACKET';\n ret = 'Array';\n } else {\n const dotBracketEnd = preferred.match(/\\.(?:<>)?$/);\n if (dotBracketEnd) {\n parentNode.meta.syntax = 'ANGLE_BRACKET_WITH_DOT';\n ret = preferred.slice(0, -dotBracketEnd[0].length);\n } else {\n const bracketEnd = preferred.endsWith('<>');\n if (bracketEnd) {\n parentNode.meta.syntax = 'ANGLE_BRACKET';\n ret = preferred.slice(0, -2);\n }\n }\n }\n } else if (type === 'ANY') {\n node.type = 'NAME';\n }\n node.name = ret.replace(/(?:\\.|<>|\\.<>|\\[])$/, '');\n\n // For bare pseudo-types like `<>`\n if (!ret) {\n node.name = nodeName;\n }\n\n return ret;\n };\n\n traverse(typeAst, (node, parentName, parentNode) => {\n const {type, name} = node;\n if (!['NAME', 'ANY'].includes(type)) {\n return;\n }\n let nodeName = type === 'ANY' ? '*' : name;\n\n const [hasMatchingPreferredType, typeName, isGenericMatch] = getPreferredTypeInfo(type, nodeName, parentName, parentNode);\n\n let preferred;\n if (hasMatchingPreferredType) {\n const preferredSetting = preferredTypes[typeName];\n nodeName = typeName === '[]' ? typeName : nodeName;\n\n if (!preferredSetting) {\n invalidTypes.push([nodeName]);\n } else if (typeof preferredSetting === 'string') {\n preferred = preferredSetting;\n invalidTypes.push([nodeName, preferred]);\n } else if (typeof preferredSetting === 'object') {\n preferred = _.get(preferredSetting, 'replacement');\n invalidTypes.push([\n nodeName,\n preferred,\n _.get(preferredSetting, 'message')\n ]);\n } else {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.'\n );\n\n return;\n }\n } else if (!noDefaults && type === 'NAME') {\n for (const strictNativeType of strictNativeTypes) {\n if (strictNativeType.toLowerCase() === nodeName.toLowerCase() &&\n strictNativeType !== nodeName &&\n\n // Don't report if user has own map for a strict native type\n (!preferredTypes || _.get(preferredTypes, strictNativeType) === undefined)\n ) {\n preferred = strictNativeType;\n invalidTypes.push([nodeName, preferred]);\n break;\n }\n }\n }\n\n // For fixer\n if (preferred) {\n preferred = adjustNames(type, preferred, isGenericMatch, nodeName, node, parentNode);\n }\n });\n\n if (invalidTypes.length) {\n const fixedType = publish(typeAst);\n\n const tagName = jsdocTag.tag;\n invalidTypes.forEach(([badType, preferredType = '', message]) => {\n const fix = (fixer) => {\n return fixer.replaceText(\n jsdocNode,\n sourceCode.getText(jsdocNode).replace(\n `{${jsdocTag.type}}`,\n `{${fixedType}}`\n )\n );\n };\n\n const tagValue = jsdocTag.name ? ` \"${jsdocTag.name}\"` : '';\n\n report(\n message ||\n `Invalid JSDoc @${tagName}${tagValue} type \"${badType}\"` +\n (preferredType ? '; ' : '.') +\n (preferredType ? `prefer: \"${preferredType}\".` : ''),\n preferredType ? fix : null,\n jsdocTag,\n message ? {\n tagName,\n tagValue\n } : null\n );\n });\n }\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n noDefaults: {\n type: 'boolean'\n },\n unifyParentAndChildTypeChecks: {\n type: 'boolean'\n }\n },\n type: 'object'\n }\n ],\n type: 'suggestion'\n }\n});\n"],"file":"checkTypes.js"}
|
|
@@ -83,7 +83,23 @@ var _default = (0, _iterateJsdoc.default)(({
|
|
|
83
83
|
|
|
84
84
|
const missingReturnTag = typeof tag === 'undefined' || tag === null;
|
|
85
85
|
|
|
86
|
-
|
|
86
|
+
const shouldReport = () => {
|
|
87
|
+
if (!missingReturnTag) {
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
if (forceRequireReturn) {
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
if (forceReturnsWithAsync && utils.isAsync() && !utils.hasReturnValue()) {
|
|
96
|
+
return true;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
return utils.hasReturnValue();
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
if (shouldReport()) {
|
|
87
103
|
report(`Missing JSDoc @${tagName} declaration.`);
|
|
88
104
|
}
|
|
89
105
|
}, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/rules/requireReturns.js"],"names":["canSkip","utils","hasATag","isConstructor","isSetter","avoidDocs","report","context","options","forceRequireReturn","forceReturnsWithAsync","tagName","getPreferredTagName","tags","getTags","length","tag","missingReturnTag","isAsync","hasReturnValue","meta","schema","additionalProperties","properties","exemptedBy","items","type","default"],"mappings":";;;;;;;AAAA;;AACA;;;;;;;;;;;;AAEA;;;;;;;;;;;AAWA,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,aAAN,EApBK,IAsBL;AACA;AACAF,EAAAA,KAAK,CAACG,QAAN,EAxBK,IAyBLH,KAAK,CAACI,SAAN,EAzBF;AA0BD,CA3BD;;eA6Be,2BAAa,CAAC;AAC3BC,EAAAA,MAD2B;AAE3BL,EAAAA,KAF2B;AAG3BM,EAAAA;AAH2B,CAAD,KAItB;AACJ,oCAAoBA,OAApB,EAA6B,iBAA7B,EADI,CAGJ;AACA;;AACA,MAAIP,OAAO,CAACC,KAAD,CAAX,EAAoB;AAClB;AACD;;AAPG,eAYAM,OAAO,CAACC,OAAR,CAAgB,CAAhB,KAAsB,EAZtB;AAAA,qCAUFC,kBAVE;AAAA,QAUFA,kBAVE,sCAUmB,KAVnB;AAAA,qCAWFC,qBAXE;AAAA,QAWFA,qBAXE,sCAWsB,KAXtB;;AAcJ,QAAMC,OAAO,GAAGV,KAAK,CAACW,mBAAN,CAA0B;AAACD,IAAAA,OAAO,EAAE;AAAV,GAA1B,CAAhB;;AACA,MAAI,CAACA,OAAL,EAAc;AACZ;AACD;;AACD,QAAME,IAAI,GAAGZ,KAAK,CAACa,OAAN,CAAcH,OAAd,CAAb;;AAEA,MAAIE,IAAI,CAACE,MAAL,GAAc,CAAlB,EAAqB;AACnBT,IAAAA,MAAM,CAAE,wBAAuBK,OAAQ,eAAjC,CAAN;AACD,GAtBG,CAwBJ;;;AAxBI,+BAyBUE,IAzBV;AAAA,QAyBGG,GAzBH;;AA0BJ,QAAMC,gBAAgB,GAAG,OAAOD,GAAP,KAAe,WAAf,IAA8BA,GAAG,KAAK,IAA/D;;
|
|
1
|
+
{"version":3,"sources":["../../src/rules/requireReturns.js"],"names":["canSkip","utils","hasATag","isConstructor","isSetter","avoidDocs","report","context","options","forceRequireReturn","forceReturnsWithAsync","tagName","getPreferredTagName","tags","getTags","length","tag","missingReturnTag","shouldReport","isAsync","hasReturnValue","meta","schema","additionalProperties","properties","exemptedBy","items","type","default"],"mappings":";;;;;;;AAAA;;AACA;;;;;;;;;;;;AAEA;;;;;;;;;;;AAWA,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,aAAN,EApBK,IAsBL;AACA;AACAF,EAAAA,KAAK,CAACG,QAAN,EAxBK,IAyBLH,KAAK,CAACI,SAAN,EAzBF;AA0BD,CA3BD;;eA6Be,2BAAa,CAAC;AAC3BC,EAAAA,MAD2B;AAE3BL,EAAAA,KAF2B;AAG3BM,EAAAA;AAH2B,CAAD,KAItB;AACJ,oCAAoBA,OAApB,EAA6B,iBAA7B,EADI,CAGJ;AACA;;AACA,MAAIP,OAAO,CAACC,KAAD,CAAX,EAAoB;AAClB;AACD;;AAPG,eAYAM,OAAO,CAACC,OAAR,CAAgB,CAAhB,KAAsB,EAZtB;AAAA,qCAUFC,kBAVE;AAAA,QAUFA,kBAVE,sCAUmB,KAVnB;AAAA,qCAWFC,qBAXE;AAAA,QAWFA,qBAXE,sCAWsB,KAXtB;;AAcJ,QAAMC,OAAO,GAAGV,KAAK,CAACW,mBAAN,CAA0B;AAACD,IAAAA,OAAO,EAAE;AAAV,GAA1B,CAAhB;;AACA,MAAI,CAACA,OAAL,EAAc;AACZ;AACD;;AACD,QAAME,IAAI,GAAGZ,KAAK,CAACa,OAAN,CAAcH,OAAd,CAAb;;AAEA,MAAIE,IAAI,CAACE,MAAL,GAAc,CAAlB,EAAqB;AACnBT,IAAAA,MAAM,CAAE,wBAAuBK,OAAQ,eAAjC,CAAN;AACD,GAtBG,CAwBJ;;;AAxBI,+BAyBUE,IAzBV;AAAA,QAyBGG,GAzBH;;AA0BJ,QAAMC,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,QAAIR,kBAAJ,EAAwB;AACtB,aAAO,IAAP;AACD;;AAED,QAAIC,qBAAqB,IAAIT,KAAK,CAACkB,OAAN,EAAzB,IAA4C,CAAClB,KAAK,CAACmB,cAAN,EAAjD,EAAyE;AACvE,aAAO,IAAP;AACD;;AAED,WAAOnB,KAAK,CAACmB,cAAN,EAAP;AACD,GAdD;;AAgBA,MAAIF,YAAY,EAAhB,EAAoB;AAClBZ,IAAAA,MAAM,CAAE,kBAAiBK,OAAQ,eAA3B,CAAN;AACD;AACF,CAnDc,EAmDZ;AACDU,EAAAA,IAAI,EAAE;AACJC,IAAAA,MAAM,EAAE,CACN;AACEC,MAAAA,oBAAoB,EAAE,KADxB;AAEEC,MAAAA,UAAU,EAAE;AACVC,QAAAA,UAAU,EAAE;AACVC,UAAAA,KAAK,EAAE;AACLC,YAAAA,IAAI,EAAE;AADD,WADG;AAIVA,UAAAA,IAAI,EAAE;AAJI,SADF;AAOVlB,QAAAA,kBAAkB,EAAE;AAClBmB,UAAAA,OAAO,EAAE,KADS;AAElBD,UAAAA,IAAI,EAAE;AAFY,SAPV;AAWVjB,QAAAA,qBAAqB,EAAE;AACrBkB,UAAAA,OAAO,EAAE,KADY;AAErBD,UAAAA,IAAI,EAAE;AAFe;AAXb,OAFd;AAkBEA,MAAAA,IAAI,EAAE;AAlBR,KADM,CADJ;AAuBJA,IAAAA,IAAI,EAAE;AAvBF;AADL,CAnDY,C","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\nimport warnRemovedSettings from '../warnRemovedSettings';\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.isConstructor() ||\n\n // Though ESLint avoided getters: https://github.com/eslint/eslint/blob/master/lib/rules/valid-jsdoc.js#L435\n // ... getters seem that they should, unlike setters, always return:\n utils.isSetter() ||\n utils.avoidDocs();\n};\n\nexport default iterateJsdoc(({\n report,\n utils,\n context\n}) => {\n warnRemovedSettings(context, 'require-returns');\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 {\n forceRequireReturn = false,\n forceReturnsWithAsync = false\n } = context.options[0] || {};\n\n const tagName = utils.getPreferredTagName({tagName: 'returns'});\n if (!tagName) {\n return;\n }\n const tags = utils.getTags(tagName);\n\n if (tags.length > 1) {\n report(`Found more than one @${tagName} declaration.`);\n }\n\n // In case the code returns something, we expect a return value in JSDoc.\n const [tag] = 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 return true;\n }\n\n if (forceReturnsWithAsync && utils.isAsync() && !utils.hasReturnValue()) {\n return true;\n }\n\n return utils.hasReturnValue();\n };\n\n if (shouldReport()) {\n report(`Missing JSDoc @${tagName} declaration.`);\n }\n}, {\n meta: {\n schema: [\n {\n additionalProperties: false,\n properties: {\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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/rules/requireReturnsCheck.js"],"names":["canSkip","utils","hasATag","isConstructor","classHasTag","report","tagName","getPreferredTagName","tags","getTags","length","hasDefinedTypeReturnTag","hasReturnValue","meta","type"],"mappings":";;;;;;;AAAA;;;;AAEA,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,EAanB,WAbmB,CAAd,KAcDD,KAAK,CAACE,aAAN,EAdC,IAcwBF,KAAK,CAACG,WAAN,CAAkB,WAAlB,CAd/B;AAeD,CAhBD;;eAkBe,2BAAa,CAAC;AAC3BC,EAAAA,MAD2B;AAE3BJ,EAAAA;AAF2B,CAAD,KAGtB;AACJ,MAAID,OAAO,CAACC,KAAD,CAAX,EAAoB;AAClB;AACD;;AAED,
|
|
1
|
+
{"version":3,"sources":["../../src/rules/requireReturnsCheck.js"],"names":["canSkip","utils","hasATag","isConstructor","classHasTag","report","isAsync","tagName","getPreferredTagName","tags","getTags","length","hasDefinedTypeReturnTag","hasReturnValue","meta","type"],"mappings":";;;;;;;AAAA;;;;AAEA,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,EAanB,WAbmB,CAAd,KAcDD,KAAK,CAACE,aAAN,EAdC,IAcwBF,KAAK,CAACG,WAAN,CAAkB,WAAlB,CAd/B;AAeD,CAhBD;;eAkBe,2BAAa,CAAC;AAC3BC,EAAAA,MAD2B;AAE3BJ,EAAAA;AAF2B,CAAD,KAGtB;AACJ,MAAID,OAAO,CAACC,KAAD,CAAX,EAAoB;AAClB;AACD;;AAED,MAAIA,KAAK,CAACK,OAAN,EAAJ,EAAqB;AACnB;AACD;;AAED,QAAMC,OAAO,GAAGN,KAAK,CAACO,mBAAN,CAA0B;AAACD,IAAAA,OAAO,EAAE;AAAV,GAA1B,CAAhB;;AACA,MAAI,CAACA,OAAL,EAAc;AACZ;AACD;;AACD,QAAME,IAAI,GAAGR,KAAK,CAACS,OAAN,CAAcH,OAAd,CAAb;;AAEA,MAAIE,IAAI,CAACE,MAAL,KAAgB,CAApB,EAAuB;AACrB;AACD;;AAED,MAAIF,IAAI,CAACE,MAAL,GAAc,CAAlB,EAAqB;AACnBN,IAAAA,MAAM,CAAE,wBAAuBE,OAAQ,eAAjC,CAAN;AAEA;AACD,GAvBG,CAyBJ;;;AACA,MAAIN,KAAK,CAACW,uBAAN,CAA8BH,IAAI,CAAC,CAAD,CAAlC,KAA0C,CAACR,KAAK,CAACY,cAAN,EAA/C,EAAuE;AACrER,IAAAA,MAAM,CAAE,UAASE,OAAQ,uEAAnB,CAAN;AACD;AACF,CAhCc,EAgCZ;AACDO,EAAAA,IAAI,EAAE;AACJC,IAAAA,IAAI,EAAE;AADF;AADL,CAhCY,C","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\nconst canSkip = (utils) => {\n return utils.hasATag([\n // An abstract function is by definition incomplete\n // so it is perfectly fine if a return is documented but\n // not present within the function.\n // A subclass may inherit the doc and implement the\n // missing return.\n 'abstract',\n 'virtual',\n\n // A constructor function returns `this` by default, so may be `@returns`\n // tag indicating this but no explicit return\n 'class',\n 'constructor',\n 'interface'\n ]) || utils.isConstructor() || utils.classHasTag('interface');\n};\n\nexport default iterateJsdoc(({\n report,\n utils\n}) => {\n if (canSkip(utils)) {\n return;\n }\n\n if (utils.isAsync()) {\n return;\n }\n\n const tagName = utils.getPreferredTagName({tagName: 'returns'});\n if (!tagName) {\n return;\n }\n const tags = utils.getTags(tagName);\n\n if (tags.length === 0) {\n return;\n }\n\n if (tags.length > 1) {\n report(`Found more than one @${tagName} declaration.`);\n\n return;\n }\n\n // In case a return value is declared in JSDoc, we also expect one in the code.\n if (utils.hasDefinedTypeReturnTag(tags[0]) && !utils.hasReturnValue()) {\n report(`JSDoc @${tagName} declaration present but return expression not available in function.`);\n }\n}, {\n meta: {\n type: 'suggestion'\n }\n});\n"],"file":"requireReturnsCheck.js"}
|
package/package.json
CHANGED