eslint-plugin-jsdoc 28.4.0 → 28.6.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -188,7 +188,9 @@ how many line breaks to add when a block is missing.
188
188
  <a name="eslint-plugin-jsdoc-settings-mode"></a>
189
189
  ### Mode
190
190
 
191
- - `settings.jsdoc.mode` - Set to `jsdoc` (the default), `typescript`, or `closure`.
191
+ - `settings.jsdoc.mode` - Set to `typescript`, `closure`, or `jsdoc` (the
192
+ default unless the `@typescript-eslint` parser is in use in which case
193
+ `typescript` will be the default).
192
194
  Note that if you do not wish to use separate `.eslintrc.*` files for a project
193
195
  containing both JavaScript and TypeScript, you can also use [`overrides`](https://eslint.org/docs/user-guide/configuring). You may also set to `"permissive"` to
194
196
  try to be as accommodating to any of the styles, but this is not recommended.
@@ -197,11 +199,17 @@ how many line breaks to add when a block is missing.
197
199
  - `no-undefined-types`: Only check `@template` for types in "closure" and
198
200
  "typescript" modes
199
201
  - `check-syntax`: determines aspects that may be enforced
202
+ - `valid-types`: in non-Closure mode, `@extends`, `@package` and access tags
203
+ (e.g., `@private`) with a bracketed type are reported as are missing
204
+ names with `@typedef`
200
205
  - For type/namepath-checking rules, determine which tags will be checked for
201
206
  types/namepaths (Closure allows types on some tags which the others do not,
202
207
  so these tags will additionally be checked in "closure" mode)
203
208
  - For type-checking rules, impacts parsing of types (through
204
- [jsdoctypeparser](https://github.com/jsdoctypeparser/jsdoctypeparser) dependency)
209
+ [jsdoctypeparser](https://github.com/jsdoctypeparser/jsdoctypeparser)
210
+ dependency); note that some TypeScript features are
211
+ [not yet](https://github.com/gajus/eslint-plugin-jsdoc/issues/145)
212
+ [supported](https://github.com/jsdoctypeparser/jsdoctypeparser/issues/50)
205
213
  - Check preferred tag names
206
214
  - Disallows namepath on `@interface` for "closure" mode in `valid-types` (and
207
215
  avoids checking in other rules)
@@ -7371,6 +7379,14 @@ interface quux {
7371
7379
  }
7372
7380
  // Options: [{"descriptionStyle":"tag"}]
7373
7381
 
7382
+ interface quux {
7383
+ /**
7384
+ * If the thing should be checked.
7385
+ */
7386
+ checked?: boolean
7387
+ }
7388
+ // Options: [{"contexts":["TSPropertySignature"]}]
7389
+
7374
7390
  /**
7375
7391
  *
7376
7392
  */
@@ -8351,6 +8367,12 @@ function myFunction() {
8351
8367
  // Settings: {"jsdoc":{"minLines":1}}
8352
8368
  // Message: Missing JSDoc comment.
8353
8369
 
8370
+ function myFunction() {
8371
+
8372
+ }
8373
+ // Options: [{"enableFixer":false}]
8374
+ // Message: Missing JSDoc comment.
8375
+
8354
8376
  export var test = function () {
8355
8377
 
8356
8378
  };
@@ -13188,6 +13210,18 @@ function quux () {
13188
13210
  }
13189
13211
  // Settings: {"jsdoc":{"tagNamePreference":{"throws":false}}}
13190
13212
  // Message: Unexpected tag `@throws`
13213
+
13214
+ /**
13215
+ *
13216
+ */
13217
+ const directThrowAfterArrow = (b) => {
13218
+ const a = () => {};
13219
+ if (b) {
13220
+ throw new Error('oops')
13221
+ }
13222
+ return a;
13223
+ };
13224
+ // Message: Missing JSDoc @throws declaration.
13191
13225
  ````
13192
13226
 
13193
13227
  The following patterns are not considered problems:
@@ -13236,6 +13270,16 @@ function quux () {
13236
13270
  throw new Error('err')
13237
13271
  }
13238
13272
  // Options: [{"exemptedBy":["type"]}]
13273
+
13274
+ /**
13275
+ *
13276
+ */
13277
+ const itself = (n) => n;
13278
+
13279
+ /**
13280
+ * Not tracking on nested function
13281
+ */
13282
+ const nested = () => () => {throw new Error('oops');};
13239
13283
  ````
13240
13284
 
13241
13285
 
@@ -13489,6 +13533,20 @@ function foo(bar) {}
13489
13533
  */
13490
13534
  // Settings: {"jsdoc":{"mode":"closure"}}
13491
13535
  // Message: @interface should not have a name in "closure" mode.
13536
+
13537
+ /**
13538
+ * @typedef {SomeType}
13539
+ */
13540
+ function quux () {}
13541
+ // Settings: {"jsdoc":{"mode":"jsdoc"}}
13542
+ // Message: @typedef must have a name in "jsdoc" mode.
13543
+
13544
+ /**
13545
+ * @private {SomeType}
13546
+ */
13547
+ function quux () {}
13548
+ // Settings: {"jsdoc":{"mode":"jsdoc"}}
13549
+ // Message: @private should not have a bracketed type in "jsdoc" mode.
13492
13550
  ````
13493
13551
 
13494
13552
  The following patterns are not considered problems:
@@ -13617,10 +13675,16 @@ function quux() {
13617
13675
  */
13618
13676
  class Bar {};
13619
13677
 
13678
+ /**
13679
+ * @extends Foo<String>
13680
+ */
13681
+ class Bar {};
13682
+
13620
13683
  /**
13621
13684
  * @extends {Foo<String>}
13622
13685
  */
13623
13686
  class Bar {};
13687
+ // Settings: {"jsdoc":{"mode":"closure"}}
13624
13688
 
13625
13689
  /**
13626
13690
  * @typedef {number|string} UserDefinedType
@@ -13630,17 +13694,13 @@ function quux() {
13630
13694
  * @typedef {number|string}
13631
13695
  */
13632
13696
  let UserDefinedGCCType;
13697
+ // Settings: {"jsdoc":{"mode":"closure"}}
13633
13698
 
13634
13699
  /**
13635
13700
  * @modifies {foo|bar}
13636
13701
  */
13637
13702
  function quux (foo, bar, baz) {}
13638
13703
 
13639
- /**
13640
- * @private {BadTypeNotCheckedInJsdoc<}
13641
- */
13642
- function quux () {}
13643
-
13644
13704
  /**
13645
13705
  * @this {Navigator}
13646
13706
  */
@@ -13664,6 +13724,14 @@ function quux () {}
13664
13724
  */
13665
13725
  function quux () {}
13666
13726
 
13727
+ /**
13728
+ * Foo function.
13729
+ *
13730
+ * @interface foo
13731
+ */
13732
+ function foo(bar) {}
13733
+ // Settings: {"jsdoc":{"mode":"typescript"}}
13734
+
13667
13735
  /**
13668
13736
  * Foo function.
13669
13737
  *
@@ -13672,6 +13740,13 @@ function quux () {}
13672
13740
  function foo(bar) {}
13673
13741
  // Settings: {"jsdoc":{"mode":"typescript"}}
13674
13742
 
13743
+ /**
13744
+ * Foo function.
13745
+ *
13746
+ * @param {[number, string]} bar - The bar array.
13747
+ */
13748
+ function foo(bar) {}
13749
+
13675
13750
  /**
13676
13751
  * Foo function.
13677
13752
  *
@@ -13679,6 +13754,26 @@ function foo(bar) {}
13679
13754
  */
13680
13755
  function foo(bar) {}
13681
13756
  // Settings: {"jsdoc":{"mode":"permissive"}}
13757
+
13758
+ /**
13759
+ * @typedef {SomeType}
13760
+ */
13761
+ function quux () {}
13762
+ // Settings: {"jsdoc":{"mode":"closure"}}
13763
+
13764
+ /**
13765
+ * @private {SomeType}
13766
+ */
13767
+ function quux () {}
13768
+ // Settings: {"jsdoc":{"mode":"closure"}}
13769
+
13770
+ /**
13771
+ * @param
13772
+ */
13773
+ function quux() {
13774
+
13775
+ }
13776
+ // Options: [{"allowEmptyNamepaths":false}]
13682
13777
  ````
13683
13778
 
13684
13779
 
@@ -420,7 +420,7 @@ const getSettings = context => {
420
420
  implementsReplacesDocs: (_context$settings$jsd11 = context.settings.jsdoc) === null || _context$settings$jsd11 === void 0 ? void 0 : _context$settings$jsd11.implementsReplacesDocs,
421
421
  augmentsExtendsReplacesDocs: (_context$settings$jsd12 = context.settings.jsdoc) === null || _context$settings$jsd12 === void 0 ? void 0 : _context$settings$jsd12.augmentsExtendsReplacesDocs,
422
422
  // Many rules, e.g., `check-tag-names`
423
- mode: (_context$settings$jsd13 = (_context$settings$jsd14 = context.settings.jsdoc) === null || _context$settings$jsd14 === void 0 ? void 0 : _context$settings$jsd14.mode) !== null && _context$settings$jsd13 !== void 0 ? _context$settings$jsd13 : 'jsdoc'
423
+ mode: (_context$settings$jsd13 = (_context$settings$jsd14 = context.settings.jsdoc) === null || _context$settings$jsd14 === void 0 ? void 0 : _context$settings$jsd14.mode) !== null && _context$settings$jsd13 !== void 0 ? _context$settings$jsd13 : context.parserPath.includes('@typescript-eslint') ? 'typescript' : 'jsdoc'
424
424
  };
425
425
  /* eslint-enable sort-keys-fix/sort-keys-fix */
426
426
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/iterateJsdoc.js"],"names":["globalState","Map","skipSeeLink","parser","str","data","tag","test","parseComment","commentNode","indent","trim","value","parsers","commentParser","PARSERS","parse_tag","includes","parse_type","parse_name","errors","length","result","match","description","undefined","source","getBasicUtils","context","tagNamePreference","mode","utils","reportSettings","message","report","loc","start","column","line","getPreferredTagNameObject","tagName","ret","jsdocUtils","getPreferredTagName","isObject","replacement","blocked","getUtils","node","jsdoc","jsdocNode","settings","iteratingAll","ruleConfig","ancestors","getAncestors","sourceCode","getSourceCode","overrideReplacesDocs","implementsReplacesDocs","augmentsExtendsReplacesDocs","maxLines","minLines","isIteratingFunction","type","isVirtualFunction","hasATag","stringify","tagBlock","getIndent","text","getText","noTrim","lastTag","tags","replace","slice","reportJSDoc","msg","handler","fixer","replaceText","flattenRoots","params","getFunctionParameterNames","isConstructor","kind","parent","isGetter","isSetter","getJsdocTagsDeep","name","skipReportingBlockedTag","allowObjectReturn","defaultMessage","hasTag","getTags","isValidTag","definedTags","hasSchemaOption","prop","schemaProperties","meta","schema","properties","options","default","avoidDocs","classHasTag","exemptedBy","getPresentTags","tagMustHaveEitherTypeOrNamePosition","tagMightHaveEitherTypeOrNamePosition","tagMustHaveNamePosition","tagMightHaveNamePosition","tagMustHaveTypePosition","tagMightHaveTypePosition","isNamepathDefiningTag","hasDefinedTypeReturnTag","hasReturnValue","hasThrowValue","isAsync","async","filterTags","item","tagList","filter","getTagsByType","hasOptionTag","Boolean","getClassNode","reverse","find","getClassJsdoc","classNode","classJsdocNode","repeat","classJsdoc","forEachPreferredTag","arrayHandler","targetTagName","matchingJsdocTags","_","forEach","matchingJsdocTag","getSettings","ignorePrivate","Number","preferredTypes","makeReport","fix","jsdocLoc","lineNumber","end","colNumber","iterate","lines","iterator","state","sourceLine","charAt","checkPrivate","some","iterateAllJsdocs","trackedJsdocs","callIterator","jsdocNodes","lastCall","exit","create","reducedNode","comment","nonComment","push","allComments","getAllComments","untrackedJSdoc","checkFile","iterateJsdoc","metaType","TypeError","contexts","contextDefaults","enforcedContexts","checkJsdoc","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, getReducedASTNode} from './eslint/getJSDocComment';\n\nconst globalState = new Map();\n\nconst skipSeeLink = (parser) => {\n return (str, data) => {\n if (data.tag === 'see' && (/\\{@link.+?\\}/u).test(str)) {\n return null;\n }\n\n return parser(str, data);\n };\n};\n\n/**\n *\n * @param {object} commentNode\n * @param {string} indent Whitespace\n * @param {boolean} [trim=true]\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 skipSeeLink(\n (str, data) => {\n if (['default', 'defaultvalue'].includes(data.tag)) {\n return null;\n }\n\n return commentParser.PARSERS.parse_type(str, data);\n },\n ),\n skipSeeLink(\n (str, data) => {\n if ([\n 'example', 'return', 'returns', 'throws', 'exception',\n 'access', 'version', 'since', 'license', 'author',\n 'default', 'defaultvalue',\n ].includes(data.tag)) {\n return null;\n }\n\n return commentParser.PARSERS.parse_name(str, data);\n },\n ),\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)+)?/u);\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 getBasicUtils = (context, {tagNamePreference, mode}) => {\n const utils = {};\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 utils.getPreferredTagNameObject = ({tagName}) => {\n const ret = jsdocUtils.getPreferredTagName(context, mode, tagName, tagNamePreference);\n const isObject = ret && typeof ret === 'object';\n if (ret === false || isObject && !ret.replacement) {\n return {\n blocked: true,\n tagName,\n };\n }\n\n return ret;\n };\n\n return utils;\n};\n\nconst getUtils = (\n node,\n jsdoc,\n jsdocNode,\n settings,\n report,\n context,\n iteratingAll,\n ruleConfig,\n) => {\n const ancestors = context.getAncestors();\n const sourceCode = context.getSourceCode();\n\n const utils = getBasicUtils(context, settings);\n\n const {\n tagNamePreference,\n overrideReplacesDocs,\n implementsReplacesDocs,\n augmentsExtendsReplacesDocs,\n maxLines,\n minLines,\n mode,\n } = settings;\n\n utils.isIteratingFunction = () => {\n return !iteratingAll || [\n 'MethodDefinition',\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n ].includes(node && node.type);\n };\n\n utils.isVirtualFunction = () => {\n return iteratingAll && utils.hasATag(['callback', 'function', 'func', 'method']);\n };\n\n utils.stringify = (tagBlock, tag) => {\n const indent = tag ?\n jsdocUtils.getIndent({\n text: sourceCode.getText(\n tag,\n tag.loc.start.column,\n ),\n }) :\n jsdocUtils.getIndent(sourceCode);\n\n if (ruleConfig.noTrim) {\n const lastTag = tagBlock.tags[tagBlock.tags.length - 1];\n lastTag.description = lastTag.description.replace(/\\n$/, '');\n }\n\n return commentStringify([tagBlock], {indent}).slice(indent.length - 1);\n };\n\n utils.reportJSDoc = (msg, tag, handler) => {\n report(msg, handler ? (fixer) => {\n handler();\n const replacement = utils.stringify(jsdoc, node);\n\n return fixer.replaceText(jsdocNode, replacement);\n } : null, tag);\n };\n\n utils.flattenRoots = (params) => {\n return jsdocUtils.flattenRoots(params);\n };\n\n utils.getFunctionParameterNames = () => {\n return jsdocUtils.getFunctionParameterNames(node);\n };\n\n utils.isConstructor = () => {\n return node?.type === 'MethodDefinition' && node.kind === 'constructor' ||\n node?.parent?.kind === 'constructor';\n };\n\n utils.isGetter = () => {\n return node && node.parent.kind === 'get';\n };\n\n utils.isSetter = () => {\n return node && node.parent.kind === 'set';\n };\n\n utils.getJsdocTagsDeep = (tagName) => {\n const name = utils.getPreferredTagName({tagName});\n if (!name) {\n return false;\n }\n\n return jsdocUtils.getJsdocTagsDeep(jsdoc, name);\n };\n\n utils.getPreferredTagName = ({tagName, skipReportingBlockedTag = false, allowObjectReturn = false, defaultMessage = `Unexpected tag \\`@${tagName}\\``}) => {\n const ret = jsdocUtils.getPreferredTagName(context, mode, 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(context, mode, 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 const hasSchemaOption = (prop) => {\n const schemaProperties = ruleConfig.meta.schema[0].properties;\n\n return context.options[0]?.[prop] ??\n (schemaProperties[prop] && schemaProperties[prop].default);\n };\n\n // eslint-disable-next-line complexity\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 augmentsExtendsReplacesDocs &&\n (utils.hasATag(['augments', 'extends']) ||\n utils.classHasTag('augments') ||\n utils.classHasTag('extends'))) {\n return true;\n }\n\n if (\n !hasSchemaOption('checkConstructors') &&\n (\n utils.isConstructor() ||\n utils.hasATag([\n 'class',\n 'constructor',\n ])) ||\n !hasSchemaOption('checkGetters') &&\n utils.isGetter() ||\n !hasSchemaOption('checkSetters') &&\n utils.isSetter()) {\n return true;\n }\n\n const exemptedBy = context.options[0]?.exemptedBy ?? [\n 'inheritDoc',\n ...mode === 'closure' ? [] : ['inheritdoc'],\n ];\n if (exemptedBy.length && utils.getPresentTags(exemptedBy).length) {\n return true;\n }\n\n return false;\n };\n\n utils.tagMustHaveEitherTypeOrNamePosition = (tagName) => {\n return jsdocUtils.tagMustHaveEitherTypeOrNamePosition(tagName);\n };\n\n utils.tagMightHaveEitherTypeOrNamePosition = (tagName) => {\n return jsdocUtils.tagMightHaveEitherTypeOrNamePosition(mode, tagName);\n };\n\n utils.tagMustHaveNamePosition = (tagName) => {\n return jsdocUtils.tagMustHaveNamePosition(tagName);\n };\n\n utils.tagMightHaveNamePosition = (tagName) => {\n return jsdocUtils.tagMightHaveNamePosition(mode, tagName);\n };\n\n utils.tagMustHaveTypePosition = (tagName) => {\n return jsdocUtils.tagMustHaveTypePosition(mode, tagName);\n };\n\n utils.tagMightHaveTypePosition = (tagName) => {\n return jsdocUtils.tagMightHaveTypePosition(mode, tagName);\n };\n\n utils.isNamepathDefiningTag = (tagName) => {\n return jsdocUtils.isNamepathDefiningTag(mode, tagName);\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.hasThrowValue = () => {\n return jsdocUtils.hasThrowValue(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(context, mode, tags, tagNamePreference);\n };\n\n utils.hasOptionTag = (tagName) => {\n const {tags} = context.options[0] ?? {};\n\n return Boolean(tags && tags.includes(tagName));\n };\n\n utils.getClassNode = () => {\n return [...ancestors, node].reverse().find((parent) => {\n return parent && ['ClassDeclaration', 'ClassExpression'].includes(parent.type);\n }) || null;\n };\n\n utils.getClassJsdoc = () => {\n const classNode = utils.getClassNode();\n\n if (!classNode) {\n return null;\n }\n\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 Boolean(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 return utils;\n};\n\nconst getSettings = (context) => {\n /* eslint-disable sort-keys-fix/sort-keys-fix */\n const settings = {\n // All rules\n ignorePrivate: Boolean(context.settings.jsdoc?.ignorePrivate),\n maxLines: Number(context.settings.jsdoc?.maxLines ?? 1),\n minLines: Number(context.settings.jsdoc?.minLines ?? 0),\n\n // `check-tag-names` and many returns/param rules\n tagNamePreference: context.settings.jsdoc?.tagNamePreference ?? {},\n\n // `check-types` and `no-undefined-types`\n preferredTypes: context.settings.jsdoc?.preferredTypes ?? {},\n\n // `require-param`, `require-description`, `require-example`, `require-returns`\n overrideReplacesDocs: context.settings.jsdoc?.overrideReplacesDocs,\n implementsReplacesDocs: context.settings.jsdoc?.implementsReplacesDocs,\n augmentsExtendsReplacesDocs: context.settings.jsdoc?.augmentsExtendsReplacesDocs,\n\n // Many rules, e.g., `check-tag-names`\n mode: context.settings.jsdoc?.mode ?? 'jsdoc',\n };\n /* eslint-enable sort-keys-fix/sort-keys-fix */\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\nconst iterate = (\n ruleConfig, context, lines, jsdocNode, node, settings,\n sourceCode, iterator, state, iteratingAll,\n) => {\n const sourceLine = lines[jsdocNode.loc.start.line - 1];\n const indent = sourceLine.charAt(0).repeat(jsdocNode.loc.start.column);\n const jsdoc = parseComment(jsdocNode, indent, !ruleConfig.noTrim);\n const report = makeReport(context, jsdocNode);\n\n const utils = getUtils(\n node,\n jsdoc,\n jsdocNode,\n settings,\n report,\n context,\n iteratingAll,\n ruleConfig,\n );\n\n if (\n settings.ignorePrivate &&\n !ruleConfig.checkPrivate &&\n (utils.hasTag('private') || _.filter(jsdoc.tags, {\n tag: 'access',\n }).some(({description}) => {\n return description === 'private';\n }))\n ) {\n return;\n }\n\n iterator({\n context,\n globalState,\n indent,\n iteratingAll,\n jsdoc,\n jsdocNode,\n node,\n report,\n settings,\n sourceCode,\n state,\n utils,\n });\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 const trackedJsdocs = [];\n\n const callIterator = (context, node, jsdocNodes, state, lastCall) => {\n const sourceCode = context.getSourceCode();\n const settings = getSettings(context);\n const {lines} = sourceCode;\n\n const utils = getBasicUtils(context, settings);\n jsdocNodes.forEach((jsdocNode) => {\n if (!(/^\\/\\*\\*\\s/).test(sourceCode.getText(jsdocNode))) {\n return;\n }\n iterate(\n ruleConfig, context, lines, jsdocNode, node,\n settings, sourceCode, iterator,\n state, true,\n );\n });\n if (lastCall && ruleConfig.exit) {\n ruleConfig.exit({\n context,\n state,\n utils,\n });\n }\n };\n\n return {\n create (context) {\n const sourceCode = context.getSourceCode();\n const settings = getSettings(context);\n const state = {};\n\n return {\n '*:not(Program)' (node) {\n const reducedNode = getReducedASTNode(node, sourceCode);\n\n if (node !== reducedNode) {\n return;\n }\n\n const comment = getJSDocComment(sourceCode, node, settings);\n if (trackedJsdocs.includes(comment)) {\n return;\n }\n if (!comment) {\n if (ruleConfig.nonComment) {\n ruleConfig.nonComment({\n node,\n state,\n });\n }\n\n return;\n }\n\n trackedJsdocs.push(comment);\n callIterator(context, node, [comment], state);\n },\n 'Program:exit' () {\n const allComments = sourceCode.getAllComments();\n const untrackedJSdoc = allComments.filter((node) => {\n return !trackedJsdocs.includes(node);\n });\n\n callIterator(context, null, untrackedJSdoc, state, true);\n },\n };\n },\n meta: ruleConfig.meta,\n };\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 checkFile = (iterator, ruleConfig) => {\n return {\n create (context) {\n const sourceCode = context.getSourceCode();\n const settings = getSettings(context);\n\n return {\n 'Program:exit' () {\n const allComments = sourceCode.getAllComments();\n const {lines} = sourceCode;\n const utils = getBasicUtils(context, settings);\n\n iterator({\n allComments,\n context,\n lines,\n makeReport,\n settings,\n sourceCode,\n utils,\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 = 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.checkFile) {\n return checkFile(iterator, ruleConfig);\n }\n\n if (ruleConfig.iterateAllJsdocs) {\n return iterateAllJsdocs(iterator, ruleConfig);\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 let contexts;\n if (ruleConfig.contextDefaults) {\n contexts = jsdocUtils.enforcedContexts(context, ruleConfig.contextDefaults);\n if (contexts.includes('any')) {\n return iterateAllJsdocs(iterator, ruleConfig).create(context);\n }\n }\n\n const sourceCode = context.getSourceCode();\n const settings = getSettings(context);\n const {lines} = sourceCode;\n\n const checkJsdoc = (node) => {\n const jsdocNode = getJSDocComment(sourceCode, node, settings);\n\n if (!jsdocNode) {\n return;\n }\n\n iterate(\n ruleConfig, context, lines, jsdocNode, node,\n settings, sourceCode, iterator,\n );\n };\n\n if (ruleConfig.contextDefaults) {\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":["globalState","Map","skipSeeLink","parser","str","data","tag","test","parseComment","commentNode","indent","trim","value","parsers","commentParser","PARSERS","parse_tag","includes","parse_type","parse_name","errors","length","result","match","description","undefined","source","getBasicUtils","context","tagNamePreference","mode","utils","reportSettings","message","report","loc","start","column","line","getPreferredTagNameObject","tagName","ret","jsdocUtils","getPreferredTagName","isObject","replacement","blocked","getUtils","node","jsdoc","jsdocNode","settings","iteratingAll","ruleConfig","ancestors","getAncestors","sourceCode","getSourceCode","overrideReplacesDocs","implementsReplacesDocs","augmentsExtendsReplacesDocs","maxLines","minLines","isIteratingFunction","type","isVirtualFunction","hasATag","stringify","tagBlock","getIndent","text","getText","noTrim","lastTag","tags","replace","slice","reportJSDoc","msg","handler","fixer","replaceText","flattenRoots","params","getFunctionParameterNames","isConstructor","kind","parent","isGetter","isSetter","getJsdocTagsDeep","name","skipReportingBlockedTag","allowObjectReturn","defaultMessage","hasTag","getTags","isValidTag","definedTags","hasSchemaOption","prop","schemaProperties","meta","schema","properties","options","default","avoidDocs","classHasTag","exemptedBy","getPresentTags","tagMustHaveEitherTypeOrNamePosition","tagMightHaveEitherTypeOrNamePosition","tagMustHaveNamePosition","tagMightHaveNamePosition","tagMustHaveTypePosition","tagMightHaveTypePosition","isNamepathDefiningTag","hasDefinedTypeReturnTag","hasReturnValue","hasThrowValue","isAsync","async","filterTags","item","tagList","filter","getTagsByType","hasOptionTag","Boolean","getClassNode","reverse","find","getClassJsdoc","classNode","classJsdocNode","repeat","classJsdoc","forEachPreferredTag","arrayHandler","targetTagName","matchingJsdocTags","_","forEach","matchingJsdocTag","getSettings","ignorePrivate","Number","preferredTypes","parserPath","makeReport","fix","jsdocLoc","lineNumber","end","colNumber","iterate","lines","iterator","state","sourceLine","charAt","checkPrivate","some","iterateAllJsdocs","trackedJsdocs","callIterator","jsdocNodes","lastCall","exit","create","reducedNode","comment","nonComment","push","allComments","getAllComments","untrackedJSdoc","checkFile","iterateJsdoc","metaType","TypeError","contexts","contextDefaults","enforcedContexts","checkJsdoc","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, getReducedASTNode} from './eslint/getJSDocComment';\n\nconst globalState = new Map();\n\nconst skipSeeLink = (parser) => {\n return (str, data) => {\n if (data.tag === 'see' && (/\\{@link.+?\\}/u).test(str)) {\n return null;\n }\n\n return parser(str, data);\n };\n};\n\n/**\n *\n * @param {object} commentNode\n * @param {string} indent Whitespace\n * @param {boolean} [trim=true]\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 skipSeeLink(\n (str, data) => {\n if (['default', 'defaultvalue'].includes(data.tag)) {\n return null;\n }\n\n return commentParser.PARSERS.parse_type(str, data);\n },\n ),\n skipSeeLink(\n (str, data) => {\n if ([\n 'example', 'return', 'returns', 'throws', 'exception',\n 'access', 'version', 'since', 'license', 'author',\n 'default', 'defaultvalue',\n ].includes(data.tag)) {\n return null;\n }\n\n return commentParser.PARSERS.parse_name(str, data);\n },\n ),\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)+)?/u);\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 getBasicUtils = (context, {tagNamePreference, mode}) => {\n const utils = {};\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 utils.getPreferredTagNameObject = ({tagName}) => {\n const ret = jsdocUtils.getPreferredTagName(context, mode, tagName, tagNamePreference);\n const isObject = ret && typeof ret === 'object';\n if (ret === false || isObject && !ret.replacement) {\n return {\n blocked: true,\n tagName,\n };\n }\n\n return ret;\n };\n\n return utils;\n};\n\nconst getUtils = (\n node,\n jsdoc,\n jsdocNode,\n settings,\n report,\n context,\n iteratingAll,\n ruleConfig,\n) => {\n const ancestors = context.getAncestors();\n const sourceCode = context.getSourceCode();\n\n const utils = getBasicUtils(context, settings);\n\n const {\n tagNamePreference,\n overrideReplacesDocs,\n implementsReplacesDocs,\n augmentsExtendsReplacesDocs,\n maxLines,\n minLines,\n mode,\n } = settings;\n\n utils.isIteratingFunction = () => {\n return !iteratingAll || [\n 'MethodDefinition',\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n ].includes(node && node.type);\n };\n\n utils.isVirtualFunction = () => {\n return iteratingAll && utils.hasATag(['callback', 'function', 'func', 'method']);\n };\n\n utils.stringify = (tagBlock, tag) => {\n const indent = tag ?\n jsdocUtils.getIndent({\n text: sourceCode.getText(\n tag,\n tag.loc.start.column,\n ),\n }) :\n jsdocUtils.getIndent(sourceCode);\n\n if (ruleConfig.noTrim) {\n const lastTag = tagBlock.tags[tagBlock.tags.length - 1];\n lastTag.description = lastTag.description.replace(/\\n$/, '');\n }\n\n return commentStringify([tagBlock], {indent}).slice(indent.length - 1);\n };\n\n utils.reportJSDoc = (msg, tag, handler) => {\n report(msg, handler ? (fixer) => {\n handler();\n const replacement = utils.stringify(jsdoc, node);\n\n return fixer.replaceText(jsdocNode, replacement);\n } : null, tag);\n };\n\n utils.flattenRoots = (params) => {\n return jsdocUtils.flattenRoots(params);\n };\n\n utils.getFunctionParameterNames = () => {\n return jsdocUtils.getFunctionParameterNames(node);\n };\n\n utils.isConstructor = () => {\n return node?.type === 'MethodDefinition' && node.kind === 'constructor' ||\n node?.parent?.kind === 'constructor';\n };\n\n utils.isGetter = () => {\n return node && node.parent.kind === 'get';\n };\n\n utils.isSetter = () => {\n return node && node.parent.kind === 'set';\n };\n\n utils.getJsdocTagsDeep = (tagName) => {\n const name = utils.getPreferredTagName({tagName});\n if (!name) {\n return false;\n }\n\n return jsdocUtils.getJsdocTagsDeep(jsdoc, name);\n };\n\n utils.getPreferredTagName = ({tagName, skipReportingBlockedTag = false, allowObjectReturn = false, defaultMessage = `Unexpected tag \\`@${tagName}\\``}) => {\n const ret = jsdocUtils.getPreferredTagName(context, mode, 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(context, mode, 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 const hasSchemaOption = (prop) => {\n const schemaProperties = ruleConfig.meta.schema[0].properties;\n\n return context.options[0]?.[prop] ??\n (schemaProperties[prop] && schemaProperties[prop].default);\n };\n\n // eslint-disable-next-line complexity\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 augmentsExtendsReplacesDocs &&\n (utils.hasATag(['augments', 'extends']) ||\n utils.classHasTag('augments') ||\n utils.classHasTag('extends'))) {\n return true;\n }\n\n if (\n !hasSchemaOption('checkConstructors') &&\n (\n utils.isConstructor() ||\n utils.hasATag([\n 'class',\n 'constructor',\n ])) ||\n !hasSchemaOption('checkGetters') &&\n utils.isGetter() ||\n !hasSchemaOption('checkSetters') &&\n utils.isSetter()) {\n return true;\n }\n\n const exemptedBy = context.options[0]?.exemptedBy ?? [\n 'inheritDoc',\n ...mode === 'closure' ? [] : ['inheritdoc'],\n ];\n if (exemptedBy.length && utils.getPresentTags(exemptedBy).length) {\n return true;\n }\n\n return false;\n };\n\n utils.tagMustHaveEitherTypeOrNamePosition = (tagName) => {\n return jsdocUtils.tagMustHaveEitherTypeOrNamePosition(tagName);\n };\n\n utils.tagMightHaveEitherTypeOrNamePosition = (tagName) => {\n return jsdocUtils.tagMightHaveEitherTypeOrNamePosition(mode, tagName);\n };\n\n utils.tagMustHaveNamePosition = (tagName) => {\n return jsdocUtils.tagMustHaveNamePosition(tagName);\n };\n\n utils.tagMightHaveNamePosition = (tagName) => {\n return jsdocUtils.tagMightHaveNamePosition(mode, tagName);\n };\n\n utils.tagMustHaveTypePosition = (tagName) => {\n return jsdocUtils.tagMustHaveTypePosition(mode, tagName);\n };\n\n utils.tagMightHaveTypePosition = (tagName) => {\n return jsdocUtils.tagMightHaveTypePosition(mode, tagName);\n };\n\n utils.isNamepathDefiningTag = (tagName) => {\n return jsdocUtils.isNamepathDefiningTag(mode, tagName);\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.hasThrowValue = () => {\n return jsdocUtils.hasThrowValue(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(context, mode, tags, tagNamePreference);\n };\n\n utils.hasOptionTag = (tagName) => {\n const {tags} = context.options[0] ?? {};\n\n return Boolean(tags && tags.includes(tagName));\n };\n\n utils.getClassNode = () => {\n return [...ancestors, node].reverse().find((parent) => {\n return parent && ['ClassDeclaration', 'ClassExpression'].includes(parent.type);\n }) || null;\n };\n\n utils.getClassJsdoc = () => {\n const classNode = utils.getClassNode();\n\n if (!classNode) {\n return null;\n }\n\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 Boolean(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 return utils;\n};\n\nconst getSettings = (context) => {\n /* eslint-disable sort-keys-fix/sort-keys-fix */\n const settings = {\n // All rules\n ignorePrivate: Boolean(context.settings.jsdoc?.ignorePrivate),\n maxLines: Number(context.settings.jsdoc?.maxLines ?? 1),\n minLines: Number(context.settings.jsdoc?.minLines ?? 0),\n\n // `check-tag-names` and many returns/param rules\n tagNamePreference: context.settings.jsdoc?.tagNamePreference ?? {},\n\n // `check-types` and `no-undefined-types`\n preferredTypes: context.settings.jsdoc?.preferredTypes ?? {},\n\n // `require-param`, `require-description`, `require-example`, `require-returns`\n overrideReplacesDocs: context.settings.jsdoc?.overrideReplacesDocs,\n implementsReplacesDocs: context.settings.jsdoc?.implementsReplacesDocs,\n augmentsExtendsReplacesDocs: context.settings.jsdoc?.augmentsExtendsReplacesDocs,\n\n // Many rules, e.g., `check-tag-names`\n mode: context.settings.jsdoc?.mode ??\n (context.parserPath.includes('@typescript-eslint') ? 'typescript' : 'jsdoc'),\n };\n /* eslint-enable sort-keys-fix/sort-keys-fix */\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\nconst iterate = (\n ruleConfig, context, lines, jsdocNode, node, settings,\n sourceCode, iterator, state, iteratingAll,\n) => {\n const sourceLine = lines[jsdocNode.loc.start.line - 1];\n const indent = sourceLine.charAt(0).repeat(jsdocNode.loc.start.column);\n const jsdoc = parseComment(jsdocNode, indent, !ruleConfig.noTrim);\n const report = makeReport(context, jsdocNode);\n\n const utils = getUtils(\n node,\n jsdoc,\n jsdocNode,\n settings,\n report,\n context,\n iteratingAll,\n ruleConfig,\n );\n\n if (\n settings.ignorePrivate &&\n !ruleConfig.checkPrivate &&\n (utils.hasTag('private') || _.filter(jsdoc.tags, {\n tag: 'access',\n }).some(({description}) => {\n return description === 'private';\n }))\n ) {\n return;\n }\n\n iterator({\n context,\n globalState,\n indent,\n iteratingAll,\n jsdoc,\n jsdocNode,\n node,\n report,\n settings,\n sourceCode,\n state,\n utils,\n });\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 const trackedJsdocs = [];\n\n const callIterator = (context, node, jsdocNodes, state, lastCall) => {\n const sourceCode = context.getSourceCode();\n const settings = getSettings(context);\n const {lines} = sourceCode;\n\n const utils = getBasicUtils(context, settings);\n jsdocNodes.forEach((jsdocNode) => {\n if (!(/^\\/\\*\\*\\s/).test(sourceCode.getText(jsdocNode))) {\n return;\n }\n iterate(\n ruleConfig, context, lines, jsdocNode, node,\n settings, sourceCode, iterator,\n state, true,\n );\n });\n if (lastCall && ruleConfig.exit) {\n ruleConfig.exit({\n context,\n state,\n utils,\n });\n }\n };\n\n return {\n create (context) {\n const sourceCode = context.getSourceCode();\n const settings = getSettings(context);\n const state = {};\n\n return {\n '*:not(Program)' (node) {\n const reducedNode = getReducedASTNode(node, sourceCode);\n\n if (node !== reducedNode) {\n return;\n }\n\n const comment = getJSDocComment(sourceCode, node, settings);\n if (trackedJsdocs.includes(comment)) {\n return;\n }\n if (!comment) {\n if (ruleConfig.nonComment) {\n ruleConfig.nonComment({\n node,\n state,\n });\n }\n\n return;\n }\n\n trackedJsdocs.push(comment);\n callIterator(context, node, [comment], state);\n },\n 'Program:exit' () {\n const allComments = sourceCode.getAllComments();\n const untrackedJSdoc = allComments.filter((node) => {\n return !trackedJsdocs.includes(node);\n });\n\n callIterator(context, null, untrackedJSdoc, state, true);\n },\n };\n },\n meta: ruleConfig.meta,\n };\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 checkFile = (iterator, ruleConfig) => {\n return {\n create (context) {\n const sourceCode = context.getSourceCode();\n const settings = getSettings(context);\n\n return {\n 'Program:exit' () {\n const allComments = sourceCode.getAllComments();\n const {lines} = sourceCode;\n const utils = getBasicUtils(context, settings);\n\n iterator({\n allComments,\n context,\n lines,\n makeReport,\n settings,\n sourceCode,\n utils,\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 = 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.checkFile) {\n return checkFile(iterator, ruleConfig);\n }\n\n if (ruleConfig.iterateAllJsdocs) {\n return iterateAllJsdocs(iterator, ruleConfig);\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 let contexts;\n if (ruleConfig.contextDefaults) {\n contexts = jsdocUtils.enforcedContexts(context, ruleConfig.contextDefaults);\n if (contexts.includes('any')) {\n return iterateAllJsdocs(iterator, ruleConfig).create(context);\n }\n }\n\n const sourceCode = context.getSourceCode();\n const settings = getSettings(context);\n const {lines} = sourceCode;\n\n const checkJsdoc = (node) => {\n const jsdocNode = getJSDocComment(sourceCode, node, settings);\n\n if (!jsdocNode) {\n return;\n }\n\n iterate(\n ruleConfig, context, lines, jsdocNode, node,\n settings, sourceCode, iterator,\n );\n };\n\n if (ruleConfig.contextDefaults) {\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"}
@@ -363,8 +363,9 @@ const typescriptNamepathDefiningTags = new Set([...closureNamepathDefiningTags,
363
363
  const namepathDefiningTags = new Set([...typescriptNamepathDefiningTags, // Optional "name" and no curly brackets
364
364
  // this block impacts `no-undefined-types` and `valid-types` (search for
365
365
  // "isNamepathDefiningTag|tagMightHaveNamePosition|tagMightHaveEitherTypeOrNamePosition")
366
- 'module']);
367
- const tagsWithOptionalNamePositionBase = new Set(['param', // `borrows` has a different format, however, so needs special parsing;
366
+ 'module']); // These *reference* names/namepaths and do not define them
367
+
368
+ const tagsWithOptionalNamePositionBase = new Set([// `borrows` has a different format, however, so needs special parsing;
368
369
  // seems to require both, and as "namepath"'s
369
370
  'borrows', // Signature seems to require a "name" (of an event) and no counter-examples
370
371
  'emits', 'fires', 'listens', // Signature seems to require a "namepath" (and no counter-examples)
@@ -380,7 +381,10 @@ const typescriptTagsWithOptionalNamePosition = new Set([...typescriptNamepathDef
380
381
  const closureTagsWithOptionalNamePosition = new Set([...closureNamepathDefiningTags, ...tagsWithOptionalNamePositionBase]); // Todo: `@link` seems to require a namepath OR URL and might be checked as such.
381
382
  // The doc signature of `event` seems to require a "name"
382
383
 
383
- const tagsWithMandatoryNamePosition = new Set([// "name" (and a special syntax for the `external` name)
384
+ const tagsWithMandatoryNamePosition = new Set([// Though no signature provided requiring, per https://jsdoc.app/tags-param.html:
385
+ // "The @param tag requires you to specify the name of the parameter you are documenting."
386
+ 'param', 'arg', 'argument', // No docs indicate required, but since parallel to `param`, we treat as such:
387
+ 'property', 'prop', // "name" (and a special syntax for the `external` name)
384
388
  'external', 'host', // "namepath"
385
389
  'callback', 'name', 'typedef']);
386
390
  const tagsWithMandatoryTypeOrNamePosition = new Set([// "namepath"
@@ -515,11 +519,12 @@ const hasReturnValue = node => {
515
519
  * Checks if a node has a throws statement.
516
520
  *
517
521
  * @param {object} node
522
+ * @param {boolean} innerFunction
518
523
  * @returns {boolean}
519
524
  */
520
525
 
521
526
 
522
- const hasThrowValue = node => {
527
+ const hasThrowValue = (node, innerFunction) => {
523
528
  if (!node) {
524
529
  return false;
525
530
  }
@@ -529,7 +534,7 @@ const hasThrowValue = node => {
529
534
  case 'FunctionDeclaration':
530
535
  case 'ArrowFunctionExpression':
531
536
  {
532
- return node.expression || hasThrowValue(node.body);
537
+ return !innerFunction && hasThrowValue(node.body, true);
533
538
  }
534
539
 
535
540
  case 'BlockStatement':
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/jsdocUtils.js"],"names":["flattenRoots","params","root","hasRestElement","hasPropertyRest","rests","names","reduce","acc","cur","Array","isArray","nms","flattened","inner","filter","Boolean","push","concat","isRestProperty","restElement","name","getPropertiesFromPropertySignature","propSignature","type","undefined","typeAnnotation","key","members","map","member","getFunctionParameterNames","functionNode","getParamName","param","isProperty","_","has","left","propertyNames","annotationParamName","properties","roots","prop","value","elements","idx","includes","argument","parameter","Error","getJsdocTagsDeep","jsdoc","targetTagName","ret","tags","forEach","tag","modeWarnSettings","getTagNamesForMode","mode","context","jsdocTags","typeScriptTags","closureTags","hasBeenWarned","report","loc","start","column","line","message","markSettingAsWarned","getPreferredTagName","tagPreference","prefValues","Object","values","some","prefVal","replacement","tagPreferenceFixed","mapKeys","replace","tagNames","preferredTagName","entries","find","aliases","isValidTag","definedTags","validTagNames","keys","flatten","additionalTags","allTags","hasTag","targetTagLower","toLowerCase","doc","hasATag","targetTagNames","hasDefinedTypeReturnTag","tagType","trim","tagsWithMandatoryTypePosition","Set","tagsWithMandatoryTypePositionClosure","tagsWithOptionalTypePosition","tagsWithOptionalTypePositionClosure","closureNamepathDefiningTags","typescriptNamepathDefiningTags","namepathDefiningTags","tagsWithOptionalNamePositionBase","tagsWithOptionalNamePosition","typescriptTagsWithOptionalNamePosition","closureTagsWithOptionalNamePosition","tagsWithMandatoryNamePosition","tagsWithMandatoryTypeOrNamePosition","isNamepathDefiningTag","tagName","tagMightHaveTypePosition","tagMustHaveTypePosition","tagMightHaveNamePosition","tagMustHaveNamePosition","tagMightHaveEitherTypeOrNamePosition","tagMustHaveEitherTypeOrNamePosition","hasReturnValue","node","expression","body","bodyNode","consequent","alternate","block","handler","finalizer","cases","someCase","hasThrowValue","parseClosureTemplateTag","description","split","enforcedContexts","defaultContexts","contexts","options","getContextObject","checkJsdoc","filterTags","tagsWithNamesAndDescriptions","getTagsByType","descName","tagsWithoutNames","tagsWithNames","tagWithName","getIndent","sourceCode","indent","text","match","charAt"],"mappings":"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","sourcesContent":["import _ from 'lodash';\nimport {jsdocTags, closureTags, typeScriptTags} from './tagNames';\nimport WarnSettings from './WarnSettings';\n\ntype ParserMode = \"jsdoc\"|\"typescript\"|\"closure\";\n\n// Given a nested array of property names, reduce them to a single array,\n// appending the name of the root element along the way if present.\nconst flattenRoots = (params, root = '') => {\n let hasRestElement = false;\n let hasPropertyRest = false;\n const rests = [];\n\n // eslint-disable-next-line unicorn/no-reduce\n const names = params.reduce((acc, cur) => {\n if (Array.isArray(cur)) {\n let nms;\n if (Array.isArray(cur[1])) {\n nms = cur[1];\n } else {\n if (cur[1].hasRestElement) {\n hasRestElement = true;\n }\n if (cur[1].hasPropertyRest) {\n hasPropertyRest = true;\n }\n nms = cur[1].names;\n }\n\n const flattened = flattenRoots(nms, root ? `${root}.${cur[0]}` : cur[0]);\n if (flattened.hasRestElement) {\n hasRestElement = true;\n }\n if (flattened.hasPropertyRest) {\n hasPropertyRest = true;\n }\n const inner = [\n root ? `${root}.${cur[0]}` : cur[0],\n ...flattened.names,\n ].filter(Boolean);\n rests.push(false, ...flattened.rests);\n\n return acc.concat(inner);\n }\n if (typeof cur === 'object') {\n if (cur.isRestProperty) {\n hasPropertyRest = true;\n rests.push(true);\n } else {\n rests.push(false);\n }\n if (cur.restElement) {\n hasRestElement = true;\n }\n acc.push(root ? `${root}.${cur.name}` : cur.name);\n } else if (typeof cur !== 'undefined') {\n rests.push(false);\n acc.push(root ? `${root}.${cur}` : cur);\n }\n\n return acc;\n }, []);\n\n return {\n hasPropertyRest,\n hasRestElement,\n names,\n rests,\n };\n};\n\ntype T = string | [?string, T];\nconst getPropertiesFromPropertySignature = (propSignature): T => {\n if (propSignature.type === 'TSIndexSignature' || propSignature.type === 'TSConstructSignatureDeclaration') {\n return undefined;\n }\n if (propSignature.typeAnnotation && propSignature.typeAnnotation.typeAnnotation.type === 'TSTypeLiteral') {\n return [propSignature.key.name, propSignature.typeAnnotation.typeAnnotation.members.map((member) => {\n return getPropertiesFromPropertySignature(member);\n })];\n }\n\n return propSignature.key.name;\n};\n\nconst getFunctionParameterNames = (functionNode : Object) : Array<T> => {\n // eslint-disable-next-line complexity\n const getParamName = (param, isProperty) => {\n if (_.has(param, 'typeAnnotation') || _.has(param, 'left.typeAnnotation')) {\n const typeAnnotation = _.has(param, 'left.typeAnnotation') ? param.left.typeAnnotation : param.typeAnnotation;\n if (typeAnnotation.typeAnnotation.type === 'TSTypeLiteral') {\n const propertyNames = typeAnnotation.typeAnnotation.members.map((member) => {\n return getPropertiesFromPropertySignature(member);\n });\n const flattened = {\n ...flattenRoots(propertyNames),\n annotationParamName: param.name,\n };\n if (_.has(param, 'name') || _.has(param, 'left.name')) {\n return [_.has(param, 'left.name') ? param.left.name : param.name, flattened];\n }\n\n return [undefined, flattened];\n }\n }\n\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' || param.left?.type === 'ObjectPattern') {\n const properties = param.properties || param.left?.properties;\n const roots = properties.map((prop) => {\n return getParamName(prop, true);\n });\n\n return [undefined, flattenRoots(roots)];\n }\n\n if (param.type === 'Property') {\n if (param.value.type === 'ObjectPattern') {\n return [param.key.name, param.value.properties.map((prop) => {\n return getParamName(prop, isProperty);\n })];\n }\n\n // As function parameters, these do not allow dynamic properties, etc.\n /* istanbul ignore else */\n if (param.key.type === 'Identifier') {\n return param.key.name;\n }\n }\n\n if (param.type === 'ArrayPattern' || param.left?.type === 'ArrayPattern') {\n const elements = param.elements || param.left?.elements;\n const roots = elements.map((prop, idx) => {\n return {\n name: idx,\n restElement: prop.type === 'RestElement',\n };\n });\n\n return [undefined, flattenRoots(roots)];\n }\n\n if (['RestElement', 'ExperimentalRestProperty'].includes(param.type)) {\n return {\n isRestProperty: isProperty,\n name: param.argument.name,\n restElement: true,\n };\n }\n\n if (param.type === 'TSParameterProperty') {\n return getParamName(param.parameter, true);\n }\n\n throw new Error('Unsupported function signature format.');\n };\n\n return functionNode.params.map((param) => {\n return getParamName(param);\n });\n};\n\n/**\n * Gets all names of the target type, including those that refer to a path, e.g.\n * \"@param foo; @param foo.bar\".\n */\nconst getJsdocTagsDeep = (jsdoc : Object, targetTagName : string) : Array<Object> => {\n const ret = [];\n (jsdoc.tags || []).forEach(({name, tag, type}, idx) => {\n if (tag !== targetTagName) {\n return;\n }\n ret.push({\n idx,\n name,\n type,\n });\n });\n\n return ret;\n};\n\nconst modeWarnSettings = WarnSettings();\n\nconst getTagNamesForMode = (mode, context) => {\n switch (mode) {\n case 'jsdoc':\n return jsdocTags;\n case 'typescript':\n return typeScriptTags;\n case 'closure': case 'permissive':\n return closureTags;\n default:\n if (!modeWarnSettings.hasBeenWarned(context, 'mode')) {\n context.report({\n loc: {\n start: {\n column: 1,\n line: 1,\n },\n },\n message: `Unrecognized value \\`${mode}\\` for \\`settings.jsdoc.mode\\`.`,\n });\n modeWarnSettings.markSettingAsWarned(context, 'mode');\n }\n\n // We'll avoid breaking too many other rules\n return jsdocTags;\n }\n};\n\nconst getPreferredTagName = (\n context,\n mode : ParserMode,\n name : string,\n tagPreference : Object = {},\n) : string|Object => {\n const prefValues = Object.values(tagPreference);\n if (prefValues.includes(name) || prefValues.some((prefVal) => {\n return prefVal && typeof prefVal === 'object' && prefVal.replacement === name;\n })) {\n return name;\n }\n\n // Allow keys to have a 'tag ' prefix to avoid upstream bug in ESLint\n // that disallows keys that conflict with Object.prototype,\n // e.g. 'tag constructor' for 'constructor':\n // https://github.com/eslint/eslint/issues/13289\n // https://github.com/gajus/eslint-plugin-jsdoc/issues/537\n const tagPreferenceFixed = _.mapKeys(tagPreference, (value, key) => {\n return key.replace('tag ', '');\n });\n\n if (_.has(tagPreferenceFixed, name)) {\n return tagPreferenceFixed[name];\n }\n\n const tagNames = getTagNamesForMode(mode, context);\n\n const preferredTagName = Object.entries(tagNames).find(([, aliases]) => {\n return aliases.includes(name);\n })?.[0];\n if (preferredTagName) {\n return preferredTagName;\n }\n\n return name;\n};\n\nconst isValidTag = (\n context,\n mode : ParserMode,\n name : string,\n definedTags : Array,\n) : boolean => {\n const tagNames = getTagNamesForMode(mode, context);\n const validTagNames = Object.keys(tagNames).concat(_.flatten(Object.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 tagsWithMandatoryTypePosition = new Set([\n // These both show curly brackets in the doc signature and examples\n // \"typeExpression\"\n 'implements',\n\n // \"typeName\"\n 'type',\n]);\n\nconst tagsWithMandatoryTypePositionClosure = new Set([\n ...tagsWithMandatoryTypePosition,\n 'this',\n 'define',\n]);\n\n// All of these have a signature with \"type\" except for\n// `augments`/`extends` (\"namepath\")\n// `param`/`arg`/`argument` (no signature)\n// `property`/`prop` (no signature)\n// `modifies` (undocumented)\nconst tagsWithOptionalTypePosition = new Set([\n // These have the example showing curly brackets but not in their doc signature, e.g.: https://jsdoc.app/tags-enum.html\n 'enum',\n 'member', 'var',\n\n 'typedef',\n\n // These do not show curly brackets in either the signature or examples\n 'augments', 'extends',\n\n 'class', 'constructor',\n 'constant', 'const',\n\n // These show the signature with curly brackets but not in the example\n 'module',\n 'namespace',\n\n // These have no formal signature in the docs but show curly brackets\n // in the examples\n 'param', 'arg', 'argument',\n 'property', 'prop',\n\n // These show curly brackets in the signature and in the examples\n 'returns', 'return',\n 'throws', 'exception',\n 'yields', 'yield',\n\n // Has no documentation, but test example has curly brackets, and\n // \"name\" would be suggested rather than \"namepath\" based on example; not\n // sure if name is required\n 'modifies',\n]);\n\nconst tagsWithOptionalTypePositionClosure = new Set([\n ...tagsWithOptionalTypePosition,\n\n 'export',\n\n // Shows the signature with curly brackets but not in the example\n // \"typeExpression\"\n 'package',\n 'private',\n 'protected',\n\n // These do not show a signature nor show curly brackets in the example\n 'public',\n 'static',\n]);\n\n// None of these show as having curly brackets for their name/namepath\nconst closureNamepathDefiningTags = new Set([\n // These appear to require a \"name\" in their signature, albeit these\n // are somewhat different from other \"name\"'s (including as described\n // at https://jsdoc.app/about-namepaths.html )\n 'external', 'host',\n 'event',\n\n // These allow for \"name\"'s in their signature, but indicate as optional\n 'class', 'constructor',\n 'constant', 'const',\n 'function', 'func', 'method',\n 'member', 'var',\n 'mixin',\n 'namespace',\n\n // These seem to all require a \"namepath\" in their signatures (with no counter-examples)\n 'name',\n 'typedef',\n 'callback',\n]);\n\nconst typescriptNamepathDefiningTags = new Set([\n ...closureNamepathDefiningTags,\n\n // Allows for \"name\" in signature, but indicates as optional\n 'interface',\n]);\n\nconst namepathDefiningTags = new Set([\n ...typescriptNamepathDefiningTags,\n\n // Optional \"name\" and no curly brackets\n // this block impacts `no-undefined-types` and `valid-types` (search for\n // \"isNamepathDefiningTag|tagMightHaveNamePosition|tagMightHaveEitherTypeOrNamePosition\")\n 'module',\n]);\n\nconst tagsWithOptionalNamePositionBase = new Set([\n 'param',\n\n // `borrows` has a different format, however, so needs special parsing;\n // seems to require both, and as \"namepath\"'s\n 'borrows',\n\n // Signature seems to require a \"name\" (of an event) and no counter-examples\n 'emits', 'fires',\n 'listens',\n\n // Signature seems to require a \"namepath\" (and no counter-examples)\n 'alias',\n 'augments', 'extends',\n 'lends',\n 'this',\n\n // Signature seems to require a \"namepath\" (and no counter-examples),\n // though it allows an incomplete namepath ending with connecting symbol\n 'memberof', 'memberof!',\n\n // Signature seems to require a \"OtherObjectPath\" with no counter-examples\n 'mixes',\n\n // Signature allows for \"namepath\" or text\n 'see',\n]);\n\n// The following do not seem to allow curly brackets in their doc\n// signature or examples (besides `modifies` and `param`)\nconst tagsWithOptionalNamePosition = new Set([\n ...namepathDefiningTags,\n ...tagsWithOptionalNamePositionBase,\n]);\n\nconst typescriptTagsWithOptionalNamePosition = new Set([\n ...typescriptNamepathDefiningTags,\n ...tagsWithOptionalNamePositionBase,\n]);\n\nconst closureTagsWithOptionalNamePosition = new Set([\n ...closureNamepathDefiningTags,\n ...tagsWithOptionalNamePositionBase,\n]);\n\n// Todo: `@link` seems to require a namepath OR URL and might be checked as such.\n\n// The doc signature of `event` seems to require a \"name\"\nconst tagsWithMandatoryNamePosition = new Set([\n // \"name\" (and a special syntax for the `external` name)\n 'external', 'host',\n\n // \"namepath\"\n 'callback',\n 'name',\n 'typedef',\n]);\n\nconst tagsWithMandatoryTypeOrNamePosition = new Set([\n // \"namepath\"\n 'alias',\n 'augments', 'extends',\n 'borrows',\n 'lends',\n 'memberof', 'memberof!',\n 'name',\n 'this',\n 'typedef',\n\n // \"name\"\n 'external', 'host',\n\n // \"OtherObjectPath\"\n 'mixes',\n]);\n\nconst isNamepathDefiningTag = (mode, tagName) => {\n if (mode === 'closure') {\n return closureNamepathDefiningTags.has(tagName);\n }\n if (mode === 'typescript') {\n return typescriptNamepathDefiningTags.has(tagName);\n }\n\n return namepathDefiningTags.has(tagName);\n};\n\nconst tagMightHaveTypePosition = (mode, tag) => {\n if (mode === 'closure') {\n return tagsWithMandatoryTypePositionClosure.has(tag) ||\n tagsWithOptionalTypePositionClosure.has(tag);\n }\n\n return tagsWithMandatoryTypePosition.has(tag) ||\n tagsWithOptionalTypePosition.has(tag);\n};\n\nconst tagMustHaveTypePosition = (mode, tag) => {\n if (mode === 'closure') {\n return tagsWithMandatoryTypePositionClosure.has(tag);\n }\n\n return tagsWithMandatoryTypePosition.has(tag);\n};\n\nconst tagMightHaveNamePosition = (mode, tag) => {\n if (mode === 'closure') {\n return closureTagsWithOptionalNamePosition.has(tag);\n }\n if (mode === 'typescript') {\n return typescriptTagsWithOptionalNamePosition.has(tag);\n }\n\n return tagsWithOptionalNamePosition.has(tag);\n};\n\nconst tagMustHaveNamePosition = (tag) => {\n return tagsWithMandatoryNamePosition.has(tag);\n};\n\nconst tagMightHaveEitherTypeOrNamePosition = (mode, tag) => {\n return tagMightHaveTypePosition(mode, tag) || tagMightHaveNamePosition(mode, tag);\n};\n\nconst tagMustHaveEitherTypeOrNamePosition = (tag) => {\n return tagsWithMandatoryTypeOrNamePosition.has(tag);\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/**\n * Checks if a node has a throws statement.\n *\n * @param {object} node\n * @returns {boolean}\n */\nconst hasThrowValue = (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 || hasThrowValue(node.body);\n }\n case 'BlockStatement': {\n return node.body.some((bodyNode) => {\n return bodyNode.type !== 'FunctionDeclaration' && hasThrowValue(bodyNode);\n });\n }\n case 'WhileStatement':\n case 'DoWhileStatement':\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WithStatement': {\n return hasThrowValue(node.body);\n }\n case 'IfStatement': {\n return hasThrowValue(node.consequent) || hasThrowValue(node.alternate);\n }\n\n // We only consider it to throw an error if the catch or finally blocks throw an error.\n case 'TryStatement': {\n return hasThrowValue(node.handler && node.handler.body) ||\n hasThrowValue(node.finalizer);\n }\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some(hasThrowValue);\n },\n );\n }\n case 'ThrowStatement': {\n return true;\n }\n\n default: {\n return false;\n }\n }\n};\n\n/** @param {string} tag */\n/*\nconst isInlineTag = (tag) => {\n return /^(@link|@linkcode|@linkplain|@tutorial) /u.test(tag);\n};\n*/\n\n/**\n * Parses GCC Generic/Template types\n *\n * @see {https://github.com/google/closure-compiler/wiki/Generic-Types}\n * @param {JsDocTag} tag\n * @returns {Array<string>}\n */\nconst parseClosureTemplateTag = (tag) => {\n return (tag.name + ' ' + tag.description)\n .split(',')\n .map((type) => {\n return type.trim();\n });\n};\n\n/**\n * Checks user option for `contexts` array, defaulting to\n * contexts designated by the rule. Returns an array of\n * ESTree AST types, indicating allowable contexts.\n *\n * @param {*} context\n * @param {true|string[]} defaultContexts\n * @returns {string[]}\n */\nconst enforcedContexts = (context, defaultContexts) => {\n const {\n contexts = defaultContexts === true ? [\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n ] : defaultContexts,\n } = context.options[0] || {};\n\n return contexts;\n};\n\n/**\n * @param {string[]} contexts\n * @param {Function} checkJsdoc\n */\nconst getContextObject = (contexts, checkJsdoc) => {\n const properties = {};\n\n contexts.forEach((prop) => {\n if (typeof prop === 'object') {\n properties[prop.context] = checkJsdoc;\n } else {\n properties[prop] = checkJsdoc;\n }\n });\n\n return properties;\n};\n\nconst filterTags = (tags = [], filter) => {\n return tags.filter(filter);\n};\n\nconst tagsWithNamesAndDescriptions = new Set([\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 = (context, mode, tags, tagPreference) => {\n const descName = getPreferredTagName(context, mode, 'description', tagPreference);\n const tagsWithoutNames = [];\n const tagsWithNames = filterTags(tags, (tag) => {\n const {tag: tagName} = tag;\n const tagWithName = tagsWithNamesAndDescriptions.has(tagName);\n if (!tagWithName && tagName !== descName) {\n tagsWithoutNames.push(tag);\n }\n\n return tagWithName;\n });\n\n return {\n tagsWithNames,\n tagsWithoutNames,\n };\n};\n\nconst getIndent = (sourceCode) => {\n let indent = sourceCode.text.match(/^\\n*([ \\t]+)/u);\n indent = indent ? indent[1] + indent[1].charAt() : ' ';\n\n return indent;\n};\n\nexport default {\n enforcedContexts,\n filterTags,\n flattenRoots,\n getContextObject,\n getFunctionParameterNames,\n getIndent,\n getJsdocTagsDeep,\n getPreferredTagName,\n getTagsByType,\n hasATag,\n hasDefinedTypeReturnTag,\n hasReturnValue,\n hasTag,\n hasThrowValue,\n isNamepathDefiningTag,\n isValidTag,\n parseClosureTemplateTag,\n tagMightHaveEitherTypeOrNamePosition,\n tagMightHaveNamePosition,\n tagMightHaveTypePosition,\n tagMustHaveEitherTypeOrNamePosition,\n tagMustHaveNamePosition,\n tagMustHaveTypePosition,\n};\n"],"file":"jsdocUtils.js"}
1
+ {"version":3,"sources":["../src/jsdocUtils.js"],"names":["flattenRoots","params","root","hasRestElement","hasPropertyRest","rests","names","reduce","acc","cur","Array","isArray","nms","flattened","inner","filter","Boolean","push","concat","isRestProperty","restElement","name","getPropertiesFromPropertySignature","propSignature","type","undefined","typeAnnotation","key","members","map","member","getFunctionParameterNames","functionNode","getParamName","param","isProperty","_","has","left","propertyNames","annotationParamName","properties","roots","prop","value","elements","idx","includes","argument","parameter","Error","getJsdocTagsDeep","jsdoc","targetTagName","ret","tags","forEach","tag","modeWarnSettings","getTagNamesForMode","mode","context","jsdocTags","typeScriptTags","closureTags","hasBeenWarned","report","loc","start","column","line","message","markSettingAsWarned","getPreferredTagName","tagPreference","prefValues","Object","values","some","prefVal","replacement","tagPreferenceFixed","mapKeys","replace","tagNames","preferredTagName","entries","find","aliases","isValidTag","definedTags","validTagNames","keys","flatten","additionalTags","allTags","hasTag","targetTagLower","toLowerCase","doc","hasATag","targetTagNames","hasDefinedTypeReturnTag","tagType","trim","tagsWithMandatoryTypePosition","Set","tagsWithMandatoryTypePositionClosure","tagsWithOptionalTypePosition","tagsWithOptionalTypePositionClosure","closureNamepathDefiningTags","typescriptNamepathDefiningTags","namepathDefiningTags","tagsWithOptionalNamePositionBase","tagsWithOptionalNamePosition","typescriptTagsWithOptionalNamePosition","closureTagsWithOptionalNamePosition","tagsWithMandatoryNamePosition","tagsWithMandatoryTypeOrNamePosition","isNamepathDefiningTag","tagName","tagMightHaveTypePosition","tagMustHaveTypePosition","tagMightHaveNamePosition","tagMustHaveNamePosition","tagMightHaveEitherTypeOrNamePosition","tagMustHaveEitherTypeOrNamePosition","hasReturnValue","node","expression","body","bodyNode","consequent","alternate","block","handler","finalizer","cases","someCase","hasThrowValue","innerFunction","parseClosureTemplateTag","description","split","enforcedContexts","defaultContexts","contexts","options","getContextObject","checkJsdoc","filterTags","tagsWithNamesAndDescriptions","getTagsByType","descName","tagsWithoutNames","tagsWithNames","tagWithName","getIndent","sourceCode","indent","text","match","charAt"],"mappings":"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","sourcesContent":["import _ from 'lodash';\nimport {jsdocTags, closureTags, typeScriptTags} from './tagNames';\nimport WarnSettings from './WarnSettings';\n\ntype ParserMode = \"jsdoc\"|\"typescript\"|\"closure\";\n\n// Given a nested array of property names, reduce them to a single array,\n// appending the name of the root element along the way if present.\nconst flattenRoots = (params, root = '') => {\n let hasRestElement = false;\n let hasPropertyRest = false;\n const rests = [];\n\n // eslint-disable-next-line unicorn/no-reduce\n const names = params.reduce((acc, cur) => {\n if (Array.isArray(cur)) {\n let nms;\n if (Array.isArray(cur[1])) {\n nms = cur[1];\n } else {\n if (cur[1].hasRestElement) {\n hasRestElement = true;\n }\n if (cur[1].hasPropertyRest) {\n hasPropertyRest = true;\n }\n nms = cur[1].names;\n }\n\n const flattened = flattenRoots(nms, root ? `${root}.${cur[0]}` : cur[0]);\n if (flattened.hasRestElement) {\n hasRestElement = true;\n }\n if (flattened.hasPropertyRest) {\n hasPropertyRest = true;\n }\n const inner = [\n root ? `${root}.${cur[0]}` : cur[0],\n ...flattened.names,\n ].filter(Boolean);\n rests.push(false, ...flattened.rests);\n\n return acc.concat(inner);\n }\n if (typeof cur === 'object') {\n if (cur.isRestProperty) {\n hasPropertyRest = true;\n rests.push(true);\n } else {\n rests.push(false);\n }\n if (cur.restElement) {\n hasRestElement = true;\n }\n acc.push(root ? `${root}.${cur.name}` : cur.name);\n } else if (typeof cur !== 'undefined') {\n rests.push(false);\n acc.push(root ? `${root}.${cur}` : cur);\n }\n\n return acc;\n }, []);\n\n return {\n hasPropertyRest,\n hasRestElement,\n names,\n rests,\n };\n};\n\ntype T = string | [?string, T];\nconst getPropertiesFromPropertySignature = (propSignature): T => {\n if (propSignature.type === 'TSIndexSignature' || propSignature.type === 'TSConstructSignatureDeclaration') {\n return undefined;\n }\n if (propSignature.typeAnnotation && propSignature.typeAnnotation.typeAnnotation.type === 'TSTypeLiteral') {\n return [propSignature.key.name, propSignature.typeAnnotation.typeAnnotation.members.map((member) => {\n return getPropertiesFromPropertySignature(member);\n })];\n }\n\n return propSignature.key.name;\n};\n\nconst getFunctionParameterNames = (functionNode : Object) : Array<T> => {\n // eslint-disable-next-line complexity\n const getParamName = (param, isProperty) => {\n if (_.has(param, 'typeAnnotation') || _.has(param, 'left.typeAnnotation')) {\n const typeAnnotation = _.has(param, 'left.typeAnnotation') ? param.left.typeAnnotation : param.typeAnnotation;\n if (typeAnnotation.typeAnnotation.type === 'TSTypeLiteral') {\n const propertyNames = typeAnnotation.typeAnnotation.members.map((member) => {\n return getPropertiesFromPropertySignature(member);\n });\n const flattened = {\n ...flattenRoots(propertyNames),\n annotationParamName: param.name,\n };\n if (_.has(param, 'name') || _.has(param, 'left.name')) {\n return [_.has(param, 'left.name') ? param.left.name : param.name, flattened];\n }\n\n return [undefined, flattened];\n }\n }\n\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' || param.left?.type === 'ObjectPattern') {\n const properties = param.properties || param.left?.properties;\n const roots = properties.map((prop) => {\n return getParamName(prop, true);\n });\n\n return [undefined, flattenRoots(roots)];\n }\n\n if (param.type === 'Property') {\n if (param.value.type === 'ObjectPattern') {\n return [param.key.name, param.value.properties.map((prop) => {\n return getParamName(prop, isProperty);\n })];\n }\n\n // As function parameters, these do not allow dynamic properties, etc.\n /* istanbul ignore else */\n if (param.key.type === 'Identifier') {\n return param.key.name;\n }\n }\n\n if (param.type === 'ArrayPattern' || param.left?.type === 'ArrayPattern') {\n const elements = param.elements || param.left?.elements;\n const roots = elements.map((prop, idx) => {\n return {\n name: idx,\n restElement: prop.type === 'RestElement',\n };\n });\n\n return [undefined, flattenRoots(roots)];\n }\n\n if (['RestElement', 'ExperimentalRestProperty'].includes(param.type)) {\n return {\n isRestProperty: isProperty,\n name: param.argument.name,\n restElement: true,\n };\n }\n\n if (param.type === 'TSParameterProperty') {\n return getParamName(param.parameter, true);\n }\n\n throw new Error('Unsupported function signature format.');\n };\n\n return functionNode.params.map((param) => {\n return getParamName(param);\n });\n};\n\n/**\n * Gets all names of the target type, including those that refer to a path, e.g.\n * \"@param foo; @param foo.bar\".\n */\nconst getJsdocTagsDeep = (jsdoc : Object, targetTagName : string) : Array<Object> => {\n const ret = [];\n (jsdoc.tags || []).forEach(({name, tag, type}, idx) => {\n if (tag !== targetTagName) {\n return;\n }\n ret.push({\n idx,\n name,\n type,\n });\n });\n\n return ret;\n};\n\nconst modeWarnSettings = WarnSettings();\n\nconst getTagNamesForMode = (mode, context) => {\n switch (mode) {\n case 'jsdoc':\n return jsdocTags;\n case 'typescript':\n return typeScriptTags;\n case 'closure': case 'permissive':\n return closureTags;\n default:\n if (!modeWarnSettings.hasBeenWarned(context, 'mode')) {\n context.report({\n loc: {\n start: {\n column: 1,\n line: 1,\n },\n },\n message: `Unrecognized value \\`${mode}\\` for \\`settings.jsdoc.mode\\`.`,\n });\n modeWarnSettings.markSettingAsWarned(context, 'mode');\n }\n\n // We'll avoid breaking too many other rules\n return jsdocTags;\n }\n};\n\nconst getPreferredTagName = (\n context,\n mode : ParserMode,\n name : string,\n tagPreference : Object = {},\n) : string|Object => {\n const prefValues = Object.values(tagPreference);\n if (prefValues.includes(name) || prefValues.some((prefVal) => {\n return prefVal && typeof prefVal === 'object' && prefVal.replacement === name;\n })) {\n return name;\n }\n\n // Allow keys to have a 'tag ' prefix to avoid upstream bug in ESLint\n // that disallows keys that conflict with Object.prototype,\n // e.g. 'tag constructor' for 'constructor':\n // https://github.com/eslint/eslint/issues/13289\n // https://github.com/gajus/eslint-plugin-jsdoc/issues/537\n const tagPreferenceFixed = _.mapKeys(tagPreference, (value, key) => {\n return key.replace('tag ', '');\n });\n\n if (_.has(tagPreferenceFixed, name)) {\n return tagPreferenceFixed[name];\n }\n\n const tagNames = getTagNamesForMode(mode, context);\n\n const preferredTagName = Object.entries(tagNames).find(([, aliases]) => {\n return aliases.includes(name);\n })?.[0];\n if (preferredTagName) {\n return preferredTagName;\n }\n\n return name;\n};\n\nconst isValidTag = (\n context,\n mode : ParserMode,\n name : string,\n definedTags : Array,\n) : boolean => {\n const tagNames = getTagNamesForMode(mode, context);\n const validTagNames = Object.keys(tagNames).concat(_.flatten(Object.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 tagsWithMandatoryTypePosition = new Set([\n // These both show curly brackets in the doc signature and examples\n // \"typeExpression\"\n 'implements',\n\n // \"typeName\"\n 'type',\n]);\n\nconst tagsWithMandatoryTypePositionClosure = new Set([\n ...tagsWithMandatoryTypePosition,\n 'this',\n 'define',\n]);\n\n// All of these have a signature with \"type\" except for\n// `augments`/`extends` (\"namepath\")\n// `param`/`arg`/`argument` (no signature)\n// `property`/`prop` (no signature)\n// `modifies` (undocumented)\nconst tagsWithOptionalTypePosition = new Set([\n // These have the example showing curly brackets but not in their doc signature, e.g.: https://jsdoc.app/tags-enum.html\n 'enum',\n 'member', 'var',\n\n 'typedef',\n\n // These do not show curly brackets in either the signature or examples\n 'augments', 'extends',\n\n 'class', 'constructor',\n 'constant', 'const',\n\n // These show the signature with curly brackets but not in the example\n 'module',\n 'namespace',\n\n // These have no formal signature in the docs but show curly brackets\n // in the examples\n 'param', 'arg', 'argument',\n 'property', 'prop',\n\n // These show curly brackets in the signature and in the examples\n 'returns', 'return',\n 'throws', 'exception',\n 'yields', 'yield',\n\n // Has no documentation, but test example has curly brackets, and\n // \"name\" would be suggested rather than \"namepath\" based on example; not\n // sure if name is required\n 'modifies',\n]);\n\nconst tagsWithOptionalTypePositionClosure = new Set([\n ...tagsWithOptionalTypePosition,\n\n 'export',\n\n // Shows the signature with curly brackets but not in the example\n // \"typeExpression\"\n 'package',\n 'private',\n 'protected',\n\n // These do not show a signature nor show curly brackets in the example\n 'public',\n 'static',\n]);\n\n// None of these show as having curly brackets for their name/namepath\nconst closureNamepathDefiningTags = new Set([\n // These appear to require a \"name\" in their signature, albeit these\n // are somewhat different from other \"name\"'s (including as described\n // at https://jsdoc.app/about-namepaths.html )\n 'external', 'host',\n 'event',\n\n // These allow for \"name\"'s in their signature, but indicate as optional\n 'class', 'constructor',\n 'constant', 'const',\n 'function', 'func', 'method',\n 'member', 'var',\n 'mixin',\n 'namespace',\n\n // These seem to all require a \"namepath\" in their signatures (with no counter-examples)\n 'name',\n 'typedef',\n 'callback',\n]);\n\nconst typescriptNamepathDefiningTags = new Set([\n ...closureNamepathDefiningTags,\n\n // Allows for \"name\" in signature, but indicates as optional\n 'interface',\n]);\n\nconst namepathDefiningTags = new Set([\n ...typescriptNamepathDefiningTags,\n\n // Optional \"name\" and no curly brackets\n // this block impacts `no-undefined-types` and `valid-types` (search for\n // \"isNamepathDefiningTag|tagMightHaveNamePosition|tagMightHaveEitherTypeOrNamePosition\")\n 'module',\n]);\n\n// These *reference* names/namepaths and do not define them\nconst tagsWithOptionalNamePositionBase = new Set([\n // `borrows` has a different format, however, so needs special parsing;\n // seems to require both, and as \"namepath\"'s\n 'borrows',\n\n // Signature seems to require a \"name\" (of an event) and no counter-examples\n 'emits', 'fires',\n 'listens',\n\n // Signature seems to require a \"namepath\" (and no counter-examples)\n 'alias',\n 'augments', 'extends',\n 'lends',\n 'this',\n\n // Signature seems to require a \"namepath\" (and no counter-examples),\n // though it allows an incomplete namepath ending with connecting symbol\n 'memberof', 'memberof!',\n\n // Signature seems to require a \"OtherObjectPath\" with no counter-examples\n 'mixes',\n\n // Signature allows for \"namepath\" or text\n 'see',\n]);\n\n// The following do not seem to allow curly brackets in their doc\n// signature or examples (besides `modifies` and `param`)\nconst tagsWithOptionalNamePosition = new Set([\n ...namepathDefiningTags,\n ...tagsWithOptionalNamePositionBase,\n]);\n\nconst typescriptTagsWithOptionalNamePosition = new Set([\n ...typescriptNamepathDefiningTags,\n ...tagsWithOptionalNamePositionBase,\n]);\n\nconst closureTagsWithOptionalNamePosition = new Set([\n ...closureNamepathDefiningTags,\n ...tagsWithOptionalNamePositionBase,\n]);\n\n// Todo: `@link` seems to require a namepath OR URL and might be checked as such.\n\n// The doc signature of `event` seems to require a \"name\"\nconst tagsWithMandatoryNamePosition = new Set([\n // Though no signature provided requiring, per https://jsdoc.app/tags-param.html:\n // \"The @param tag requires you to specify the name of the parameter you are documenting.\"\n 'param',\n 'arg',\n 'argument',\n\n // No docs indicate required, but since parallel to `param`, we treat as such:\n 'property',\n 'prop',\n\n // \"name\" (and a special syntax for the `external` name)\n 'external', 'host',\n\n // \"namepath\"\n 'callback',\n 'name',\n 'typedef',\n]);\n\nconst tagsWithMandatoryTypeOrNamePosition = new Set([\n // \"namepath\"\n 'alias',\n 'augments', 'extends',\n 'borrows',\n 'lends',\n 'memberof', 'memberof!',\n 'name',\n 'this',\n 'typedef',\n\n // \"name\"\n 'external', 'host',\n\n // \"OtherObjectPath\"\n 'mixes',\n]);\n\nconst isNamepathDefiningTag = (mode, tagName) => {\n if (mode === 'closure') {\n return closureNamepathDefiningTags.has(tagName);\n }\n if (mode === 'typescript') {\n return typescriptNamepathDefiningTags.has(tagName);\n }\n\n return namepathDefiningTags.has(tagName);\n};\n\nconst tagMightHaveTypePosition = (mode, tag) => {\n if (mode === 'closure') {\n return tagsWithMandatoryTypePositionClosure.has(tag) ||\n tagsWithOptionalTypePositionClosure.has(tag);\n }\n\n return tagsWithMandatoryTypePosition.has(tag) ||\n tagsWithOptionalTypePosition.has(tag);\n};\n\nconst tagMustHaveTypePosition = (mode, tag) => {\n if (mode === 'closure') {\n return tagsWithMandatoryTypePositionClosure.has(tag);\n }\n\n return tagsWithMandatoryTypePosition.has(tag);\n};\n\nconst tagMightHaveNamePosition = (mode, tag) => {\n if (mode === 'closure') {\n return closureTagsWithOptionalNamePosition.has(tag);\n }\n if (mode === 'typescript') {\n return typescriptTagsWithOptionalNamePosition.has(tag);\n }\n\n return tagsWithOptionalNamePosition.has(tag);\n};\n\nconst tagMustHaveNamePosition = (tag) => {\n return tagsWithMandatoryNamePosition.has(tag);\n};\n\nconst tagMightHaveEitherTypeOrNamePosition = (mode, tag) => {\n return tagMightHaveTypePosition(mode, tag) || tagMightHaveNamePosition(mode, tag);\n};\n\nconst tagMustHaveEitherTypeOrNamePosition = (tag) => {\n return tagsWithMandatoryTypeOrNamePosition.has(tag);\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/**\n * Checks if a node has a throws statement.\n *\n * @param {object} node\n * @param {boolean} innerFunction\n * @returns {boolean}\n */\nconst hasThrowValue = (node, innerFunction) => {\n if (!node) {\n return false;\n }\n switch (node.type) {\n case 'FunctionExpression':\n case 'FunctionDeclaration':\n case 'ArrowFunctionExpression': {\n return !innerFunction && hasThrowValue(node.body, true);\n }\n case 'BlockStatement': {\n return node.body.some((bodyNode) => {\n return bodyNode.type !== 'FunctionDeclaration' && hasThrowValue(bodyNode);\n });\n }\n case 'WhileStatement':\n case 'DoWhileStatement':\n case 'ForStatement':\n case 'ForInStatement':\n case 'ForOfStatement':\n case 'WithStatement': {\n return hasThrowValue(node.body);\n }\n case 'IfStatement': {\n return hasThrowValue(node.consequent) || hasThrowValue(node.alternate);\n }\n\n // We only consider it to throw an error if the catch or finally blocks throw an error.\n case 'TryStatement': {\n return hasThrowValue(node.handler && node.handler.body) ||\n hasThrowValue(node.finalizer);\n }\n case 'SwitchStatement': {\n return node.cases.some(\n (someCase) => {\n return someCase.consequent.some(hasThrowValue);\n },\n );\n }\n case 'ThrowStatement': {\n return true;\n }\n\n default: {\n return false;\n }\n }\n};\n\n/** @param {string} tag */\n/*\nconst isInlineTag = (tag) => {\n return /^(@link|@linkcode|@linkplain|@tutorial) /u.test(tag);\n};\n*/\n\n/**\n * Parses GCC Generic/Template types\n *\n * @see {https://github.com/google/closure-compiler/wiki/Generic-Types}\n * @param {JsDocTag} tag\n * @returns {Array<string>}\n */\nconst parseClosureTemplateTag = (tag) => {\n return (tag.name + ' ' + tag.description)\n .split(',')\n .map((type) => {\n return type.trim();\n });\n};\n\n/**\n * Checks user option for `contexts` array, defaulting to\n * contexts designated by the rule. Returns an array of\n * ESTree AST types, indicating allowable contexts.\n *\n * @param {*} context\n * @param {true|string[]} defaultContexts\n * @returns {string[]}\n */\nconst enforcedContexts = (context, defaultContexts) => {\n const {\n contexts = defaultContexts === true ? [\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n ] : defaultContexts,\n } = context.options[0] || {};\n\n return contexts;\n};\n\n/**\n * @param {string[]} contexts\n * @param {Function} checkJsdoc\n */\nconst getContextObject = (contexts, checkJsdoc) => {\n const properties = {};\n\n contexts.forEach((prop) => {\n if (typeof prop === 'object') {\n properties[prop.context] = checkJsdoc;\n } else {\n properties[prop] = checkJsdoc;\n }\n });\n\n return properties;\n};\n\nconst filterTags = (tags = [], filter) => {\n return tags.filter(filter);\n};\n\nconst tagsWithNamesAndDescriptions = new Set([\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 = (context, mode, tags, tagPreference) => {\n const descName = getPreferredTagName(context, mode, 'description', tagPreference);\n const tagsWithoutNames = [];\n const tagsWithNames = filterTags(tags, (tag) => {\n const {tag: tagName} = tag;\n const tagWithName = tagsWithNamesAndDescriptions.has(tagName);\n if (!tagWithName && tagName !== descName) {\n tagsWithoutNames.push(tag);\n }\n\n return tagWithName;\n });\n\n return {\n tagsWithNames,\n tagsWithoutNames,\n };\n};\n\nconst getIndent = (sourceCode) => {\n let indent = sourceCode.text.match(/^\\n*([ \\t]+)/u);\n indent = indent ? indent[1] + indent[1].charAt() : ' ';\n\n return indent;\n};\n\nexport default {\n enforcedContexts,\n filterTags,\n flattenRoots,\n getContextObject,\n getFunctionParameterNames,\n getIndent,\n getJsdocTagsDeep,\n getPreferredTagName,\n getTagsByType,\n hasATag,\n hasDefinedTypeReturnTag,\n hasReturnValue,\n hasTag,\n hasThrowValue,\n isNamepathDefiningTag,\n isValidTag,\n parseClosureTemplateTag,\n tagMightHaveEitherTypeOrNamePosition,\n tagMightHaveNamePosition,\n tagMightHaveTypePosition,\n tagMustHaveEitherTypeOrNamePosition,\n tagMustHaveNamePosition,\n tagMustHaveTypePosition,\n};\n"],"file":"jsdocUtils.js"}
@@ -39,6 +39,10 @@ const OPTIONS_SCHEMA = {
39
39
  },
40
40
  type: 'array'
41
41
  },
42
+ enableFixer: {
43
+ default: true,
44
+ type: 'boolean'
45
+ },
42
46
  exemptEmptyFunctions: {
43
47
  default: false,
44
48
  type: 'boolean'
@@ -114,10 +118,12 @@ const getOptions = context => {
114
118
  const {
115
119
  publicOnly,
116
120
  contexts = [],
117
- exemptEmptyFunctions = false
121
+ exemptEmptyFunctions = false,
122
+ enableFixer = true
118
123
  } = context.options[0] || {};
119
124
  return {
120
125
  contexts,
126
+ enableFixer,
121
127
  exemptEmptyFunctions,
122
128
  publicOnly: (baseObj => {
123
129
  if (!publicOnly) {
@@ -150,7 +156,8 @@ var _default = {
150
156
  require: requireOption,
151
157
  contexts,
152
158
  publicOnly,
153
- exemptEmptyFunctions
159
+ exemptEmptyFunctions,
160
+ enableFixer
154
161
  } = getOptions(context);
155
162
 
156
163
  const checkJsDoc = (node, isFunctionContext) => {
@@ -206,7 +213,7 @@ var _default = {
206
213
  start: node.loc.start
207
214
  };
208
215
  context.report({
209
- fix,
216
+ fix: enableFixer ? fix : null,
210
217
  loc,
211
218
  messageId: 'missingJsDoc',
212
219
  node
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/rules/requireJsdoc.js"],"names":["OPTIONS_SCHEMA","additionalProperties","properties","contexts","items","anyOf","type","context","inlineCommentBlock","exemptEmptyFunctions","default","publicOnly","oneOf","ancestorsOnly","cjs","esm","window","require","ArrowFunctionExpression","ClassDeclaration","ClassExpression","FunctionDeclaration","FunctionExpression","MethodDefinition","getOption","baseObject","option","key","_","has","options","getOptions","baseObj","Object","keys","forEach","prop","opt","create","sourceCode","getSourceCode","settings","requireOption","checkJsDoc","node","isFunctionContext","jsDocNode","functionParameterNames","jsdocUtils","getFunctionParameterNames","length","hasReturnValue","fix","fixer","lines","minLines","maxLines","baseNode","decorator","tokenBefore","getTokenBefore","includeComments","indent","getIndent","text","getText","loc","start","column","find","ctxt","insertion","repeat","slice","insertTextBefore","report","end","messageId","Boolean","initModuleExports","initWindow","parseResult","exportParser","parse","ast","exported","isExported","getContextObject","enforcedContexts","includes","parent","value","meta","docs","category","description","recommended","url","fixable","messages","missingJsDoc","schema"],"mappings":"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","sourcesContent":["import _ from 'lodash';\nimport jsdocUtils from '../jsdocUtils';\nimport exportParser from '../exportParser';\nimport {getJSDocComment, getReducedASTNode, getDecorator} from '../eslint/getJSDocComment';\nimport {getSettings} from '../iterateJsdoc';\n\nconst OPTIONS_SCHEMA = {\n additionalProperties: false,\n properties: {\n contexts: {\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n context: {\n type: 'string',\n },\n inlineCommentBlock: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n exemptEmptyFunctions: {\n default: false,\n type: 'boolean',\n },\n publicOnly: {\n oneOf: [\n {\n default: false,\n type: 'boolean',\n },\n {\n additionalProperties: false,\n default: {},\n properties: {\n ancestorsOnly: {\n type: 'boolean',\n },\n cjs: {\n type: 'boolean',\n },\n esm: {\n type: 'boolean',\n },\n window: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n },\n require: {\n additionalProperties: false,\n default: {},\n properties: {\n ArrowFunctionExpression: {\n default: false,\n type: 'boolean',\n },\n ClassDeclaration: {\n default: false,\n type: 'boolean',\n },\n ClassExpression: {\n default: false,\n type: 'boolean',\n },\n FunctionDeclaration: {\n default: true,\n type: 'boolean',\n },\n FunctionExpression: {\n default: false,\n type: 'boolean',\n },\n MethodDefinition: {\n default: false,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n },\n type: 'object',\n};\n\nconst getOption = (context, baseObject, option, key) => {\n if (!_.has(context, `options[0][${option}][${key}]`)) {\n return baseObject.properties[key].default;\n }\n\n return context.options[0][option][key];\n};\n\nconst getOptions = (context) => {\n const {\n publicOnly,\n contexts = [],\n exemptEmptyFunctions = false,\n } = context.options[0] || {};\n\n return {\n contexts,\n exemptEmptyFunctions,\n publicOnly: ((baseObj) => {\n if (!publicOnly) {\n return false;\n }\n\n const properties = {};\n Object.keys(baseObj.properties).forEach((prop) => {\n const opt = getOption(context, baseObj, 'publicOnly', prop);\n properties[prop] = opt;\n });\n\n return properties;\n })(OPTIONS_SCHEMA.properties.publicOnly.oneOf[1]),\n require: ((baseObj) => {\n const properties = {};\n Object.keys(baseObj.properties).forEach((prop) => {\n const opt = getOption(context, baseObj, 'require', prop);\n properties[prop] = opt;\n });\n\n return properties;\n })(OPTIONS_SCHEMA.properties.require),\n };\n};\n\nexport default {\n create (context) {\n const sourceCode = context.getSourceCode();\n const settings = getSettings(context);\n\n const {\n require: requireOption,\n contexts,\n publicOnly, exemptEmptyFunctions,\n } = getOptions(context);\n\n const checkJsDoc = (node, isFunctionContext) => {\n const jsDocNode = getJSDocComment(sourceCode, node, settings);\n\n if (jsDocNode) {\n return;\n }\n\n if (exemptEmptyFunctions && isFunctionContext) {\n const functionParameterNames = jsdocUtils.getFunctionParameterNames(node);\n if (!functionParameterNames.length && !jsdocUtils.hasReturnValue(node, context)) {\n return;\n }\n }\n\n const fix = (fixer) => {\n // Default to one line break if the `minLines`/`maxLines` settings allow\n const lines = settings.minLines === 0 && settings.maxLines >= 1 ? 1 : settings.minLines;\n let baseNode = getReducedASTNode(node, sourceCode);\n\n let decorator;\n do {\n const tokenBefore = sourceCode.getTokenBefore(baseNode, {includeComments: true});\n decorator = getDecorator(tokenBefore, sourceCode);\n if (decorator) {\n baseNode = decorator;\n }\n } while (decorator);\n\n const indent = jsdocUtils.getIndent({\n text: sourceCode.getText(\n baseNode,\n baseNode.loc.start.column,\n ),\n });\n const {inlineCommentBlock} = contexts.find(({context: ctxt}) => {\n return ctxt === node.type;\n }) || {};\n const insertion = (inlineCommentBlock ?\n '/** ' :\n `/**\\n${indent}*\\n${indent}`) +\n `*/${'\\n'.repeat(lines)}${indent.slice(0, -1)}`;\n\n return fixer.insertTextBefore(baseNode, insertion);\n };\n\n const report = () => {\n const loc = {\n end: node.loc.start + 1,\n start: node.loc.start,\n };\n context.report({\n fix,\n loc,\n messageId: 'missingJsDoc',\n node,\n });\n };\n\n if (publicOnly) {\n const opt = {\n ancestorsOnly: Boolean(publicOnly?.ancestorsOnly ?? false),\n esm: Boolean(publicOnly?.esm ?? true),\n initModuleExports: Boolean(publicOnly?.cjs ?? true),\n initWindow: Boolean(publicOnly?.window ?? false),\n };\n const parseResult = exportParser.parse(sourceCode.ast, node, opt);\n const exported = exportParser.isExported(node, parseResult, opt);\n\n if (exported) {\n report();\n }\n } else {\n report();\n }\n };\n\n return {\n ...jsdocUtils.getContextObject(jsdocUtils.enforcedContexts(context, []), checkJsDoc),\n ArrowFunctionExpression (node) {\n if (!requireOption.ArrowFunctionExpression) {\n return;\n }\n\n if (!['VariableDeclarator', 'ExportDefaultDeclaration', 'AssignmentExpression'].includes(node.parent.type)) {\n return;\n }\n\n checkJsDoc(node, true);\n },\n\n ClassDeclaration (node) {\n if (!requireOption.ClassDeclaration) {\n return;\n }\n\n checkJsDoc(node);\n },\n\n ClassExpression (node) {\n if (!requireOption.ClassExpression) {\n return;\n }\n\n checkJsDoc(node);\n },\n\n FunctionDeclaration (node) {\n if (!requireOption.FunctionDeclaration) {\n return;\n }\n\n checkJsDoc(node, true);\n },\n\n FunctionExpression (node) {\n if (requireOption.MethodDefinition && node.parent.type === 'MethodDefinition') {\n checkJsDoc(node, true);\n\n return;\n }\n\n if (!requireOption.FunctionExpression) {\n return;\n }\n\n if (\n ['VariableDeclarator', 'AssignmentExpression', 'ExportDefaultDeclaration'].includes(node.parent.type) ||\n node.parent.type === 'Property' && node === node.parent.value\n ) {\n checkJsDoc(node, true);\n }\n },\n };\n },\n meta: {\n docs: {\n category: 'Stylistic Issues',\n description: 'Require JSDoc comments',\n recommended: 'true',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc',\n },\n\n fixable: 'code',\n\n messages: {\n missingJsDoc: 'Missing JSDoc comment.',\n },\n\n schema: [\n OPTIONS_SCHEMA,\n ],\n\n type: 'suggestion',\n },\n};\n"],"file":"requireJsdoc.js"}
1
+ {"version":3,"sources":["../../src/rules/requireJsdoc.js"],"names":["OPTIONS_SCHEMA","additionalProperties","properties","contexts","items","anyOf","type","context","inlineCommentBlock","enableFixer","default","exemptEmptyFunctions","publicOnly","oneOf","ancestorsOnly","cjs","esm","window","require","ArrowFunctionExpression","ClassDeclaration","ClassExpression","FunctionDeclaration","FunctionExpression","MethodDefinition","getOption","baseObject","option","key","_","has","options","getOptions","baseObj","Object","keys","forEach","prop","opt","create","sourceCode","getSourceCode","settings","requireOption","checkJsDoc","node","isFunctionContext","jsDocNode","functionParameterNames","jsdocUtils","getFunctionParameterNames","length","hasReturnValue","fix","fixer","lines","minLines","maxLines","baseNode","decorator","tokenBefore","getTokenBefore","includeComments","indent","getIndent","text","getText","loc","start","column","find","ctxt","insertion","repeat","slice","insertTextBefore","report","end","messageId","Boolean","initModuleExports","initWindow","parseResult","exportParser","parse","ast","exported","isExported","getContextObject","enforcedContexts","includes","parent","value","meta","docs","category","description","recommended","url","fixable","messages","missingJsDoc","schema"],"mappings":"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","sourcesContent":["import _ from 'lodash';\nimport jsdocUtils from '../jsdocUtils';\nimport exportParser from '../exportParser';\nimport {getJSDocComment, getReducedASTNode, getDecorator} from '../eslint/getJSDocComment';\nimport {getSettings} from '../iterateJsdoc';\n\nconst OPTIONS_SCHEMA = {\n additionalProperties: false,\n properties: {\n contexts: {\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n context: {\n type: 'string',\n },\n inlineCommentBlock: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n enableFixer: {\n default: true,\n type: 'boolean',\n },\n exemptEmptyFunctions: {\n default: false,\n type: 'boolean',\n },\n publicOnly: {\n oneOf: [\n {\n default: false,\n type: 'boolean',\n },\n {\n additionalProperties: false,\n default: {},\n properties: {\n ancestorsOnly: {\n type: 'boolean',\n },\n cjs: {\n type: 'boolean',\n },\n esm: {\n type: 'boolean',\n },\n window: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n },\n require: {\n additionalProperties: false,\n default: {},\n properties: {\n ArrowFunctionExpression: {\n default: false,\n type: 'boolean',\n },\n ClassDeclaration: {\n default: false,\n type: 'boolean',\n },\n ClassExpression: {\n default: false,\n type: 'boolean',\n },\n FunctionDeclaration: {\n default: true,\n type: 'boolean',\n },\n FunctionExpression: {\n default: false,\n type: 'boolean',\n },\n MethodDefinition: {\n default: false,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n },\n type: 'object',\n};\n\nconst getOption = (context, baseObject, option, key) => {\n if (!_.has(context, `options[0][${option}][${key}]`)) {\n return baseObject.properties[key].default;\n }\n\n return context.options[0][option][key];\n};\n\nconst getOptions = (context) => {\n const {\n publicOnly,\n contexts = [],\n exemptEmptyFunctions = false,\n enableFixer = true,\n } = context.options[0] || {};\n\n return {\n contexts,\n enableFixer,\n exemptEmptyFunctions,\n publicOnly: ((baseObj) => {\n if (!publicOnly) {\n return false;\n }\n\n const properties = {};\n Object.keys(baseObj.properties).forEach((prop) => {\n const opt = getOption(context, baseObj, 'publicOnly', prop);\n properties[prop] = opt;\n });\n\n return properties;\n })(OPTIONS_SCHEMA.properties.publicOnly.oneOf[1]),\n require: ((baseObj) => {\n const properties = {};\n Object.keys(baseObj.properties).forEach((prop) => {\n const opt = getOption(context, baseObj, 'require', prop);\n properties[prop] = opt;\n });\n\n return properties;\n })(OPTIONS_SCHEMA.properties.require),\n };\n};\n\nexport default {\n create (context) {\n const sourceCode = context.getSourceCode();\n const settings = getSettings(context);\n\n const {\n require: requireOption,\n contexts,\n publicOnly, exemptEmptyFunctions, enableFixer,\n } = getOptions(context);\n\n const checkJsDoc = (node, isFunctionContext) => {\n const jsDocNode = getJSDocComment(sourceCode, node, settings);\n\n if (jsDocNode) {\n return;\n }\n\n if (exemptEmptyFunctions && isFunctionContext) {\n const functionParameterNames = jsdocUtils.getFunctionParameterNames(node);\n if (!functionParameterNames.length && !jsdocUtils.hasReturnValue(node, context)) {\n return;\n }\n }\n\n const fix = (fixer) => {\n // Default to one line break if the `minLines`/`maxLines` settings allow\n const lines = settings.minLines === 0 && settings.maxLines >= 1 ? 1 : settings.minLines;\n let baseNode = getReducedASTNode(node, sourceCode);\n\n let decorator;\n do {\n const tokenBefore = sourceCode.getTokenBefore(baseNode, {includeComments: true});\n decorator = getDecorator(tokenBefore, sourceCode);\n if (decorator) {\n baseNode = decorator;\n }\n } while (decorator);\n\n const indent = jsdocUtils.getIndent({\n text: sourceCode.getText(\n baseNode,\n baseNode.loc.start.column,\n ),\n });\n const {inlineCommentBlock} = contexts.find(({context: ctxt}) => {\n return ctxt === node.type;\n }) || {};\n const insertion = (inlineCommentBlock ?\n '/** ' :\n `/**\\n${indent}*\\n${indent}`) +\n `*/${'\\n'.repeat(lines)}${indent.slice(0, -1)}`;\n\n return fixer.insertTextBefore(baseNode, insertion);\n };\n\n const report = () => {\n const loc = {\n end: node.loc.start + 1,\n start: node.loc.start,\n };\n context.report({\n fix: enableFixer ? fix : null,\n loc,\n messageId: 'missingJsDoc',\n node,\n });\n };\n\n if (publicOnly) {\n const opt = {\n ancestorsOnly: Boolean(publicOnly?.ancestorsOnly ?? false),\n esm: Boolean(publicOnly?.esm ?? true),\n initModuleExports: Boolean(publicOnly?.cjs ?? true),\n initWindow: Boolean(publicOnly?.window ?? false),\n };\n const parseResult = exportParser.parse(sourceCode.ast, node, opt);\n const exported = exportParser.isExported(node, parseResult, opt);\n\n if (exported) {\n report();\n }\n } else {\n report();\n }\n };\n\n return {\n ...jsdocUtils.getContextObject(jsdocUtils.enforcedContexts(context, []), checkJsDoc),\n ArrowFunctionExpression (node) {\n if (!requireOption.ArrowFunctionExpression) {\n return;\n }\n\n if (!['VariableDeclarator', 'ExportDefaultDeclaration', 'AssignmentExpression'].includes(node.parent.type)) {\n return;\n }\n\n checkJsDoc(node, true);\n },\n\n ClassDeclaration (node) {\n if (!requireOption.ClassDeclaration) {\n return;\n }\n\n checkJsDoc(node);\n },\n\n ClassExpression (node) {\n if (!requireOption.ClassExpression) {\n return;\n }\n\n checkJsDoc(node);\n },\n\n FunctionDeclaration (node) {\n if (!requireOption.FunctionDeclaration) {\n return;\n }\n\n checkJsDoc(node, true);\n },\n\n FunctionExpression (node) {\n if (requireOption.MethodDefinition && node.parent.type === 'MethodDefinition') {\n checkJsDoc(node, true);\n\n return;\n }\n\n if (!requireOption.FunctionExpression) {\n return;\n }\n\n if (\n ['VariableDeclarator', 'AssignmentExpression', 'ExportDefaultDeclaration'].includes(node.parent.type) ||\n node.parent.type === 'Property' && node === node.parent.value\n ) {\n checkJsDoc(node, true);\n }\n },\n };\n },\n meta: {\n docs: {\n category: 'Stylistic Issues',\n description: 'Require JSDoc comments',\n recommended: 'true',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc',\n },\n\n fixable: 'code',\n\n messages: {\n missingJsDoc: 'Missing JSDoc comment.',\n },\n\n schema: [\n OPTIONS_SCHEMA,\n ],\n\n type: 'suggestion',\n },\n};\n"],"file":"requireJsdoc.js"}
@@ -94,10 +94,13 @@ var _default = (0, _iterateJsdoc.default)(({
94
94
 
95
95
  const hasTypePosition = utils.tagMightHaveTypePosition(tag.tag) && Boolean(tag.type);
96
96
  const mustHaveTypePosition = utils.tagMustHaveTypePosition(tag.tag);
97
- const hasNameOrNamepathPosition = utils.tagMightHaveNamePosition(tag.tag) && Boolean(tag.name) && !(tag.tag === 'see' && !checkSeesForNamepaths);
98
- const mustHaveNameOrNamepathPosition = utils.tagMustHaveNamePosition(tag.tag) && !allowEmptyNamepaths;
97
+ const hasNameOrNamepathPosition = (utils.tagMustHaveNamePosition(tag.tag) || utils.tagMightHaveNamePosition(tag.tag)) && Boolean(tag.name) && !(tag.tag === 'see' && !checkSeesForNamepaths); // Don't handle `param` here though it does require name as handled by
98
+ // `require-param-name` and `require-property-name`
99
+
100
+ const mustHaveNameOrNamepathPosition = !['param', 'arg', 'argument', 'property', 'prop'].includes(tag.tag) && utils.tagMustHaveNamePosition(tag.tag) && !allowEmptyNamepaths;
99
101
  const hasEither = utils.tagMightHaveEitherTypeOrNamePosition(tag.tag) && (hasTypePosition || hasNameOrNamepathPosition);
100
102
  const mustHaveEither = utils.tagMustHaveEitherTypeOrNamePosition(tag.tag);
103
+ let skip;
101
104
 
102
105
  switch (tag.tag) {
103
106
  case 'borrows':
@@ -117,9 +120,36 @@ var _default = (0, _iterateJsdoc.default)(({
117
120
  break;
118
121
  }
119
122
 
123
+ case 'extends':
124
+ case 'package':
125
+ case 'private':
126
+ case 'protected':
127
+ case 'public':
128
+ case 'static':
129
+ {
130
+ if (mode !== 'closure' && mode !== 'permissive' && tag.type) {
131
+ report(`@${tag.tag} should not have a bracketed type in "${mode}" mode.`, null, tag);
132
+ break;
133
+ }
134
+
135
+ skip = true;
136
+ }
137
+ // Fallthrough
138
+
139
+ case 'typedef':
140
+ {
141
+ if (!skip && mode !== 'closure' && mode !== 'permissive' && !tag.name) {
142
+ report(`@typedef must have a name in "${mode}" mode.`, null, tag);
143
+ break;
144
+ }
145
+
146
+ skip = true;
147
+ }
148
+ // Fallthrough
149
+
120
150
  case 'interface':
121
151
  {
122
- if (mode === 'closure' && tag.name) {
152
+ if (!skip && mode === 'closure' && tag.name) {
123
153
  report('@interface should not have a name in "closure" mode.', null, tag);
124
154
  break;
125
155
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/rules/validTypes.js"],"names":["asExpression","jsdoc","report","utils","context","settings","allowEmptyNamepaths","checkSeesForNamepaths","options","mode","tags","forEach","tag","validNamepathParsing","namepath","tagName","handled","includes","endChar","slice","startChar","charAt","validTypeParsing","type","hasTypePosition","tagMightHaveTypePosition","Boolean","mustHaveTypePosition","tagMustHaveTypePosition","hasNameOrNamepathPosition","tagMightHaveNamePosition","name","mustHaveNameOrNamepathPosition","tagMustHaveNamePosition","hasEither","tagMightHaveEitherTypeOrNamePosition","mustHaveEither","tagMustHaveEitherTypeOrNamePosition","thisNamepath","description","replace","test","thatNamepath","iterateAllJsdocs","meta","docs","schema","additionalProperies","properties","default"],"mappings":"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","sourcesContent":["import {parse} from 'jsdoctypeparser';\nimport iterateJsdoc from '../iterateJsdoc';\n\nconst asExpression = /as\\s+/u;\n\nexport default iterateJsdoc(({\n jsdoc,\n report,\n utils,\n context,\n settings,\n}) => {\n const {\n allowEmptyNamepaths = true,\n checkSeesForNamepaths = false,\n } = context.options[0] || {};\n const {mode} = settings;\n if (!jsdoc.tags) {\n return;\n }\n // eslint-disable-next-line complexity\n jsdoc.tags.forEach((tag) => {\n const validNamepathParsing = function (namepath, tagName) {\n try {\n parse(namepath, {mode});\n } catch {\n let handled = false;\n\n if (tagName) {\n if (['memberof', 'memberof!'].includes(tagName)) {\n const endChar = namepath.slice(-1);\n if (['#', '.', '~'].includes(endChar)) {\n try {\n parse(namepath.slice(0, -1), {mode});\n handled = true;\n } catch {\n // Use the original error for including the whole type\n }\n }\n } else if (tagName === 'borrows') {\n const startChar = namepath.charAt();\n if (['#', '.', '~'].includes(startChar)) {\n try {\n parse(namepath.slice(1), {mode});\n handled = true;\n } catch {\n // Use the original error for including the whole type\n }\n }\n }\n }\n\n if (!handled) {\n report(`Syntax error in namepath: ${namepath}`, null, tag);\n\n return false;\n }\n }\n\n return true;\n };\n\n const validTypeParsing = function (type) {\n try {\n parse(type, {mode});\n } catch {\n report(`Syntax error in type: ${type}`, null, tag);\n\n return false;\n }\n\n return true;\n };\n\n const hasTypePosition = utils.tagMightHaveTypePosition(tag.tag) && Boolean(tag.type);\n const mustHaveTypePosition = utils.tagMustHaveTypePosition(tag.tag);\n\n const hasNameOrNamepathPosition = utils.tagMightHaveNamePosition(tag.tag) && Boolean(tag.name) && !(tag.tag === 'see' && !checkSeesForNamepaths);\n const mustHaveNameOrNamepathPosition = utils.tagMustHaveNamePosition(tag.tag) && !allowEmptyNamepaths;\n\n const hasEither = utils.tagMightHaveEitherTypeOrNamePosition(tag.tag) && (hasTypePosition || hasNameOrNamepathPosition);\n const mustHaveEither = utils.tagMustHaveEitherTypeOrNamePosition(tag.tag);\n\n switch (tag.tag) {\n case 'borrows': {\n const thisNamepath = tag.description.replace(asExpression, '');\n\n if (!asExpression.test(tag.description) || !thisNamepath) {\n report(`@borrows must have an \"as\" expression. Found \"${tag.description}\"`, null, tag);\n\n return;\n }\n\n if (validNamepathParsing(thisNamepath, 'borrows')) {\n const thatNamepath = tag.name;\n\n validNamepathParsing(thatNamepath);\n }\n break;\n }\n case 'interface': {\n if (mode === 'closure' && tag.name) {\n report('@interface should not have a name in \"closure\" mode.', null, tag);\n break;\n }\n }\n\n // Fallthrough\n default: {\n if (mustHaveEither && !hasEither && !mustHaveTypePosition) {\n report(`Tag @${tag.tag} must have either a type or namepath`, null, tag);\n\n return;\n }\n\n if (hasTypePosition) {\n validTypeParsing(tag.type);\n } else if (mustHaveTypePosition) {\n report(`Tag @${tag.tag} must have a type`, null, tag);\n }\n\n if (hasNameOrNamepathPosition) {\n validNamepathParsing(tag.name, tag.tag);\n } else if (mustHaveNameOrNamepathPosition) {\n report(`Tag @${tag.tag} must have a name/namepath`, null, tag);\n }\n }\n }\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Requires all types to be valid JSDoc or Closure compiler types without syntax errors.',\n },\n schema: [\n {\n additionalProperies: false,\n properties: {\n allowEmptyNamepaths: {\n default: true,\n type: 'boolean',\n },\n checkSeesForNamepaths: {\n default: false,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"validTypes.js"}
1
+ {"version":3,"sources":["../../src/rules/validTypes.js"],"names":["asExpression","jsdoc","report","utils","context","settings","allowEmptyNamepaths","checkSeesForNamepaths","options","mode","tags","forEach","tag","validNamepathParsing","namepath","tagName","handled","includes","endChar","slice","startChar","charAt","validTypeParsing","type","hasTypePosition","tagMightHaveTypePosition","Boolean","mustHaveTypePosition","tagMustHaveTypePosition","hasNameOrNamepathPosition","tagMustHaveNamePosition","tagMightHaveNamePosition","name","mustHaveNameOrNamepathPosition","hasEither","tagMightHaveEitherTypeOrNamePosition","mustHaveEither","tagMustHaveEitherTypeOrNamePosition","skip","thisNamepath","description","replace","test","thatNamepath","iterateAllJsdocs","meta","docs","schema","additionalProperies","properties","default"],"mappings":"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","sourcesContent":["import {parse} from 'jsdoctypeparser';\nimport iterateJsdoc from '../iterateJsdoc';\n\nconst asExpression = /as\\s+/u;\n\nexport default iterateJsdoc(({\n jsdoc,\n report,\n utils,\n context,\n settings,\n}) => {\n const {\n allowEmptyNamepaths = true,\n checkSeesForNamepaths = false,\n } = context.options[0] || {};\n const {mode} = settings;\n if (!jsdoc.tags) {\n return;\n }\n // eslint-disable-next-line complexity\n jsdoc.tags.forEach((tag) => {\n const validNamepathParsing = function (namepath, tagName) {\n try {\n parse(namepath, {mode});\n } catch {\n let handled = false;\n\n if (tagName) {\n if (['memberof', 'memberof!'].includes(tagName)) {\n const endChar = namepath.slice(-1);\n if (['#', '.', '~'].includes(endChar)) {\n try {\n parse(namepath.slice(0, -1), {mode});\n handled = true;\n } catch {\n // Use the original error for including the whole type\n }\n }\n } else if (tagName === 'borrows') {\n const startChar = namepath.charAt();\n if (['#', '.', '~'].includes(startChar)) {\n try {\n parse(namepath.slice(1), {mode});\n handled = true;\n } catch {\n // Use the original error for including the whole type\n }\n }\n }\n }\n\n if (!handled) {\n report(`Syntax error in namepath: ${namepath}`, null, tag);\n\n return false;\n }\n }\n\n return true;\n };\n\n const validTypeParsing = function (type) {\n try {\n parse(type, {mode});\n } catch {\n report(`Syntax error in type: ${type}`, null, tag);\n\n return false;\n }\n\n return true;\n };\n\n const hasTypePosition = utils.tagMightHaveTypePosition(tag.tag) && Boolean(tag.type);\n const mustHaveTypePosition = utils.tagMustHaveTypePosition(tag.tag);\n\n const hasNameOrNamepathPosition = (\n utils.tagMustHaveNamePosition(tag.tag) ||\n utils.tagMightHaveNamePosition(tag.tag)\n ) && Boolean(tag.name) && !(tag.tag === 'see' && !checkSeesForNamepaths);\n\n // Don't handle `param` here though it does require name as handled by\n // `require-param-name` and `require-property-name`\n const mustHaveNameOrNamepathPosition = ![\n 'param', 'arg', 'argument',\n 'property', 'prop',\n ].includes(tag.tag) &&\n utils.tagMustHaveNamePosition(tag.tag) && !allowEmptyNamepaths;\n\n const hasEither = utils.tagMightHaveEitherTypeOrNamePosition(tag.tag) && (hasTypePosition || hasNameOrNamepathPosition);\n const mustHaveEither = utils.tagMustHaveEitherTypeOrNamePosition(tag.tag);\n\n let skip;\n switch (tag.tag) {\n case 'borrows': {\n const thisNamepath = tag.description.replace(asExpression, '');\n\n if (!asExpression.test(tag.description) || !thisNamepath) {\n report(`@borrows must have an \"as\" expression. Found \"${tag.description}\"`, null, tag);\n\n return;\n }\n\n if (validNamepathParsing(thisNamepath, 'borrows')) {\n const thatNamepath = tag.name;\n\n validNamepathParsing(thatNamepath);\n }\n break;\n }\n case 'extends':\n case 'package': case 'private': case 'protected': case 'public': case 'static': {\n if (mode !== 'closure' && mode !== 'permissive' && tag.type) {\n report(`@${tag.tag} should not have a bracketed type in \"${mode}\" mode.`, null, tag);\n break;\n }\n skip = true;\n }\n\n // Fallthrough\n case 'typedef': {\n if (!skip && mode !== 'closure' && mode !== 'permissive' && !tag.name) {\n report(`@typedef must have a name in \"${mode}\" mode.`, null, tag);\n break;\n }\n skip = true;\n }\n\n // Fallthrough\n case 'interface': {\n if (!skip && mode === 'closure' && tag.name) {\n report('@interface should not have a name in \"closure\" mode.', null, tag);\n break;\n }\n }\n\n // Fallthrough\n default: {\n if (mustHaveEither && !hasEither && !mustHaveTypePosition) {\n report(`Tag @${tag.tag} must have either a type or namepath`, null, tag);\n\n return;\n }\n if (hasTypePosition) {\n validTypeParsing(tag.type);\n } else if (mustHaveTypePosition) {\n report(`Tag @${tag.tag} must have a type`, null, tag);\n }\n\n if (hasNameOrNamepathPosition) {\n validNamepathParsing(tag.name, tag.tag);\n } else if (mustHaveNameOrNamepathPosition) {\n report(`Tag @${tag.tag} must have a name/namepath`, null, tag);\n }\n }\n }\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Requires all types to be valid JSDoc or Closure compiler types without syntax errors.',\n },\n schema: [\n {\n additionalProperies: false,\n properties: {\n allowEmptyNamepaths: {\n default: true,\n type: 'boolean',\n },\n checkSeesForNamepaths: {\n default: false,\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"validTypes.js"}
package/package.json CHANGED
@@ -21,13 +21,13 @@
21
21
  "@babel/plugin-transform-flow-strip-types": "^7.10.1",
22
22
  "@babel/preset-env": "^7.10.3",
23
23
  "@babel/register": "^7.10.3",
24
- "@typescript-eslint/parser": "^3.3.0",
24
+ "@typescript-eslint/parser": "^3.4.0",
25
25
  "babel-eslint": "^10.1.0",
26
26
  "babel-plugin-add-module-exports": "^1.0.2",
27
27
  "babel-plugin-istanbul": "^6.0.0",
28
28
  "chai": "^4.2.0",
29
29
  "cross-env": "^7.0.2",
30
- "eslint": "7.3.0",
30
+ "eslint": "7.3.1",
31
31
  "eslint-config-canonical": "^20.0.6",
32
32
  "gitdown": "^3.1.3",
33
33
  "glob": "^7.1.6",
@@ -35,7 +35,7 @@
35
35
  "mocha": "^8.0.1",
36
36
  "nyc": "^15.1.0",
37
37
  "rimraf": "^3.0.2",
38
- "semantic-release": "^17.0.8",
38
+ "semantic-release": "^17.1.1",
39
39
  "typescript": "^3.9.5"
40
40
  },
41
41
  "engines": {
@@ -87,5 +87,5 @@
87
87
  "functions": 100,
88
88
  "statements": 100
89
89
  },
90
- "version": "28.4.0"
90
+ "version": "28.6.1"
91
91
  }