eslint-plugin-jsdoc 38.0.4 → 38.0.7

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
@@ -569,7 +569,7 @@ While at their simplest, these can be an array of string selectors, one can
569
569
  also supply an object with `context` (in place of the string) and one of two
570
570
  properties:
571
571
 
572
- 1. For `require-jsdoc`, there is also a `inlineCommentBlock` property. See
572
+ 1. For `require-jsdoc`, there is also an `inlineCommentBlock` property. See
573
573
  that rule for details.
574
574
  1. For `no-missing-syntax` and `no-restricted-syntax`, there is also a
575
575
  `message` property which allows customization of the message to be shown
@@ -6608,7 +6608,7 @@ The default is this basic expression to match English sentences (Support
6608
6608
  for Unicode upper case may be added in a future version when it can be handled
6609
6609
  by our supported Node versions):
6610
6610
 
6611
- ``^([A-Z]|[`\\d_])[\\s\\S]*[.?!`]\\s*$``
6611
+ ``^\n?([A-Z`\\d_][\\s\\S]*[.?!`]\\s*)?$``
6612
6612
 
6613
6613
  Applies to the jsdoc block description and `@description` (or `@desc`)
6614
6614
  by default but the `tags` option (see below) may be used to match other tags.
@@ -7178,6 +7178,11 @@ function quux () {
7178
7178
  */
7179
7179
  // "jsdoc/match-description": ["error"|"warn", {"contexts":["any"],"matchDescription":"^\\S[\\s\\S]*\\S$"}]
7180
7180
  // Message: JSDoc description does not satisfy the regex pattern.
7181
+
7182
+ /** Does something very important. */
7183
+ function foo(): string;
7184
+ // "jsdoc/match-description": ["error"|"warn", {"contexts":[{"comment":"JsdocBlock[endLine=0]"}],"matchDescription":"^\\S[\\s\\S]*\\S$"}]
7185
+ // Message: JSDoc description does not satisfy the regex pattern.
7181
7186
  ````
7182
7187
 
7183
7188
  The following patterns are not considered problems:
@@ -7533,6 +7538,18 @@ function quux (foo) {
7533
7538
  function quux () {
7534
7539
  }
7535
7540
  // "jsdoc/match-description": ["error"|"warn", {"mainDescription":false,"tags":{"todo":true}}]
7541
+
7542
+ /** Does something very important. */
7543
+ function foo(): string;
7544
+ // "jsdoc/match-description": ["error"|"warn", {"contexts":[{"comment":"JsdocBlock[endLine!=0]"}],"matchDescription":"^\\S[\\s\\S]*\\S$"}]
7545
+
7546
+ /**
7547
+ * This is my favorite function, foo.
7548
+ *
7549
+ * @returns Nothing.
7550
+ */
7551
+ function foo(): void;
7552
+ // "jsdoc/match-description": ["error"|"warn", {"contexts":[{"comment":"JsdocBlock[endLine!=0]:not(:has(JsdocTag))"}],"matchDescription":"^\\S[\\s\\S]*\\S$"}]
7536
7553
  ````
7537
7554
 
7538
7555
 
@@ -8511,6 +8528,8 @@ function quux () {
8511
8528
 
8512
8529
  /* */
8513
8530
 
8531
+ /** */
8532
+
8514
8533
  /* @custom */
8515
8534
  // "jsdoc/no-bad-blocks": ["error"|"warn", {"ignore":["custom"]}]
8516
8535
 
@@ -8522,6 +8541,8 @@ function quux () {
8522
8541
  function quux (foo) {
8523
8542
 
8524
8543
  }
8544
+
8545
+ /***/
8525
8546
  ````
8526
8547
 
8527
8548
 
@@ -9413,6 +9434,10 @@ const MY_ENUM = Object.freeze({
9413
9434
  * @returns {(...args: any[]) => any}
9414
9435
  */
9415
9436
  // "jsdoc/no-restricted-syntax": ["error"|"warn", {"contexts":[{"comment":"JsdocBlock:has(JsdocTag[tag=\"type\"]:has([value=/FunctionComponent/]))","context":"any","message":"The `FunctionComponent` type is not allowed. Please use `FC` instead."}]}]
9437
+
9438
+ /** Does something very important. */
9439
+ function foo(): string;
9440
+ // "jsdoc/no-restricted-syntax": ["error"|"warn", {"contexts":[{"comment":"JsdocBlock[endLine=0][description!=/^\\S[\\s\\S]*\\S\\s$/]"}]}]
9416
9441
  ````
9417
9442
 
9418
9443
 
@@ -9551,6 +9576,9 @@ function quux (foo) {
9551
9576
  * @callback
9552
9577
  * @param {number} foo
9553
9578
  */
9579
+
9580
+ /*** Oops that's too many asterisks by accident **/
9581
+ function a () {}
9554
9582
  ````
9555
9583
 
9556
9584
 
@@ -10028,6 +10056,10 @@ class Foo {
10028
10056
 
10029
10057
  /****/
10030
10058
 
10059
+ /* */
10060
+
10061
+ /*** */
10062
+
10031
10063
  /**
10032
10064
  *
10033
10065
  */
@@ -18753,6 +18785,13 @@ export const sleep = (ms: number) => {
18753
18785
 
18754
18786
  Requires that throw statements are documented.
18755
18787
 
18788
+ Note that since throw statements within async functions end up as rejected
18789
+ Promises, they are not considered as throw statements for the purposes of this
18790
+ rule. See [issue 755](https://github.com/gajus/eslint-plugin-jsdoc/issues/755)
18791
+ for our desire for a separate tag to document rejection types and see
18792
+ [this discussion](https://stackoverflow.com/questions/50071115/typescript-promise-rejection-type)
18793
+ on why TypeScript doesn't offer such a feature.
18794
+
18756
18795
  <a name="user-content-eslint-plugin-jsdoc-rules-require-throws-options-37"></a>
18757
18796
  <a name="eslint-plugin-jsdoc-rules-require-throws-options-37"></a>
18758
18797
  #### Options
@@ -20,7 +20,6 @@ var _jsdocUtils = _interopRequireDefault(require("./jsdocUtils"));
20
20
 
21
21
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
22
22
 
23
- /* eslint-disable jsdoc/valid-types */
24
23
  const {
25
24
  rewireSpecs,
26
25
  seedTokens
@@ -256,7 +255,13 @@ const getUtils = (node, jsdoc, jsdocNode, settings, report, context, iteratingAl
256
255
  utils.addTag = (targetTagName, number = (() => {
257
256
  var _jsdoc$tags$source$0$, _jsdoc$tags, _jsdoc$tags$source$;
258
257
 
259
- return (_jsdoc$tags$source$0$ = (_jsdoc$tags = jsdoc.tags[jsdoc.tags.length - 1]) === null || _jsdoc$tags === void 0 ? void 0 : (_jsdoc$tags$source$ = _jsdoc$tags.source[0]) === null || _jsdoc$tags$source$ === void 0 ? void 0 : _jsdoc$tags$source$.number) !== null && _jsdoc$tags$source$0$ !== void 0 ? _jsdoc$tags$source$0$ : 0;
258
+ return (_jsdoc$tags$source$0$ = (_jsdoc$tags = jsdoc.tags[jsdoc.tags.length - 1]) === null || _jsdoc$tags === void 0 ? void 0 : (_jsdoc$tags$source$ = _jsdoc$tags.source[0]) === null || _jsdoc$tags$source$ === void 0 ? void 0 : _jsdoc$tags$source$.number) !== null && _jsdoc$tags$source$0$ !== void 0 ? _jsdoc$tags$source$0$ : jsdoc.source.findIndex(({
259
+ tokens: {
260
+ tag
261
+ }
262
+ }) => {
263
+ return tag;
264
+ }) - 1;
260
265
  })() + 1, tokens = {}) => {
261
266
  jsdoc.source.splice(number, 0, {
262
267
  number,
@@ -857,7 +862,7 @@ const getIndentAndJSDoc = function (lines, jsdocNode) {
857
862
 
858
863
 
859
864
  const iterateAllJsdocs = (iterator, ruleConfig, contexts, additiveContexts) => {
860
- const trackedJsdocs = [];
865
+ const trackedJsdocs = new Set();
861
866
  let handler;
862
867
  let settings;
863
868
 
@@ -949,7 +954,7 @@ const iterateAllJsdocs = (iterator, ruleConfig, contexts, additiveContexts) => {
949
954
 
950
955
  const commentNode = (0, _jsdoccomment.getJSDocComment)(sourceCode, node, settings);
951
956
 
952
- if (trackedJsdocs.includes(commentNode)) {
957
+ if (trackedJsdocs.has(commentNode)) {
953
958
  return;
954
959
  }
955
960
 
@@ -964,14 +969,14 @@ const iterateAllJsdocs = (iterator, ruleConfig, contexts, additiveContexts) => {
964
969
  return;
965
970
  }
966
971
 
967
- trackedJsdocs.push(commentNode);
972
+ trackedJsdocs.add(commentNode);
968
973
  callIterator(context, node, [commentNode], state);
969
974
  },
970
975
 
971
976
  'Program:exit'() {
972
977
  const allComments = sourceCode.getAllComments();
973
978
  const untrackedJSdoc = allComments.filter(node => {
974
- return !trackedJsdocs.includes(node);
979
+ return !trackedJsdocs.has(node);
975
980
  });
976
981
  callIterator(context, null, untrackedJSdoc, state, true);
977
982
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/iterateJsdoc.js"],"names":["rewireSpecs","seedTokens","util","globalState","Map","getBasicUtils","context","tagNamePreference","mode","utils","reportSettings","message","report","loc","start","column","line","parseClosureTemplateTag","tag","jsdocUtils","pathDoesNotBeginWith","getPreferredTagNameObject","tagName","ret","getPreferredTagName","isObject","replacement","blocked","getUtils","node","jsdoc","jsdocNode","settings","iteratingAll","ruleConfig","indent","ancestors","getAncestors","sourceCode","getSourceCode","overrideReplacesDocs","ignoreReplacesDocs","implementsReplacesDocs","augmentsExtendsReplacesDocs","maxLines","minLines","isIteratingFunction","includes","type","isVirtualFunction","hasATag","stringify","tagBlock","specRewire","reportJSDoc","msg","handler","data","fixer","replaceText","getRegexFromString","str","requiredFlags","getTagDescription","tg","descriptions","source","some","tokens","end","lineEnd","postDelimiter","postTag","name","description","desc","slice","push","join","getDescription","lastDescriptionLine","idx","length","changeTag","src","entries","setTag","number","delimiter","removeTag","removeTagItem","tagIndex","tagSourceOffset","tagSource","tags","lastIndex","firstNumber","tagIdx","sourceIndex","findIndex","srcNumber","spliceCount","splice","addTag","targetTagName","getFirstLine","firstLine","emptyTokens","prop","addLine","addLines","numLines","makeLine","makeLines","Array","from","lines","makeMultiline","postName","postType","trimEnd","flattenRoots","params","getFunctionParameterNames","useDefaultObjectProperties","hasParams","isGenerator","generator","value","declaration","isConstructor","getJsdocTagsDeep","skipReportingBlockedTag","allowObjectReturn","defaultMessage","hasTag","getTags","isValidTag","definedTags","names","comparePaths","dropPathSegmentQuotes","avoidDocs","classHasTag","exemptSpeciaMethods","meta","schema","exemptedBy","options","getPresentTags","method","otherModeMaps","result","otherResult","otherModeMap","otherMode","every","getTagStructureForMode","mde","structuredTags","hasDefinedTypeTag","hasValueOrExecutorHasNonEmptyResolveValue","anyPromiseAsReturn","hasYieldValue","hasYieldReturnValue","hasThrowValue","isAsync","async","filterTags","item","tagList","filter","getTagsByType","hasOptionTag","Boolean","getClassNode","reverse","find","parent","getClassJsdoc","classNode","classJsdocNode","indnt","repeat","classJsdoc","forEachPreferredTag","arrayHandler","matchingJsdocTags","matchingJsdocTag","getSettings","ignorePrivate","ignoreInternal","Number","preferredTypes","parserPath","setTagStructure","overrideTagStructure","error","makeReport","commentNode","fix","jsdocLoc","lineNumber","colNumber","iterate","info","iterator","state","checkInternal","checkPrivate","getIndentAndJSDoc","sourceLine","charAt","jsdc","iterateAllJsdocs","contexts","additiveContexts","trackedJsdocs","callIterator","jsdocNodes","lastCall","test","getText","comment","selector","lastComment","exit","create","reducedNode","nonComment","allComments","getAllComments","untrackedJSdoc","checkFile","iterateJsdoc","metaType","TypeError","contextDefaults","contextSelected","matchContext","match","enforcedContexts","map","obj","hasPlainAny","hasObjectAny","ctxt","checkJsdoc","contextObject","getContextObject","bind"],"mappings":"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","sourcesContent":["/* eslint-disable jsdoc/valid-types */\n\nimport {\n getReducedASTNode,\n getJSDocComment,\n commentHandler,\n parseComment,\n} from '@es-joy/jsdoccomment';\nimport {\n stringify as commentStringify,\n util,\n} from 'comment-parser';\nimport jsdocUtils from './jsdocUtils';\n\nconst {\n rewireSpecs,\n seedTokens,\n} = util;\n\n/*\nconst {\n align as commentAlign,\n flow: commentFlow,\n indent: commentIndent,\n} = transforms;\n*/\n\nconst globalState = new Map();\n\nconst getBasicUtils = (context, {\n tagNamePreference,\n mode,\n}) => {\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.parseClosureTemplateTag = (tag) => {\n return jsdocUtils.parseClosureTemplateTag(tag);\n };\n\n utils.pathDoesNotBeginWith = jsdocUtils.pathDoesNotBeginWith;\n\n utils.getPreferredTagNameObject = ({\n tagName,\n }) => {\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 indent,\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 ignoreReplacesDocs,\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([\n 'callback', 'function', 'func', 'method',\n ]);\n };\n\n utils.stringify = (tagBlock, specRewire) => {\n return commentStringify(specRewire ? rewireSpecs(tagBlock) : tagBlock);\n };\n\n utils.reportJSDoc = (msg, tag, handler, specRewire, data) => {\n report(msg, handler ? (fixer) => {\n handler();\n const replacement = utils.stringify(jsdoc, specRewire);\n\n return fixer.replaceText(jsdocNode, replacement);\n } : null, tag, data);\n };\n\n utils.getRegexFromString = (str, requiredFlags) => {\n return jsdocUtils.getRegexFromString(str, requiredFlags);\n };\n\n utils.getTagDescription = (tg) => {\n const descriptions = [];\n tg.source.some(({\n tokens: {\n end,\n lineEnd,\n postDelimiter,\n tag,\n postTag,\n name,\n type,\n description,\n },\n }) => {\n const desc = (\n tag && postTag ||\n !tag && !name && !type && postDelimiter || ''\n\n // Remove space\n ).slice(1) +\n (description || '') + (lineEnd || '');\n\n if (end) {\n if (desc) {\n descriptions.push(desc);\n }\n\n return true;\n }\n\n descriptions.push(desc);\n\n return false;\n });\n\n return descriptions.join('\\n');\n };\n\n utils.getDescription = () => {\n const descriptions = [];\n let lastDescriptionLine = 0;\n jsdoc.source.some(({\n tokens: {\n description,\n tag,\n end,\n },\n }, idx) => {\n if (idx && (tag || end)) {\n lastDescriptionLine = idx - 1;\n\n return true;\n }\n\n if (idx || description) {\n descriptions.push(description || (descriptions.length ? '' : '\\n'));\n }\n\n return false;\n });\n\n return {\n description: descriptions.join('\\n'),\n lastDescriptionLine,\n };\n };\n\n utils.changeTag = (tag, ...tokens) => {\n for (const [\n idx,\n src,\n ] of tag.source.entries()) {\n src.tokens = {\n ...src.tokens,\n ...tokens[idx],\n };\n }\n };\n\n utils.setTag = (tag, tokens) => {\n tag.source = [\n {\n // Or tag.source[0].number?\n number: tag.line,\n tokens: seedTokens({\n delimiter: '*',\n postDelimiter: ' ',\n start: indent + ' ',\n tag: '@' + tag.tag,\n ...tokens,\n }),\n },\n ];\n };\n\n utils.removeTag = (idx) => {\n return utils.removeTagItem(idx);\n };\n\n utils.removeTagItem = (tagIndex, tagSourceOffset = 0) => {\n const {\n source: tagSource,\n } = jsdoc.tags[tagIndex];\n let lastIndex;\n const firstNumber = jsdoc.source[0].number;\n tagSource.some(({\n number,\n }, tagIdx) => {\n const sourceIndex = jsdoc.source.findIndex(({\n number: srcNumber,\n tokens: {\n end,\n },\n }) => {\n return number === srcNumber && !end;\n });\n // istanbul ignore else\n if (sourceIndex > -1) {\n let spliceCount = 1;\n tagSource.slice(tagIdx + 1).some(({\n tokens: {\n tag,\n end,\n },\n }) => {\n if (!tag && !end) {\n spliceCount++;\n\n return false;\n }\n\n return true;\n });\n jsdoc.source.splice(sourceIndex + tagSourceOffset, spliceCount - tagSourceOffset);\n tagSource.splice(tagIdx + tagSourceOffset, spliceCount - tagSourceOffset);\n lastIndex = sourceIndex;\n\n return true;\n }\n\n // istanbul ignore next\n return false;\n });\n for (const [\n idx,\n src,\n ] of jsdoc.source.slice(lastIndex).entries()) {\n src.number = firstNumber + lastIndex + idx;\n }\n\n // Todo: Once rewiring of tags may be fixed in comment-parser to reflect missing tags,\n // this step should be added here (so that, e.g., if accessing `jsdoc.tags`,\n // such as to add a new tag, the correct information will be available)\n };\n\n utils.addTag = (\n targetTagName,\n number = (jsdoc.tags[jsdoc.tags.length - 1]?.source[0]?.number ?? 0) + 1,\n tokens = {},\n ) => {\n jsdoc.source.splice(number, 0, {\n number,\n source: '',\n tokens: seedTokens({\n delimiter: '*',\n postDelimiter: ' ',\n start: indent + ' ',\n tag: `@${targetTagName}`,\n ...tokens,\n }),\n });\n for (const src of jsdoc.source.slice(number + 1)) {\n src.number++;\n }\n };\n\n utils.getFirstLine = () => {\n let firstLine;\n for (const {\n number,\n tokens: {\n tag,\n },\n } of jsdoc.source) {\n if (tag) {\n firstLine = number;\n break;\n }\n }\n\n return firstLine;\n };\n\n utils.seedTokens = seedTokens;\n\n utils.emptyTokens = (tokens) => {\n for (const prop of [\n 'start',\n 'postDelimiter',\n 'tag',\n 'type',\n 'postType',\n 'postTag',\n 'name',\n 'postName',\n 'description',\n 'end',\n 'lineEnd',\n ]) {\n tokens[prop] = '';\n }\n };\n\n utils.addLine = (sourceIndex, tokens) => {\n const number = (jsdoc.source[sourceIndex - 1]?.number || 0) + 1;\n jsdoc.source.splice(sourceIndex, 0, {\n number,\n source: '',\n tokens: seedTokens(tokens),\n });\n\n for (const src of jsdoc.source.slice(number + 1)) {\n src.number++;\n }\n // If necessary, we can rewire the tags (misnamed method)\n // rewireSource(jsdoc);\n };\n\n utils.addLines = (tagIndex, tagSourceOffset, numLines) => {\n const {\n source: tagSource,\n } = jsdoc.tags[tagIndex];\n let lastIndex;\n const firstNumber = jsdoc.source[0].number;\n tagSource.some(({\n number,\n }) => {\n const makeLine = () => {\n return {\n number,\n source: '',\n tokens: seedTokens({\n delimiter: '*',\n start: indent + ' ',\n }),\n };\n };\n\n const makeLines = () => {\n return Array.from({\n length: numLines,\n }, makeLine);\n };\n\n const sourceIndex = jsdoc.source.findIndex(({\n number: srcNumber,\n tokens: {\n end,\n },\n }) => {\n return number === srcNumber && !end;\n });\n // istanbul ignore else\n if (sourceIndex > -1) {\n const lines = makeLines();\n jsdoc.source.splice(sourceIndex + tagSourceOffset, 0, ...lines);\n\n // tagSource.splice(tagIdx + 1, 0, ...makeLines());\n lastIndex = sourceIndex;\n\n return true;\n }\n\n // istanbul ignore next\n return false;\n });\n for (const [\n idx,\n src,\n ] of jsdoc.source.slice(lastIndex).entries()) {\n src.number = firstNumber + lastIndex + idx;\n }\n };\n\n utils.makeMultiline = () => {\n const {\n source: [\n {\n tokens,\n },\n ],\n } = jsdoc;\n const {\n postDelimiter,\n description,\n lineEnd,\n tag,\n name,\n type,\n } = tokens;\n\n let {\n tokens: {\n postName,\n postTag,\n postType,\n },\n } = jsdoc.source[0];\n\n // Strip trailing leftovers from single line ending\n if (!description) {\n if (postName) {\n postName = '';\n } else if (postType) {\n postType = '';\n // eslint-disable-next-line no-inline-comments\n } else /* istanbul ignore else -- `comment-parser` prevents empty blocks currently per https://github.com/syavorsky/comment-parser/issues/128 */ if (postTag) {\n postTag = '';\n }\n }\n\n utils.emptyTokens(tokens);\n\n utils.addLine(1, {\n delimiter: '*',\n\n // If a description were present, it may have whitespace attached\n // due to being at the end of the single line\n description: description.trimEnd(),\n name,\n postDelimiter,\n postName,\n postTag,\n postType,\n start: indent + ' ',\n tag,\n type,\n });\n utils.addLine(2, {\n end: '*/',\n lineEnd,\n start: indent + ' ',\n });\n };\n\n utils.flattenRoots = (params) => {\n return jsdocUtils.flattenRoots(params);\n };\n\n utils.getFunctionParameterNames = (useDefaultObjectProperties) => {\n return jsdocUtils.getFunctionParameterNames(node, useDefaultObjectProperties);\n };\n\n utils.hasParams = () => {\n return jsdocUtils.hasParams(node);\n };\n\n utils.isGenerator = () => {\n return node && (\n node.generator ||\n node.type === 'MethodDefinition' && node.value.generator ||\n [\n 'ExportNamedDeclaration', 'ExportDefaultDeclaration',\n ].includes(node.type) &&\n node.declaration.generator\n );\n };\n\n utils.isConstructor = () => {\n return jsdocUtils.isConstructor(node);\n };\n\n utils.getJsdocTagsDeep = (tagName) => {\n const name = utils.getPreferredTagName({\n tagName,\n });\n if (!name) {\n return false;\n }\n\n return jsdocUtils.getJsdocTagsDeep(jsdoc, name);\n };\n\n utils.getPreferredTagName = ({\n tagName,\n skipReportingBlockedTag = false,\n allowObjectReturn = false,\n defaultMessage = `Unexpected tag \\`@${tagName}\\``,\n }) => {\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\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 = (names) => {\n return jsdocUtils.hasATag(jsdoc, names);\n };\n\n utils.hasTag = (name) => {\n return jsdocUtils.hasTag(jsdoc, name);\n };\n\n utils.comparePaths = (name) => {\n return jsdocUtils.comparePaths(name);\n };\n\n utils.dropPathSegmentQuotes = (name) => {\n return jsdocUtils.dropPathSegmentQuotes(name);\n };\n\n utils.avoidDocs = () => {\n if (\n ignoreReplacesDocs !== false &&\n (utils.hasTag('ignore') || utils.classHasTag('ignore')) ||\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([\n 'augments', 'extends',\n ]) ||\n utils.classHasTag('augments') ||\n utils.classHasTag('extends'))) {\n return true;\n }\n\n if (jsdocUtils.exemptSpeciaMethods(\n jsdoc, node, context, ruleConfig.meta.schema,\n )) {\n return true;\n }\n\n const exemptedBy = context.options[0]?.exemptedBy ?? [\n 'inheritDoc',\n ...mode === 'closure' ? [] : [\n 'inheritdoc',\n ],\n ];\n if (exemptedBy.length && utils.getPresentTags(exemptedBy).length) {\n return true;\n }\n\n return false;\n };\n\n for (const method of [\n 'tagMightHaveNamePosition',\n 'tagMightHaveTypePosition',\n ]) {\n utils[method] = (tagName, otherModeMaps) => {\n const result = jsdocUtils[method](tagName);\n if (result) {\n return true;\n }\n\n if (!otherModeMaps) {\n return false;\n }\n\n const otherResult = otherModeMaps.some((otherModeMap) => {\n return jsdocUtils[method](tagName, otherModeMap);\n });\n\n return otherResult ? {\n otherMode: true,\n } : false;\n };\n }\n\n for (const method of [\n 'tagMustHaveNamePosition',\n 'tagMustHaveTypePosition',\n 'tagMissingRequiredTypeOrNamepath',\n ]) {\n utils[method] = (tagName, otherModeMaps) => {\n const result = jsdocUtils[method](tagName);\n if (!result) {\n return false;\n }\n\n // if (!otherModeMaps) { return true; }\n\n const otherResult = otherModeMaps.every((otherModeMap) => {\n return jsdocUtils[method](tagName, otherModeMap);\n });\n\n return otherResult ? true : {\n otherMode: false,\n };\n };\n }\n\n for (const method of [\n 'isNamepathDefiningTag',\n 'tagMightHaveNamepath',\n ]) {\n utils[method] = (tagName) => {\n return jsdocUtils[method](tagName);\n };\n }\n\n utils.getTagStructureForMode = (mde) => {\n return jsdocUtils.getTagStructureForMode(mde, settings.structuredTags);\n };\n\n utils.hasDefinedTypeTag = (tag) => {\n return jsdocUtils.hasDefinedTypeTag(tag);\n };\n\n utils.hasValueOrExecutorHasNonEmptyResolveValue = (anyPromiseAsReturn) => {\n return jsdocUtils.hasValueOrExecutorHasNonEmptyResolveValue(node, anyPromiseAsReturn);\n };\n\n utils.hasYieldValue = () => {\n if ([\n 'ExportNamedDeclaration', 'ExportDefaultDeclaration',\n ].includes(node.type)) {\n return jsdocUtils.hasYieldValue(node.declaration);\n }\n\n return jsdocUtils.hasYieldValue(node);\n };\n\n utils.hasYieldReturnValue = () => {\n return jsdocUtils.hasYieldValue(node, true);\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 {\n tags,\n } = context.options[0] ?? {};\n\n return Boolean(tags && tags.includes(tagName));\n };\n\n utils.getClassNode = () => {\n return [\n ...ancestors, node,\n ].reverse().find((parent) => {\n return parent && [\n 'ClassDeclaration', 'ClassExpression',\n ].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 indnt = ' '.repeat(classJsdocNode.loc.start.column);\n\n return parseComment(classJsdocNode, indnt);\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\n const matchingJsdocTags = jsdoc.tags.filter(({\n tag,\n }) => {\n return tag === targetTagName;\n });\n\n for (const matchingJsdocTag of matchingJsdocTags) {\n arrayHandler(matchingJsdocTag, targetTagName);\n }\n };\n\n return utils;\n};\n\nconst getSettings = (context) => {\n /* eslint-disable canonical/sort-keys */\n const settings = {\n // All rules\n ignorePrivate: Boolean(context.settings.jsdoc?.ignorePrivate),\n ignoreInternal: Boolean(context.settings.jsdoc?.ignoreInternal),\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 // `check-types`, `no-undefined-types`, `valid-types`\n structuredTags: context.settings.jsdoc?.structuredTags ?? {},\n\n // `require-param`, `require-description`, `require-example`,\n // `require-returns`, `require-throw`, `require-yields`\n overrideReplacesDocs: context.settings.jsdoc?.overrideReplacesDocs,\n ignoreReplacesDocs: context.settings.jsdoc?.ignoreReplacesDocs,\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 canonical/sort-keys */\n\n jsdocUtils.setTagStructure(settings.mode);\n try {\n jsdocUtils.overrideTagStructure(settings.structuredTags);\n } catch (error) {\n context.report({\n loc: {\n start: {\n column: 1,\n line: 1,\n },\n },\n message: error.message,\n });\n\n return false;\n }\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 if (!('line' in jsdocLoc)) {\n jsdocLoc.line = jsdocLoc.source[0].number;\n }\n\n const lineNumber = commentNode.loc.start.line + jsdocLoc.line;\n\n loc = {\n end: {\n line: lineNumber,\n },\n start: {\n line: lineNumber,\n },\n };\n\n // Todo: Remove ignore once `check-examples` can be restored for ESLint 8+\n // istanbul ignore if\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/* eslint-disable jsdoc/no-undefined-types -- Need to build this in; see https://www.typescriptlang.org/docs/handbook/utility-types.html */\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/* eslint-enable jsdoc/no-undefined-types -- Need to build this in */\n\nconst iterate = (\n info,\n indent, jsdoc,\n ruleConfig, context, lines, jsdocNode, node, settings,\n sourceCode, iterator, state, iteratingAll,\n) => {\n const report = makeReport(context, jsdocNode);\n\n const utils = getUtils(\n node,\n jsdoc,\n jsdocNode,\n settings,\n report,\n context,\n iteratingAll,\n ruleConfig,\n indent,\n );\n\n if (\n !ruleConfig.checkInternal && settings.ignoreInternal &&\n utils.hasTag('internal')\n ) {\n return;\n }\n\n if (\n !ruleConfig.checkPrivate && settings.ignorePrivate &&\n (\n utils.hasTag('private') ||\n jsdoc.tags\n .filter(({\n tag,\n }) => {\n return tag === 'access';\n })\n .some(({\n description,\n }) => {\n return description === 'private';\n })\n )\n ) {\n return;\n }\n\n iterator({\n context,\n globalState,\n indent,\n info,\n iteratingAll,\n jsdoc,\n jsdocNode,\n node,\n report,\n settings,\n sourceCode,\n state,\n utils,\n });\n};\n\nconst getIndentAndJSDoc = function (lines, jsdocNode) {\n const sourceLine = lines[jsdocNode.loc.start.line - 1];\n const indnt = sourceLine.charAt(0).repeat(jsdocNode.loc.start.column);\n const jsdc = parseComment(jsdocNode, indnt);\n\n return [\n indnt, jsdc,\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 * @param contexts\n * @param {boolean} additiveContexts\n */\nconst iterateAllJsdocs = (iterator, ruleConfig, contexts, additiveContexts) => {\n const trackedJsdocs = [];\n\n let handler;\n let settings;\n const callIterator = (context, node, jsdocNodes, state, lastCall) => {\n const sourceCode = context.getSourceCode();\n const {\n lines,\n } = sourceCode;\n\n const utils = getBasicUtils(context, settings);\n for (const jsdocNode of jsdocNodes) {\n if (!(/^\\/\\*\\*\\s/u).test(sourceCode.getText(jsdocNode))) {\n continue;\n }\n\n const [\n indent,\n jsdoc,\n ] = getIndentAndJSDoc(\n lines, jsdocNode,\n );\n\n if (additiveContexts) {\n for (const [\n idx,\n {\n comment,\n },\n ] of contexts.entries()) {\n if (comment && handler(comment, jsdoc) === false) {\n continue;\n }\n\n iterate(\n {\n comment,\n lastIndex: idx,\n selector: node?.type,\n },\n indent,\n jsdoc,\n ruleConfig,\n context,\n lines,\n jsdocNode,\n node,\n settings,\n sourceCode,\n iterator,\n state,\n true,\n );\n }\n\n continue;\n }\n\n let lastComment;\n let lastIndex;\n // eslint-disable-next-line no-loop-func\n if (contexts && contexts.every(({\n comment,\n }, idx) => {\n lastComment = comment;\n lastIndex = idx;\n\n return comment && handler(comment, jsdoc) === false;\n })) {\n continue;\n }\n\n iterate(\n lastComment ? {\n comment: lastComment,\n lastIndex,\n selector: node?.type,\n } : {\n lastIndex,\n selector: node?.type,\n },\n indent,\n jsdoc,\n ruleConfig,\n context,\n lines,\n jsdocNode,\n node,\n settings,\n sourceCode,\n iterator,\n state,\n true,\n );\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 settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n if (contexts) {\n handler = commentHandler(settings);\n }\n\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 commentNode = getJSDocComment(sourceCode, node, settings);\n if (trackedJsdocs.includes(commentNode)) {\n return;\n }\n\n if (!commentNode) {\n if (ruleConfig.nonComment) {\n ruleConfig.nonComment({\n node,\n state,\n });\n }\n\n return;\n }\n\n trackedJsdocs.push(commentNode);\n callIterator(context, node, [\n commentNode,\n ], 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 if (!settings) {\n return {};\n }\n\n return {\n 'Program:exit' () {\n const allComments = sourceCode.getAllComments();\n const {\n lines,\n } = 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 // eslint-disable-next-line unicorn/prefer-export-from -- Avoid experimental parser\n parseComment,\n};\n\n/**\n * @param {JsdocVisitor} iterator\n * @param {{\n * meta: any,\n * contextDefaults?: true | string[],\n * contextSelected?: true,\n * iterateAllJsdocs?: true,\n * }} ruleConfig\n */\nexport default function iterateJsdoc (iterator, ruleConfig) {\n const metaType = ruleConfig?.meta?.type;\n if (!metaType || ![\n 'problem', 'suggestion', 'layout',\n ].includes(metaType)) {\n throw new TypeError('Rule must include `meta.type` option (with value \"problem\", \"suggestion\", or \"layout\")');\n }\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 const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n let contexts;\n if (ruleConfig.contextDefaults || ruleConfig.contextSelected || ruleConfig.matchContext) {\n contexts = ruleConfig.matchContext && context.options[0]?.match ?\n context.options[0].match :\n jsdocUtils.enforcedContexts(context, ruleConfig.contextDefaults);\n\n if (contexts) {\n contexts = contexts.map((obj) => {\n if (typeof obj === 'object' && !obj.context) {\n return {\n ...obj,\n context: 'any',\n };\n }\n\n return obj;\n });\n }\n\n const hasPlainAny = contexts?.includes('any');\n const hasObjectAny = !hasPlainAny && contexts?.find((ctxt) => {\n return ctxt?.context === 'any';\n });\n if (hasPlainAny || hasObjectAny) {\n return iterateAllJsdocs(\n iterator, ruleConfig, hasObjectAny ? contexts : null, ruleConfig.matchContext,\n ).create(context);\n }\n }\n\n const sourceCode = context.getSourceCode();\n const {\n lines,\n } = sourceCode;\n\n const state = {};\n\n const checkJsdoc = (info, handler, node) => {\n const jsdocNode = getJSDocComment(sourceCode, node, settings);\n\n if (!jsdocNode) {\n return;\n }\n\n const [\n indent,\n jsdoc,\n ] = getIndentAndJSDoc(\n lines, jsdocNode,\n );\n\n if (\n // Note, `handler` should already be bound in its first argument\n // with these only to be called after the value of\n // `comment`\n handler && handler(jsdoc) === false\n ) {\n return;\n }\n\n iterate(\n info, indent, jsdoc, ruleConfig, context, lines, jsdocNode, node, settings, sourceCode, iterator, state,\n );\n };\n\n let contextObject = {};\n\n if (contexts && (\n ruleConfig.contextDefaults || ruleConfig.contextSelected || ruleConfig.matchContext\n )) {\n contextObject = jsdocUtils.getContextObject(\n contexts,\n checkJsdoc,\n commentHandler(settings),\n );\n } else {\n for (const prop of [\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n ]) {\n contextObject[prop] = checkJsdoc.bind(null, {\n selector: prop,\n }, null);\n }\n }\n\n if (ruleConfig.exit) {\n contextObject['Program:exit'] = () => {\n ruleConfig.exit({\n context,\n state,\n });\n };\n }\n\n return contextObject;\n },\n meta: ruleConfig.meta,\n };\n}\n"],"file":"iterateJsdoc.js"}
1
+ {"version":3,"sources":["../src/iterateJsdoc.js"],"names":["rewireSpecs","seedTokens","util","globalState","Map","getBasicUtils","context","tagNamePreference","mode","utils","reportSettings","message","report","loc","start","column","line","parseClosureTemplateTag","tag","jsdocUtils","pathDoesNotBeginWith","getPreferredTagNameObject","tagName","ret","getPreferredTagName","isObject","replacement","blocked","getUtils","node","jsdoc","jsdocNode","settings","iteratingAll","ruleConfig","indent","ancestors","getAncestors","sourceCode","getSourceCode","overrideReplacesDocs","ignoreReplacesDocs","implementsReplacesDocs","augmentsExtendsReplacesDocs","maxLines","minLines","isIteratingFunction","includes","type","isVirtualFunction","hasATag","stringify","tagBlock","specRewire","reportJSDoc","msg","handler","data","fixer","replaceText","getRegexFromString","str","requiredFlags","getTagDescription","tg","descriptions","source","some","tokens","end","lineEnd","postDelimiter","postTag","name","description","desc","slice","push","join","getDescription","lastDescriptionLine","idx","length","changeTag","src","entries","setTag","number","delimiter","removeTag","removeTagItem","tagIndex","tagSourceOffset","tagSource","tags","lastIndex","firstNumber","tagIdx","sourceIndex","findIndex","srcNumber","spliceCount","splice","addTag","targetTagName","getFirstLine","firstLine","emptyTokens","prop","addLine","addLines","numLines","makeLine","makeLines","Array","from","lines","makeMultiline","postName","postType","trimEnd","flattenRoots","params","getFunctionParameterNames","useDefaultObjectProperties","hasParams","isGenerator","generator","value","declaration","isConstructor","getJsdocTagsDeep","skipReportingBlockedTag","allowObjectReturn","defaultMessage","hasTag","getTags","isValidTag","definedTags","names","comparePaths","dropPathSegmentQuotes","avoidDocs","classHasTag","exemptSpeciaMethods","meta","schema","exemptedBy","options","getPresentTags","method","otherModeMaps","result","otherResult","otherModeMap","otherMode","every","getTagStructureForMode","mde","structuredTags","hasDefinedTypeTag","hasValueOrExecutorHasNonEmptyResolveValue","anyPromiseAsReturn","hasYieldValue","hasYieldReturnValue","hasThrowValue","isAsync","async","filterTags","item","tagList","filter","getTagsByType","hasOptionTag","Boolean","getClassNode","reverse","find","parent","getClassJsdoc","classNode","classJsdocNode","indnt","repeat","classJsdoc","forEachPreferredTag","arrayHandler","matchingJsdocTags","matchingJsdocTag","getSettings","ignorePrivate","ignoreInternal","Number","preferredTypes","parserPath","setTagStructure","overrideTagStructure","error","makeReport","commentNode","fix","jsdocLoc","lineNumber","colNumber","iterate","info","iterator","state","checkInternal","checkPrivate","getIndentAndJSDoc","sourceLine","charAt","jsdc","iterateAllJsdocs","contexts","additiveContexts","trackedJsdocs","Set","callIterator","jsdocNodes","lastCall","test","getText","comment","selector","lastComment","exit","create","reducedNode","has","nonComment","add","allComments","getAllComments","untrackedJSdoc","checkFile","iterateJsdoc","metaType","TypeError","contextDefaults","contextSelected","matchContext","match","enforcedContexts","map","obj","hasPlainAny","hasObjectAny","ctxt","checkJsdoc","contextObject","getContextObject","bind"],"mappings":"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","sourcesContent":["import {\n getReducedASTNode,\n getJSDocComment,\n commentHandler,\n parseComment,\n} from '@es-joy/jsdoccomment';\nimport {\n stringify as commentStringify,\n util,\n} from 'comment-parser';\nimport jsdocUtils from './jsdocUtils';\n\nconst {\n rewireSpecs,\n seedTokens,\n} = util;\n\n/*\nconst {\n align as commentAlign,\n flow: commentFlow,\n indent: commentIndent,\n} = transforms;\n*/\n\nconst globalState = new Map();\n\nconst getBasicUtils = (context, {\n tagNamePreference,\n mode,\n}) => {\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.parseClosureTemplateTag = (tag) => {\n return jsdocUtils.parseClosureTemplateTag(tag);\n };\n\n utils.pathDoesNotBeginWith = jsdocUtils.pathDoesNotBeginWith;\n\n utils.getPreferredTagNameObject = ({\n tagName,\n }) => {\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 indent,\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 ignoreReplacesDocs,\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([\n 'callback', 'function', 'func', 'method',\n ]);\n };\n\n utils.stringify = (tagBlock, specRewire) => {\n return commentStringify(specRewire ? rewireSpecs(tagBlock) : tagBlock);\n };\n\n utils.reportJSDoc = (msg, tag, handler, specRewire, data) => {\n report(msg, handler ? (fixer) => {\n handler();\n const replacement = utils.stringify(jsdoc, specRewire);\n\n return fixer.replaceText(jsdocNode, replacement);\n } : null, tag, data);\n };\n\n utils.getRegexFromString = (str, requiredFlags) => {\n return jsdocUtils.getRegexFromString(str, requiredFlags);\n };\n\n utils.getTagDescription = (tg) => {\n const descriptions = [];\n tg.source.some(({\n tokens: {\n end,\n lineEnd,\n postDelimiter,\n tag,\n postTag,\n name,\n type,\n description,\n },\n }) => {\n const desc = (\n tag && postTag ||\n !tag && !name && !type && postDelimiter || ''\n\n // Remove space\n ).slice(1) +\n (description || '') + (lineEnd || '');\n\n if (end) {\n if (desc) {\n descriptions.push(desc);\n }\n\n return true;\n }\n\n descriptions.push(desc);\n\n return false;\n });\n\n return descriptions.join('\\n');\n };\n\n utils.getDescription = () => {\n const descriptions = [];\n let lastDescriptionLine = 0;\n jsdoc.source.some(({\n tokens: {\n description,\n tag,\n end,\n },\n }, idx) => {\n if (idx && (tag || end)) {\n lastDescriptionLine = idx - 1;\n\n return true;\n }\n\n if (idx || description) {\n descriptions.push(description || (descriptions.length ? '' : '\\n'));\n }\n\n return false;\n });\n\n return {\n description: descriptions.join('\\n'),\n lastDescriptionLine,\n };\n };\n\n utils.changeTag = (tag, ...tokens) => {\n for (const [\n idx,\n src,\n ] of tag.source.entries()) {\n src.tokens = {\n ...src.tokens,\n ...tokens[idx],\n };\n }\n };\n\n utils.setTag = (tag, tokens) => {\n tag.source = [\n {\n // Or tag.source[0].number?\n number: tag.line,\n tokens: seedTokens({\n delimiter: '*',\n postDelimiter: ' ',\n start: indent + ' ',\n tag: '@' + tag.tag,\n ...tokens,\n }),\n },\n ];\n };\n\n utils.removeTag = (idx) => {\n return utils.removeTagItem(idx);\n };\n\n utils.removeTagItem = (tagIndex, tagSourceOffset = 0) => {\n const {\n source: tagSource,\n } = jsdoc.tags[tagIndex];\n let lastIndex;\n const firstNumber = jsdoc.source[0].number;\n tagSource.some(({\n number,\n }, tagIdx) => {\n const sourceIndex = jsdoc.source.findIndex(({\n number: srcNumber,\n tokens: {\n end,\n },\n }) => {\n return number === srcNumber && !end;\n });\n // istanbul ignore else\n if (sourceIndex > -1) {\n let spliceCount = 1;\n tagSource.slice(tagIdx + 1).some(({\n tokens: {\n tag,\n end,\n },\n }) => {\n if (!tag && !end) {\n spliceCount++;\n\n return false;\n }\n\n return true;\n });\n jsdoc.source.splice(sourceIndex + tagSourceOffset, spliceCount - tagSourceOffset);\n tagSource.splice(tagIdx + tagSourceOffset, spliceCount - tagSourceOffset);\n lastIndex = sourceIndex;\n\n return true;\n }\n\n // istanbul ignore next\n return false;\n });\n for (const [\n idx,\n src,\n ] of jsdoc.source.slice(lastIndex).entries()) {\n src.number = firstNumber + lastIndex + idx;\n }\n\n // Todo: Once rewiring of tags may be fixed in comment-parser to reflect missing tags,\n // this step should be added here (so that, e.g., if accessing `jsdoc.tags`,\n // such as to add a new tag, the correct information will be available)\n };\n\n utils.addTag = (\n targetTagName,\n number = (jsdoc.tags[jsdoc.tags.length - 1]?.source[0]?.number ?? jsdoc.source.findIndex(({\n tokens: {\n tag,\n },\n }) => {\n return tag;\n }) - 1) + 1,\n tokens = {},\n ) => {\n jsdoc.source.splice(number, 0, {\n number,\n source: '',\n tokens: seedTokens({\n delimiter: '*',\n postDelimiter: ' ',\n start: indent + ' ',\n tag: `@${targetTagName}`,\n ...tokens,\n }),\n });\n for (const src of jsdoc.source.slice(number + 1)) {\n src.number++;\n }\n };\n\n utils.getFirstLine = () => {\n let firstLine;\n for (const {\n number,\n tokens: {\n tag,\n },\n } of jsdoc.source) {\n if (tag) {\n firstLine = number;\n break;\n }\n }\n\n return firstLine;\n };\n\n utils.seedTokens = seedTokens;\n\n utils.emptyTokens = (tokens) => {\n for (const prop of [\n 'start',\n 'postDelimiter',\n 'tag',\n 'type',\n 'postType',\n 'postTag',\n 'name',\n 'postName',\n 'description',\n 'end',\n 'lineEnd',\n ]) {\n tokens[prop] = '';\n }\n };\n\n utils.addLine = (sourceIndex, tokens) => {\n const number = (jsdoc.source[sourceIndex - 1]?.number || 0) + 1;\n jsdoc.source.splice(sourceIndex, 0, {\n number,\n source: '',\n tokens: seedTokens(tokens),\n });\n\n for (const src of jsdoc.source.slice(number + 1)) {\n src.number++;\n }\n // If necessary, we can rewire the tags (misnamed method)\n // rewireSource(jsdoc);\n };\n\n utils.addLines = (tagIndex, tagSourceOffset, numLines) => {\n const {\n source: tagSource,\n } = jsdoc.tags[tagIndex];\n let lastIndex;\n const firstNumber = jsdoc.source[0].number;\n tagSource.some(({\n number,\n }) => {\n const makeLine = () => {\n return {\n number,\n source: '',\n tokens: seedTokens({\n delimiter: '*',\n start: indent + ' ',\n }),\n };\n };\n\n const makeLines = () => {\n return Array.from({\n length: numLines,\n }, makeLine);\n };\n\n const sourceIndex = jsdoc.source.findIndex(({\n number: srcNumber,\n tokens: {\n end,\n },\n }) => {\n return number === srcNumber && !end;\n });\n // istanbul ignore else\n if (sourceIndex > -1) {\n const lines = makeLines();\n jsdoc.source.splice(sourceIndex + tagSourceOffset, 0, ...lines);\n\n // tagSource.splice(tagIdx + 1, 0, ...makeLines());\n lastIndex = sourceIndex;\n\n return true;\n }\n\n // istanbul ignore next\n return false;\n });\n for (const [\n idx,\n src,\n ] of jsdoc.source.slice(lastIndex).entries()) {\n src.number = firstNumber + lastIndex + idx;\n }\n };\n\n utils.makeMultiline = () => {\n const {\n source: [\n {\n tokens,\n },\n ],\n } = jsdoc;\n const {\n postDelimiter,\n description,\n lineEnd,\n tag,\n name,\n type,\n } = tokens;\n\n let {\n tokens: {\n postName,\n postTag,\n postType,\n },\n } = jsdoc.source[0];\n\n // Strip trailing leftovers from single line ending\n if (!description) {\n if (postName) {\n postName = '';\n } else if (postType) {\n postType = '';\n // eslint-disable-next-line no-inline-comments\n } else /* istanbul ignore else -- `comment-parser` prevents empty blocks currently per https://github.com/syavorsky/comment-parser/issues/128 */ if (postTag) {\n postTag = '';\n }\n }\n\n utils.emptyTokens(tokens);\n\n utils.addLine(1, {\n delimiter: '*',\n\n // If a description were present, it may have whitespace attached\n // due to being at the end of the single line\n description: description.trimEnd(),\n name,\n postDelimiter,\n postName,\n postTag,\n postType,\n start: indent + ' ',\n tag,\n type,\n });\n utils.addLine(2, {\n end: '*/',\n lineEnd,\n start: indent + ' ',\n });\n };\n\n utils.flattenRoots = (params) => {\n return jsdocUtils.flattenRoots(params);\n };\n\n utils.getFunctionParameterNames = (useDefaultObjectProperties) => {\n return jsdocUtils.getFunctionParameterNames(node, useDefaultObjectProperties);\n };\n\n utils.hasParams = () => {\n return jsdocUtils.hasParams(node);\n };\n\n utils.isGenerator = () => {\n return node && (\n node.generator ||\n node.type === 'MethodDefinition' && node.value.generator ||\n [\n 'ExportNamedDeclaration', 'ExportDefaultDeclaration',\n ].includes(node.type) &&\n node.declaration.generator\n );\n };\n\n utils.isConstructor = () => {\n return jsdocUtils.isConstructor(node);\n };\n\n utils.getJsdocTagsDeep = (tagName) => {\n const name = utils.getPreferredTagName({\n tagName,\n });\n if (!name) {\n return false;\n }\n\n return jsdocUtils.getJsdocTagsDeep(jsdoc, name);\n };\n\n utils.getPreferredTagName = ({\n tagName,\n skipReportingBlockedTag = false,\n allowObjectReturn = false,\n defaultMessage = `Unexpected tag \\`@${tagName}\\``,\n }) => {\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\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 = (names) => {\n return jsdocUtils.hasATag(jsdoc, names);\n };\n\n utils.hasTag = (name) => {\n return jsdocUtils.hasTag(jsdoc, name);\n };\n\n utils.comparePaths = (name) => {\n return jsdocUtils.comparePaths(name);\n };\n\n utils.dropPathSegmentQuotes = (name) => {\n return jsdocUtils.dropPathSegmentQuotes(name);\n };\n\n utils.avoidDocs = () => {\n if (\n ignoreReplacesDocs !== false &&\n (utils.hasTag('ignore') || utils.classHasTag('ignore')) ||\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([\n 'augments', 'extends',\n ]) ||\n utils.classHasTag('augments') ||\n utils.classHasTag('extends'))) {\n return true;\n }\n\n if (jsdocUtils.exemptSpeciaMethods(\n jsdoc, node, context, ruleConfig.meta.schema,\n )) {\n return true;\n }\n\n const exemptedBy = context.options[0]?.exemptedBy ?? [\n 'inheritDoc',\n ...mode === 'closure' ? [] : [\n 'inheritdoc',\n ],\n ];\n if (exemptedBy.length && utils.getPresentTags(exemptedBy).length) {\n return true;\n }\n\n return false;\n };\n\n for (const method of [\n 'tagMightHaveNamePosition',\n 'tagMightHaveTypePosition',\n ]) {\n utils[method] = (tagName, otherModeMaps) => {\n const result = jsdocUtils[method](tagName);\n if (result) {\n return true;\n }\n\n if (!otherModeMaps) {\n return false;\n }\n\n const otherResult = otherModeMaps.some((otherModeMap) => {\n return jsdocUtils[method](tagName, otherModeMap);\n });\n\n return otherResult ? {\n otherMode: true,\n } : false;\n };\n }\n\n for (const method of [\n 'tagMustHaveNamePosition',\n 'tagMustHaveTypePosition',\n 'tagMissingRequiredTypeOrNamepath',\n ]) {\n utils[method] = (tagName, otherModeMaps) => {\n const result = jsdocUtils[method](tagName);\n if (!result) {\n return false;\n }\n\n // if (!otherModeMaps) { return true; }\n\n const otherResult = otherModeMaps.every((otherModeMap) => {\n return jsdocUtils[method](tagName, otherModeMap);\n });\n\n return otherResult ? true : {\n otherMode: false,\n };\n };\n }\n\n for (const method of [\n 'isNamepathDefiningTag',\n 'tagMightHaveNamepath',\n ]) {\n utils[method] = (tagName) => {\n return jsdocUtils[method](tagName);\n };\n }\n\n utils.getTagStructureForMode = (mde) => {\n return jsdocUtils.getTagStructureForMode(mde, settings.structuredTags);\n };\n\n utils.hasDefinedTypeTag = (tag) => {\n return jsdocUtils.hasDefinedTypeTag(tag);\n };\n\n utils.hasValueOrExecutorHasNonEmptyResolveValue = (anyPromiseAsReturn) => {\n return jsdocUtils.hasValueOrExecutorHasNonEmptyResolveValue(node, anyPromiseAsReturn);\n };\n\n utils.hasYieldValue = () => {\n if ([\n 'ExportNamedDeclaration', 'ExportDefaultDeclaration',\n ].includes(node.type)) {\n return jsdocUtils.hasYieldValue(node.declaration);\n }\n\n return jsdocUtils.hasYieldValue(node);\n };\n\n utils.hasYieldReturnValue = () => {\n return jsdocUtils.hasYieldValue(node, true);\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 {\n tags,\n } = context.options[0] ?? {};\n\n return Boolean(tags && tags.includes(tagName));\n };\n\n utils.getClassNode = () => {\n return [\n ...ancestors, node,\n ].reverse().find((parent) => {\n return parent && [\n 'ClassDeclaration', 'ClassExpression',\n ].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 indnt = ' '.repeat(classJsdocNode.loc.start.column);\n\n return parseComment(classJsdocNode, indnt);\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\n const matchingJsdocTags = jsdoc.tags.filter(({\n tag,\n }) => {\n return tag === targetTagName;\n });\n\n for (const matchingJsdocTag of matchingJsdocTags) {\n arrayHandler(matchingJsdocTag, targetTagName);\n }\n };\n\n return utils;\n};\n\nconst getSettings = (context) => {\n /* eslint-disable canonical/sort-keys */\n const settings = {\n // All rules\n ignorePrivate: Boolean(context.settings.jsdoc?.ignorePrivate),\n ignoreInternal: Boolean(context.settings.jsdoc?.ignoreInternal),\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 // `check-types`, `no-undefined-types`, `valid-types`\n structuredTags: context.settings.jsdoc?.structuredTags ?? {},\n\n // `require-param`, `require-description`, `require-example`,\n // `require-returns`, `require-throw`, `require-yields`\n overrideReplacesDocs: context.settings.jsdoc?.overrideReplacesDocs,\n ignoreReplacesDocs: context.settings.jsdoc?.ignoreReplacesDocs,\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 canonical/sort-keys */\n\n jsdocUtils.setTagStructure(settings.mode);\n try {\n jsdocUtils.overrideTagStructure(settings.structuredTags);\n } catch (error) {\n context.report({\n loc: {\n start: {\n column: 1,\n line: 1,\n },\n },\n message: error.message,\n });\n\n return false;\n }\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 if (!('line' in jsdocLoc)) {\n jsdocLoc.line = jsdocLoc.source[0].number;\n }\n\n const lineNumber = commentNode.loc.start.line + jsdocLoc.line;\n\n loc = {\n end: {\n line: lineNumber,\n },\n start: {\n line: lineNumber,\n },\n };\n\n // Todo: Remove ignore once `check-examples` can be restored for ESLint 8+\n // istanbul ignore if\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/* eslint-disable jsdoc/no-undefined-types -- Need to build this in; see https://www.typescriptlang.org/docs/handbook/utility-types.html */\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/* eslint-enable jsdoc/no-undefined-types -- Need to build this in */\n\nconst iterate = (\n info,\n indent, jsdoc,\n ruleConfig, context, lines, jsdocNode, node, settings,\n sourceCode, iterator, state, iteratingAll,\n) => {\n const report = makeReport(context, jsdocNode);\n\n const utils = getUtils(\n node,\n jsdoc,\n jsdocNode,\n settings,\n report,\n context,\n iteratingAll,\n ruleConfig,\n indent,\n );\n\n if (\n !ruleConfig.checkInternal && settings.ignoreInternal &&\n utils.hasTag('internal')\n ) {\n return;\n }\n\n if (\n !ruleConfig.checkPrivate && settings.ignorePrivate &&\n (\n utils.hasTag('private') ||\n jsdoc.tags\n .filter(({\n tag,\n }) => {\n return tag === 'access';\n })\n .some(({\n description,\n }) => {\n return description === 'private';\n })\n )\n ) {\n return;\n }\n\n iterator({\n context,\n globalState,\n indent,\n info,\n iteratingAll,\n jsdoc,\n jsdocNode,\n node,\n report,\n settings,\n sourceCode,\n state,\n utils,\n });\n};\n\nconst getIndentAndJSDoc = function (lines, jsdocNode) {\n const sourceLine = lines[jsdocNode.loc.start.line - 1];\n const indnt = sourceLine.charAt(0).repeat(jsdocNode.loc.start.column);\n const jsdc = parseComment(jsdocNode, indnt);\n\n return [\n indnt, jsdc,\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 * @param contexts\n * @param {boolean} additiveContexts\n */\nconst iterateAllJsdocs = (iterator, ruleConfig, contexts, additiveContexts) => {\n const trackedJsdocs = new Set();\n\n let handler;\n let settings;\n const callIterator = (context, node, jsdocNodes, state, lastCall) => {\n const sourceCode = context.getSourceCode();\n const {\n lines,\n } = sourceCode;\n\n const utils = getBasicUtils(context, settings);\n for (const jsdocNode of jsdocNodes) {\n if (!(/^\\/\\*\\*\\s/u).test(sourceCode.getText(jsdocNode))) {\n continue;\n }\n\n const [\n indent,\n jsdoc,\n ] = getIndentAndJSDoc(\n lines, jsdocNode,\n );\n\n if (additiveContexts) {\n for (const [\n idx,\n {\n comment,\n },\n ] of contexts.entries()) {\n if (comment && handler(comment, jsdoc) === false) {\n continue;\n }\n\n iterate(\n {\n comment,\n lastIndex: idx,\n selector: node?.type,\n },\n indent,\n jsdoc,\n ruleConfig,\n context,\n lines,\n jsdocNode,\n node,\n settings,\n sourceCode,\n iterator,\n state,\n true,\n );\n }\n\n continue;\n }\n\n let lastComment;\n let lastIndex;\n // eslint-disable-next-line no-loop-func\n if (contexts && contexts.every(({\n comment,\n }, idx) => {\n lastComment = comment;\n lastIndex = idx;\n\n return comment && handler(comment, jsdoc) === false;\n })) {\n continue;\n }\n\n iterate(\n lastComment ? {\n comment: lastComment,\n lastIndex,\n selector: node?.type,\n } : {\n lastIndex,\n selector: node?.type,\n },\n indent,\n jsdoc,\n ruleConfig,\n context,\n lines,\n jsdocNode,\n node,\n settings,\n sourceCode,\n iterator,\n state,\n true,\n );\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 settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n if (contexts) {\n handler = commentHandler(settings);\n }\n\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 commentNode = getJSDocComment(sourceCode, node, settings);\n if (trackedJsdocs.has(commentNode)) {\n return;\n }\n\n if (!commentNode) {\n if (ruleConfig.nonComment) {\n ruleConfig.nonComment({\n node,\n state,\n });\n }\n\n return;\n }\n\n trackedJsdocs.add(commentNode);\n callIterator(context, node, [\n commentNode,\n ], state);\n },\n 'Program:exit' () {\n const allComments = sourceCode.getAllComments();\n const untrackedJSdoc = allComments.filter((node) => {\n return !trackedJsdocs.has(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 if (!settings) {\n return {};\n }\n\n return {\n 'Program:exit' () {\n const allComments = sourceCode.getAllComments();\n const {\n lines,\n } = 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 // eslint-disable-next-line unicorn/prefer-export-from -- Avoid experimental parser\n parseComment,\n};\n\n/**\n * @param {JsdocVisitor} iterator\n * @param {{\n * meta: any,\n * contextDefaults?: true | string[],\n * contextSelected?: true,\n * iterateAllJsdocs?: true,\n * }} ruleConfig\n */\nexport default function iterateJsdoc (iterator, ruleConfig) {\n const metaType = ruleConfig?.meta?.type;\n if (!metaType || ![\n 'problem', 'suggestion', 'layout',\n ].includes(metaType)) {\n throw new TypeError('Rule must include `meta.type` option (with value \"problem\", \"suggestion\", or \"layout\")');\n }\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 const settings = getSettings(context);\n if (!settings) {\n return {};\n }\n\n let contexts;\n if (ruleConfig.contextDefaults || ruleConfig.contextSelected || ruleConfig.matchContext) {\n contexts = ruleConfig.matchContext && context.options[0]?.match ?\n context.options[0].match :\n jsdocUtils.enforcedContexts(context, ruleConfig.contextDefaults);\n\n if (contexts) {\n contexts = contexts.map((obj) => {\n if (typeof obj === 'object' && !obj.context) {\n return {\n ...obj,\n context: 'any',\n };\n }\n\n return obj;\n });\n }\n\n const hasPlainAny = contexts?.includes('any');\n const hasObjectAny = !hasPlainAny && contexts?.find((ctxt) => {\n return ctxt?.context === 'any';\n });\n if (hasPlainAny || hasObjectAny) {\n return iterateAllJsdocs(\n iterator, ruleConfig, hasObjectAny ? contexts : null, ruleConfig.matchContext,\n ).create(context);\n }\n }\n\n const sourceCode = context.getSourceCode();\n const {\n lines,\n } = sourceCode;\n\n const state = {};\n\n const checkJsdoc = (info, handler, node) => {\n const jsdocNode = getJSDocComment(sourceCode, node, settings);\n\n if (!jsdocNode) {\n return;\n }\n\n const [\n indent,\n jsdoc,\n ] = getIndentAndJSDoc(\n lines, jsdocNode,\n );\n\n if (\n // Note, `handler` should already be bound in its first argument\n // with these only to be called after the value of\n // `comment`\n handler && handler(jsdoc) === false\n ) {\n return;\n }\n\n iterate(\n info, indent, jsdoc, ruleConfig, context, lines, jsdocNode, node, settings, sourceCode, iterator, state,\n );\n };\n\n let contextObject = {};\n\n if (contexts && (\n ruleConfig.contextDefaults || ruleConfig.contextSelected || ruleConfig.matchContext\n )) {\n contextObject = jsdocUtils.getContextObject(\n contexts,\n checkJsdoc,\n commentHandler(settings),\n );\n } else {\n for (const prop of [\n 'ArrowFunctionExpression',\n 'FunctionDeclaration',\n 'FunctionExpression',\n ]) {\n contextObject[prop] = checkJsdoc.bind(null, {\n selector: prop,\n }, null);\n }\n }\n\n if (ruleConfig.exit) {\n contextObject['Program:exit'] = () => {\n ruleConfig.exit({\n context,\n state,\n });\n };\n }\n\n return contextObject;\n },\n meta: ruleConfig.meta,\n };\n}\n"],"file":"iterateJsdoc.js"}
@@ -12,8 +12,20 @@ var _iterateJsdoc = _interopRequireDefault(require("../iterateJsdoc"));
12
12
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
13
 
14
14
  const strictNativeTypes = ['undefined', 'null', 'boolean', 'number', 'bigint', 'string', 'symbol', 'object', 'Array', 'Function', 'Date', 'RegExp'];
15
-
16
- const adjustNames = (type, preferred, isGenericMatch, nodeName, node, parentNode) => {
15
+ /**
16
+ * Adjusts the parent type node `meta` for generic matches (or type node
17
+ * `type` for `JsdocTypeAny`) and sets the type node `value`.
18
+ *
19
+ * @param {string} type The actual type
20
+ * @param {string} preferred The preferred type
21
+ * @param {boolean} isGenericMatch
22
+ * @param {string} typeNodeName
23
+ * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} node
24
+ * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} parentNode
25
+ * @returns {void}
26
+ */
27
+
28
+ const adjustNames = (type, preferred, isGenericMatch, typeNodeName, node, parentNode) => {
17
29
  let ret = preferred;
18
30
 
19
31
  if (isGenericMatch) {
@@ -35,7 +47,7 @@ const adjustNames = (type, preferred, isGenericMatch, nodeName, node, parentNode
35
47
  parentNode.meta.brackets = 'angle';
36
48
  parentNode.meta.dot = false;
37
49
  ret = preferred.slice(0, -2);
38
- } else if (parentNode.meta.brackets === 'square' && (nodeName === '[]' || nodeName === 'Array')) {
50
+ } else if (parentNode.meta.brackets === 'square' && (typeNodeName === '[]' || typeNodeName === 'Array')) {
39
51
  parentNode.meta.brackets = 'angle';
40
52
  parentNode.meta.dot = false;
41
53
  }
@@ -48,7 +60,7 @@ const adjustNames = (type, preferred, isGenericMatch, nodeName, node, parentNode
48
60
  node.value = ret.replace(/(?:\.|<>|\.<>|\[\])$/u, ''); // For bare pseudo-types like `<>`
49
61
 
50
62
  if (!ret) {
51
- node.value = nodeName;
63
+ node.value = typeNodeName;
52
64
  }
53
65
  };
54
66
 
@@ -73,11 +85,21 @@ var _default = (0, _iterateJsdoc.default)(({
73
85
  unifyParentAndChildTypeChecks,
74
86
  exemptTagContexts = []
75
87
  } = context.options[0] || {};
76
-
77
- const getPreferredTypeInfo = (_type, nodeName, parentNode, property) => {
78
- let hasMatchingPreferredType;
79
- let isGenericMatch;
80
- let typeName = nodeName;
88
+ /**
89
+ * Gets information about the preferred type: whether there is a matching
90
+ * preferred type, what the type is, and whether it is a match to a generic.
91
+ *
92
+ * @param {string} _type Not currently in use
93
+ * @param {string} typeNodeName
94
+ * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} parentNode
95
+ * @param {string} property
96
+ * @returns {[hasMatchingPreferredType: boolean, typeName: string, isGenericMatch: boolean]}
97
+ */
98
+
99
+ const getPreferredTypeInfo = (_type, typeNodeName, parentNode, property) => {
100
+ let hasMatchingPreferredType = false;
101
+ let isGenericMatch = false;
102
+ let typeName = typeNodeName;
81
103
 
82
104
  if (Object.keys(preferredTypes).length) {
83
105
  const isNameOfGeneric = parentNode !== undefined && parentNode.type === 'JsdocTypeGeneric' && property === 'left';
@@ -91,7 +113,7 @@ var _default = (0, _iterateJsdoc.default)(({
91
113
  if (brackets === 'angle') {
92
114
  const checkPostFixes = dot ? ['.', '.<>'] : ['<>'];
93
115
  isGenericMatch = checkPostFixes.some(checkPostFix => {
94
- if ((preferredTypes === null || preferredTypes === void 0 ? void 0 : preferredTypes[nodeName + checkPostFix]) !== undefined) {
116
+ if ((preferredTypes === null || preferredTypes === void 0 ? void 0 : preferredTypes[typeNodeName + checkPostFix]) !== undefined) {
95
117
  typeName += checkPostFix;
96
118
  return true;
97
119
  }
@@ -113,7 +135,7 @@ var _default = (0, _iterateJsdoc.default)(({
113
135
  }
114
136
  }
115
137
 
116
- const directNameMatch = (preferredTypes === null || preferredTypes === void 0 ? void 0 : preferredTypes[nodeName]) !== undefined && !Object.values(preferredTypes).includes(nodeName);
138
+ const directNameMatch = (preferredTypes === null || preferredTypes === void 0 ? void 0 : preferredTypes[typeNodeName]) !== undefined && !Object.values(preferredTypes).includes(typeNodeName);
117
139
  const unifiedSyntaxParentMatch = property && directNameMatch && unifyParentAndChildTypeChecks;
118
140
  isGenericMatch = isGenericMatch || unifiedSyntaxParentMatch;
119
141
  hasMatchingPreferredType = isGenericMatch || directNameMatch && !property;
@@ -121,6 +143,95 @@ var _default = (0, _iterateJsdoc.default)(({
121
143
 
122
144
  return [hasMatchingPreferredType, typeName, isGenericMatch];
123
145
  };
146
+ /**
147
+ * Iterates strict types to see if any should be added to `invalidTypes` (and
148
+ * the the relevant strict type returned as the new preferred type).
149
+ *
150
+ * @param {string} typeNodeName
151
+ * @param {string} preferred
152
+ * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} parentNode
153
+ * @param {string[]} invalidTypes
154
+ * @returns {string} The `preferred` type string, optionally changed
155
+ */
156
+
157
+
158
+ const checkNativeTypes = (typeNodeName, preferred, parentNode, invalidTypes) => {
159
+ let changedPreferred = preferred;
160
+
161
+ for (const strictNativeType of strictNativeTypes) {
162
+ if ( // Todo: Avoid typescript condition if moving to default typescript
163
+ strictNativeType === 'object' && mode === 'typescript' && ( // This is not set to remap with exact type match (e.g.,
164
+ // `object: 'Object'`), so can ignore (including if circular)
165
+ !(preferredTypes !== null && preferredTypes !== void 0 && preferredTypes[typeNodeName]) || // Although present on `preferredTypes` for remapping, this is a
166
+ // parent object without a parent match (and not
167
+ // `unifyParentAndChildTypeChecks`) and we don't want
168
+ // `object<>` given TypeScript issue https://github.com/microsoft/TypeScript/issues/20555
169
+ parentNode !== null && parentNode !== void 0 && parentNode.elements.length && (parentNode === null || parentNode === void 0 ? void 0 : parentNode.left.type) === 'JsdocTypeName' && (parentNode === null || parentNode === void 0 ? void 0 : parentNode.left.value) === 'Object')) {
170
+ continue;
171
+ }
172
+
173
+ if (strictNativeType !== typeNodeName && strictNativeType.toLowerCase() === typeNodeName.toLowerCase() && ( // Don't report if user has own map for a strict native type
174
+ !preferredTypes || (preferredTypes === null || preferredTypes === void 0 ? void 0 : preferredTypes[strictNativeType]) === undefined)) {
175
+ changedPreferred = strictNativeType;
176
+ invalidTypes.push([typeNodeName, changedPreferred]);
177
+ break;
178
+ }
179
+ }
180
+
181
+ return changedPreferred;
182
+ };
183
+ /**
184
+ * Collect invalid type info.
185
+ *
186
+ * @param {string} type
187
+ * @param {string} value
188
+ * @param {string} tagName
189
+ * @param {string} property
190
+ * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} node
191
+ * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} parentNode
192
+ * @param {string[]} invalidTypes
193
+ * @returns {void}
194
+ */
195
+
196
+
197
+ const getInvalidTypes = (type, value, tagName, property, node, parentNode, invalidTypes) => {
198
+ let typeNodeName = type === 'JsdocTypeAny' ? '*' : value;
199
+ const [hasMatchingPreferredType, typeName, isGenericMatch] = getPreferredTypeInfo(type, typeNodeName, parentNode, property);
200
+ let preferred;
201
+ let types;
202
+
203
+ if (hasMatchingPreferredType) {
204
+ const preferredSetting = preferredTypes[typeName];
205
+ typeNodeName = typeName === '[]' ? typeName : typeNodeName;
206
+
207
+ if (!preferredSetting) {
208
+ invalidTypes.push([typeNodeName]);
209
+ } else if (typeof preferredSetting === 'string') {
210
+ preferred = preferredSetting;
211
+ invalidTypes.push([typeNodeName, preferred]);
212
+ } else if (typeof preferredSetting === 'object') {
213
+ preferred = preferredSetting === null || preferredSetting === void 0 ? void 0 : preferredSetting.replacement;
214
+ invalidTypes.push([typeNodeName, preferred, preferredSetting === null || preferredSetting === void 0 ? void 0 : preferredSetting.message]);
215
+ } else {
216
+ utils.reportSettings('Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.');
217
+ return;
218
+ }
219
+ } else if (Object.entries(structuredTags).some(([tag, {
220
+ type: typs
221
+ }]) => {
222
+ types = typs;
223
+ return tag === tagName && Array.isArray(types) && !types.includes(typeNodeName);
224
+ })) {
225
+ invalidTypes.push([typeNodeName, types]);
226
+ } else if (!noDefaults && type === 'JsdocTypeName') {
227
+ preferred = checkNativeTypes(typeNodeName, preferred, parentNode, invalidTypes);
228
+ } // For fixer
229
+
230
+
231
+ if (preferred) {
232
+ adjustNames(type, preferred, isGenericMatch, typeNodeName, node, parentNode);
233
+ }
234
+ };
124
235
 
125
236
  for (const jsdocTag of jsdocTagsWithPossibleType) {
126
237
  const invalidTypes = [];
@@ -132,8 +243,7 @@ var _default = (0, _iterateJsdoc.default)(({
132
243
  continue;
133
244
  }
134
245
 
135
- const tagName = jsdocTag.tag; // eslint-disable-next-line complexity -- To refactor
136
-
246
+ const tagName = jsdocTag.tag;
137
247
  (0, _jsdoccomment.traverse)(typeAst, (node, parentNode, property) => {
138
248
  const {
139
249
  type,
@@ -144,64 +254,15 @@ var _default = (0, _iterateJsdoc.default)(({
144
254
  return;
145
255
  }
146
256
 
147
- let nodeName = type === 'JsdocTypeAny' ? '*' : value;
148
- const [hasMatchingPreferredType, typeName, isGenericMatch] = getPreferredTypeInfo(type, nodeName, parentNode, property);
149
- let preferred;
150
- let types;
151
-
152
- if (hasMatchingPreferredType) {
153
- const preferredSetting = preferredTypes[typeName];
154
- nodeName = typeName === '[]' ? typeName : nodeName;
155
-
156
- if (!preferredSetting) {
157
- invalidTypes.push([nodeName]);
158
- } else if (typeof preferredSetting === 'string') {
159
- preferred = preferredSetting;
160
- invalidTypes.push([nodeName, preferred]);
161
- } else if (typeof preferredSetting === 'object') {
162
- preferred = preferredSetting === null || preferredSetting === void 0 ? void 0 : preferredSetting.replacement;
163
- invalidTypes.push([nodeName, preferred, preferredSetting === null || preferredSetting === void 0 ? void 0 : preferredSetting.message]);
164
- } else {
165
- utils.reportSettings('Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.');
166
- return;
167
- }
168
- } else if (Object.entries(structuredTags).some(([tag, {
169
- type: typs
170
- }]) => {
171
- types = typs;
172
- return tag === tagName && Array.isArray(types) && !types.includes(nodeName);
173
- })) {
174
- invalidTypes.push([nodeName, types]);
175
- } else if (!noDefaults && type === 'JsdocTypeName') {
176
- for (const strictNativeType of strictNativeTypes) {
177
- if ( // Todo: Avoid typescript condition if moving to default typescript
178
- strictNativeType === 'object' && mode === 'typescript' && ( // This is not set to remap with exact type match (e.g.,
179
- // `object: 'Object'`), so can ignore (including if circular)
180
- !(preferredTypes !== null && preferredTypes !== void 0 && preferredTypes[nodeName]) || // Although present on `preferredTypes` for remapping, this is a
181
- // parent object without a parent match (and not
182
- // `unifyParentAndChildTypeChecks`) and we don't want
183
- // `object<>` given TypeScript issue https://github.com/microsoft/TypeScript/issues/20555
184
- parentNode !== null && parentNode !== void 0 && parentNode.elements.length && (parentNode === null || parentNode === void 0 ? void 0 : parentNode.left.type) === 'JsdocTypeName' && (parentNode === null || parentNode === void 0 ? void 0 : parentNode.left.value) === 'Object')) {
185
- continue;
186
- }
187
-
188
- if (strictNativeType !== nodeName && strictNativeType.toLowerCase() === nodeName.toLowerCase() && ( // Don't report if user has own map for a strict native type
189
- !preferredTypes || (preferredTypes === null || preferredTypes === void 0 ? void 0 : preferredTypes[strictNativeType]) === undefined)) {
190
- preferred = strictNativeType;
191
- invalidTypes.push([nodeName, preferred]);
192
- break;
193
- }
194
- }
195
- } // For fixer
196
-
197
-
198
- if (preferred) {
199
- adjustNames(type, preferred, isGenericMatch, nodeName, node, parentNode);
200
- }
257
+ getInvalidTypes(type, value, tagName, property, node, parentNode, invalidTypes);
201
258
  });
202
259
 
203
260
  if (invalidTypes.length) {
204
261
  const fixedType = (0, _jsdoccomment.stringify)(typeAst);
262
+ /**
263
+ * @param {any} fixer The ESLint fixer
264
+ * @returns {string}
265
+ */
205
266
 
206
267
  const fix = fixer => {
207
268
  return fixer.replaceText(jsdocNode, sourceCode.getText(jsdocNode).replace(`{${jsdocTag.type}}`, `{${fixedType}}`));
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/rules/checkTypes.js"],"names":["strictNativeTypes","adjustNames","type","preferred","isGenericMatch","nodeName","node","parentNode","ret","meta","brackets","dot","dotBracketEnd","match","slice","length","bracketEnd","endsWith","value","replace","jsdocNode","sourceCode","report","utils","settings","context","jsdocTagsWithPossibleType","filterTags","tag","tagMightHaveTypePosition","preferredTypes","structuredTags","mode","noDefaults","unifyParentAndChildTypeChecks","exemptTagContexts","options","getPreferredTypeInfo","_type","property","hasMatchingPreferredType","typeName","Object","keys","isNameOfGeneric","undefined","checkPostFixes","some","checkPostFix","directNameMatch","values","includes","unifiedSyntaxParentMatch","jsdocTag","invalidTypes","typeAst","tagName","types","preferredSetting","push","replacement","message","reportSettings","entries","typs","Array","isArray","strictNativeType","elements","left","toLowerCase","fixedType","fix","fixer","replaceText","getText","badType","preferredType","tagValue","name","JSON","stringify","iterateAllJsdocs","docs","description","url","fixable","schema","additionalProperties","properties","items","oneOf"],"mappings":"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","sourcesContent":["import {\n parse,\n stringify,\n traverse,\n tryParse,\n} from '@es-joy/jsdoccomment';\nimport iterateJsdoc from '../iterateJsdoc';\n\nconst strictNativeTypes = [\n 'undefined',\n 'null',\n 'boolean',\n 'number',\n 'bigint',\n 'string',\n 'symbol',\n 'object',\n 'Array',\n 'Function',\n 'Date',\n 'RegExp',\n];\n\nconst adjustNames = (type, preferred, isGenericMatch, nodeName, node, parentNode) => {\n let ret = preferred;\n if (isGenericMatch) {\n if (preferred === '[]') {\n parentNode.meta.brackets = 'square';\n parentNode.meta.dot = false;\n ret = 'Array';\n } else {\n const dotBracketEnd = preferred.match(/\\.(?:<>)?$/u);\n if (dotBracketEnd) {\n parentNode.meta.brackets = 'angle';\n parentNode.meta.dot = true;\n ret = preferred.slice(0, -dotBracketEnd[0].length);\n } else {\n const bracketEnd = preferred.endsWith('<>');\n if (bracketEnd) {\n parentNode.meta.brackets = 'angle';\n parentNode.meta.dot = false;\n ret = preferred.slice(0, -2);\n } else if (\n parentNode.meta.brackets === 'square' &&\n (nodeName === '[]' || nodeName === 'Array')\n ) {\n parentNode.meta.brackets = 'angle';\n parentNode.meta.dot = false;\n }\n }\n }\n } else if (type === 'JsdocTypeAny') {\n node.type = 'JsdocTypeName';\n }\n\n node.value = ret.replace(/(?:\\.|<>|\\.<>|\\[\\])$/u, '');\n\n // For bare pseudo-types like `<>`\n if (!ret) {\n node.value = nodeName;\n }\n};\n\nexport default iterateJsdoc(({\n jsdocNode,\n sourceCode,\n report,\n utils,\n settings,\n context,\n}) => {\n const jsdocTagsWithPossibleType = utils.filterTags((tag) => {\n return utils.tagMightHaveTypePosition(tag.tag);\n });\n\n const {\n preferredTypes,\n structuredTags,\n mode,\n } = settings;\n const {\n noDefaults,\n unifyParentAndChildTypeChecks,\n exemptTagContexts = [],\n } = context.options[0] || {};\n\n const getPreferredTypeInfo = (_type, nodeName, parentNode, property) => {\n let hasMatchingPreferredType;\n let isGenericMatch;\n let typeName = nodeName;\n if (Object.keys(preferredTypes).length) {\n const isNameOfGeneric = parentNode !== undefined && parentNode.type === 'JsdocTypeGeneric' && property === 'left';\n if (unifyParentAndChildTypeChecks || isNameOfGeneric) {\n const brackets = parentNode?.meta?.brackets;\n const dot = parentNode?.meta?.dot;\n\n if (brackets === 'angle') {\n const checkPostFixes = dot ? [\n '.', '.<>',\n ] : [\n '<>',\n ];\n isGenericMatch = checkPostFixes.some((checkPostFix) => {\n if (preferredTypes?.[nodeName + checkPostFix] !== undefined) {\n typeName += checkPostFix;\n\n return true;\n }\n\n return false;\n });\n }\n\n if (!isGenericMatch && property) {\n const checkPostFixes = dot ? [\n '.', '.<>',\n ] : [\n brackets === 'angle' ? '<>' : '[]',\n ];\n\n isGenericMatch = checkPostFixes.some((checkPostFix) => {\n if (preferredTypes?.[checkPostFix] !== undefined) {\n typeName = checkPostFix;\n\n return true;\n }\n\n return false;\n });\n }\n }\n\n const directNameMatch = preferredTypes?.[nodeName] !== undefined &&\n !Object.values(preferredTypes).includes(nodeName);\n const unifiedSyntaxParentMatch = property && directNameMatch && unifyParentAndChildTypeChecks;\n isGenericMatch = isGenericMatch || unifiedSyntaxParentMatch;\n\n hasMatchingPreferredType = isGenericMatch ||\n directNameMatch && !property;\n }\n\n return [\n hasMatchingPreferredType, typeName, isGenericMatch,\n ];\n };\n\n for (const jsdocTag of jsdocTagsWithPossibleType) {\n const invalidTypes = [];\n let typeAst;\n\n try {\n typeAst = mode === 'permissive' ? tryParse(jsdocTag.type) : parse(jsdocTag.type, mode);\n } catch {\n continue;\n }\n\n const tagName = jsdocTag.tag;\n\n // eslint-disable-next-line complexity -- To refactor\n traverse(typeAst, (node, parentNode, property) => {\n const {\n type,\n value,\n } = node;\n if (![\n 'JsdocTypeName', 'JsdocTypeAny',\n ].includes(type)) {\n return;\n }\n\n let nodeName = type === 'JsdocTypeAny' ? '*' : value;\n\n const [\n hasMatchingPreferredType,\n typeName,\n isGenericMatch,\n ] = getPreferredTypeInfo(type, nodeName, parentNode, property);\n\n let preferred;\n let types;\n if (hasMatchingPreferredType) {\n const preferredSetting = preferredTypes[typeName];\n nodeName = typeName === '[]' ? typeName : nodeName;\n\n if (!preferredSetting) {\n invalidTypes.push([\n nodeName,\n ]);\n } else if (typeof preferredSetting === 'string') {\n preferred = preferredSetting;\n invalidTypes.push([\n nodeName, preferred,\n ]);\n } else if (typeof preferredSetting === 'object') {\n preferred = preferredSetting?.replacement;\n invalidTypes.push([\n nodeName,\n preferred,\n preferredSetting?.message,\n ]);\n } else {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.',\n );\n\n return;\n }\n } else if (Object.entries(structuredTags).some(([\n tag,\n {\n type: typs,\n },\n ]) => {\n types = typs;\n\n return tag === tagName &&\n Array.isArray(types) &&\n !types.includes(nodeName);\n })) {\n invalidTypes.push([\n nodeName, types,\n ]);\n } else if (!noDefaults && type === 'JsdocTypeName') {\n for (const strictNativeType of strictNativeTypes) {\n if (\n // Todo: Avoid typescript condition if moving to default typescript\n strictNativeType === 'object' && mode === 'typescript' &&\n (\n // This is not set to remap with exact type match (e.g.,\n // `object: 'Object'`), so can ignore (including if circular)\n !preferredTypes?.[nodeName] ||\n // Although present on `preferredTypes` for remapping, this is a\n // parent object without a parent match (and not\n // `unifyParentAndChildTypeChecks`) and we don't want\n // `object<>` given TypeScript issue https://github.com/microsoft/TypeScript/issues/20555\n parentNode?.elements.length && (\n parentNode?.left.type === 'JsdocTypeName' &&\n parentNode?.left.value === 'Object'\n )\n )\n ) {\n continue;\n }\n\n if (strictNativeType !== nodeName &&\n strictNativeType.toLowerCase() === nodeName.toLowerCase() &&\n\n // Don't report if user has own map for a strict native type\n (!preferredTypes || preferredTypes?.[strictNativeType] === undefined)\n ) {\n preferred = strictNativeType;\n invalidTypes.push([\n nodeName, preferred,\n ]);\n break;\n }\n }\n }\n\n // For fixer\n if (preferred) {\n adjustNames(type, preferred, isGenericMatch, nodeName, node, parentNode);\n }\n });\n\n if (invalidTypes.length) {\n const fixedType = stringify(typeAst);\n\n const fix = (fixer) => {\n return fixer.replaceText(\n jsdocNode,\n sourceCode.getText(jsdocNode).replace(\n `{${jsdocTag.type}}`,\n `{${fixedType}}`,\n ),\n );\n };\n\n for (const [\n badType,\n preferredType = '',\n message,\n ] of invalidTypes) {\n const tagValue = jsdocTag.name ? ` \"${jsdocTag.name}\"` : '';\n if (exemptTagContexts.some(({\n tag,\n types,\n }) => {\n return tag === tagName &&\n (types === true || types.includes(jsdocTag.type));\n })) {\n continue;\n }\n\n report(\n message ||\n `Invalid JSDoc @${tagName}${tagValue} type \"${badType}\"` +\n (preferredType ? '; ' : '.') +\n (preferredType ? `prefer: ${JSON.stringify(preferredType)}.` : ''),\n preferredType ? fix : null,\n jsdocTag,\n message ? {\n tagName,\n tagValue,\n } : null,\n );\n }\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Reports invalid types.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-types',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n exemptTagContexts: {\n items: {\n additionalProperties: false,\n properties: {\n tag: {\n type: 'string',\n },\n types: {\n oneOf: [\n {\n type: 'boolean',\n },\n {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n ],\n },\n },\n type: 'object',\n },\n type: 'array',\n },\n noDefaults: {\n type: 'boolean',\n },\n unifyParentAndChildTypeChecks: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"checkTypes.js"}
1
+ {"version":3,"sources":["../../src/rules/checkTypes.js"],"names":["strictNativeTypes","adjustNames","type","preferred","isGenericMatch","typeNodeName","node","parentNode","ret","meta","brackets","dot","dotBracketEnd","match","slice","length","bracketEnd","endsWith","value","replace","jsdocNode","sourceCode","report","utils","settings","context","jsdocTagsWithPossibleType","filterTags","tag","tagMightHaveTypePosition","preferredTypes","structuredTags","mode","noDefaults","unifyParentAndChildTypeChecks","exemptTagContexts","options","getPreferredTypeInfo","_type","property","hasMatchingPreferredType","typeName","Object","keys","isNameOfGeneric","undefined","checkPostFixes","some","checkPostFix","directNameMatch","values","includes","unifiedSyntaxParentMatch","checkNativeTypes","invalidTypes","changedPreferred","strictNativeType","elements","left","toLowerCase","push","getInvalidTypes","tagName","types","preferredSetting","replacement","message","reportSettings","entries","typs","Array","isArray","jsdocTag","typeAst","fixedType","fix","fixer","replaceText","getText","badType","preferredType","tagValue","name","JSON","stringify","iterateAllJsdocs","docs","description","url","fixable","schema","additionalProperties","properties","items","oneOf"],"mappings":"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","sourcesContent":["import {\n parse,\n stringify,\n traverse,\n tryParse,\n} from '@es-joy/jsdoccomment';\nimport iterateJsdoc from '../iterateJsdoc';\n\nconst strictNativeTypes = [\n 'undefined',\n 'null',\n 'boolean',\n 'number',\n 'bigint',\n 'string',\n 'symbol',\n 'object',\n 'Array',\n 'Function',\n 'Date',\n 'RegExp',\n];\n\n/**\n * Adjusts the parent type node `meta` for generic matches (or type node\n * `type` for `JsdocTypeAny`) and sets the type node `value`.\n *\n * @param {string} type The actual type\n * @param {string} preferred The preferred type\n * @param {boolean} isGenericMatch\n * @param {string} typeNodeName\n * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} node\n * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} parentNode\n * @returns {void}\n */\nconst adjustNames = (type, preferred, isGenericMatch, typeNodeName, node, parentNode) => {\n let ret = preferred;\n if (isGenericMatch) {\n if (preferred === '[]') {\n parentNode.meta.brackets = 'square';\n parentNode.meta.dot = false;\n ret = 'Array';\n } else {\n const dotBracketEnd = preferred.match(/\\.(?:<>)?$/u);\n if (dotBracketEnd) {\n parentNode.meta.brackets = 'angle';\n parentNode.meta.dot = true;\n ret = preferred.slice(0, -dotBracketEnd[0].length);\n } else {\n const bracketEnd = preferred.endsWith('<>');\n if (bracketEnd) {\n parentNode.meta.brackets = 'angle';\n parentNode.meta.dot = false;\n ret = preferred.slice(0, -2);\n } else if (\n parentNode.meta.brackets === 'square' &&\n (typeNodeName === '[]' || typeNodeName === 'Array')\n ) {\n parentNode.meta.brackets = 'angle';\n parentNode.meta.dot = false;\n }\n }\n }\n } else if (type === 'JsdocTypeAny') {\n node.type = 'JsdocTypeName';\n }\n\n node.value = ret.replace(/(?:\\.|<>|\\.<>|\\[\\])$/u, '');\n\n // For bare pseudo-types like `<>`\n if (!ret) {\n node.value = typeNodeName;\n }\n};\n\nexport default iterateJsdoc(({\n jsdocNode,\n sourceCode,\n report,\n utils,\n settings,\n context,\n}) => {\n const jsdocTagsWithPossibleType = utils.filterTags((tag) => {\n return utils.tagMightHaveTypePosition(tag.tag);\n });\n\n const {\n preferredTypes,\n structuredTags,\n mode,\n } = settings;\n const {\n noDefaults,\n unifyParentAndChildTypeChecks,\n exemptTagContexts = [],\n } = context.options[0] || {};\n\n /**\n * Gets information about the preferred type: whether there is a matching\n * preferred type, what the type is, and whether it is a match to a generic.\n *\n * @param {string} _type Not currently in use\n * @param {string} typeNodeName\n * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} parentNode\n * @param {string} property\n * @returns {[hasMatchingPreferredType: boolean, typeName: string, isGenericMatch: boolean]}\n */\n const getPreferredTypeInfo = (_type, typeNodeName, parentNode, property) => {\n let hasMatchingPreferredType = false;\n let isGenericMatch = false;\n let typeName = typeNodeName;\n if (Object.keys(preferredTypes).length) {\n const isNameOfGeneric = parentNode !== undefined && parentNode.type === 'JsdocTypeGeneric' && property === 'left';\n if (unifyParentAndChildTypeChecks || isNameOfGeneric) {\n const brackets = parentNode?.meta?.brackets;\n const dot = parentNode?.meta?.dot;\n\n if (brackets === 'angle') {\n const checkPostFixes = dot ? [\n '.', '.<>',\n ] : [\n '<>',\n ];\n isGenericMatch = checkPostFixes.some((checkPostFix) => {\n if (preferredTypes?.[typeNodeName + checkPostFix] !== undefined) {\n typeName += checkPostFix;\n\n return true;\n }\n\n return false;\n });\n }\n\n if (!isGenericMatch && property) {\n const checkPostFixes = dot ? [\n '.', '.<>',\n ] : [\n brackets === 'angle' ? '<>' : '[]',\n ];\n\n isGenericMatch = checkPostFixes.some((checkPostFix) => {\n if (preferredTypes?.[checkPostFix] !== undefined) {\n typeName = checkPostFix;\n\n return true;\n }\n\n return false;\n });\n }\n }\n\n const directNameMatch = preferredTypes?.[typeNodeName] !== undefined &&\n !Object.values(preferredTypes).includes(typeNodeName);\n const unifiedSyntaxParentMatch = property && directNameMatch && unifyParentAndChildTypeChecks;\n isGenericMatch = isGenericMatch || unifiedSyntaxParentMatch;\n\n hasMatchingPreferredType = isGenericMatch ||\n directNameMatch && !property;\n }\n\n return [\n hasMatchingPreferredType, typeName, isGenericMatch,\n ];\n };\n\n /**\n * Iterates strict types to see if any should be added to `invalidTypes` (and\n * the the relevant strict type returned as the new preferred type).\n *\n * @param {string} typeNodeName\n * @param {string} preferred\n * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} parentNode\n * @param {string[]} invalidTypes\n * @returns {string} The `preferred` type string, optionally changed\n */\n const checkNativeTypes = (typeNodeName, preferred, parentNode, invalidTypes) => {\n let changedPreferred = preferred;\n for (const strictNativeType of strictNativeTypes) {\n if (\n // Todo: Avoid typescript condition if moving to default typescript\n strictNativeType === 'object' && mode === 'typescript' &&\n (\n // This is not set to remap with exact type match (e.g.,\n // `object: 'Object'`), so can ignore (including if circular)\n !preferredTypes?.[typeNodeName] ||\n // Although present on `preferredTypes` for remapping, this is a\n // parent object without a parent match (and not\n // `unifyParentAndChildTypeChecks`) and we don't want\n // `object<>` given TypeScript issue https://github.com/microsoft/TypeScript/issues/20555\n parentNode?.elements.length && (\n parentNode?.left.type === 'JsdocTypeName' &&\n parentNode?.left.value === 'Object'\n )\n )\n ) {\n continue;\n }\n\n if (strictNativeType !== typeNodeName &&\n strictNativeType.toLowerCase() === typeNodeName.toLowerCase() &&\n\n // Don't report if user has own map for a strict native type\n (!preferredTypes || preferredTypes?.[strictNativeType] === undefined)\n ) {\n changedPreferred = strictNativeType;\n invalidTypes.push([\n typeNodeName, changedPreferred,\n ]);\n break;\n }\n }\n\n return changedPreferred;\n };\n\n /**\n * Collect invalid type info.\n *\n * @param {string} type\n * @param {string} value\n * @param {string} tagName\n * @param {string} property\n * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} node\n * @param {import('jsdoc-type-pratt-parser/dist/src/index.d.ts').NonTerminalResult} parentNode\n * @param {string[]} invalidTypes\n * @returns {void}\n */\n const getInvalidTypes = (type, value, tagName, property, node, parentNode, invalidTypes) => {\n let typeNodeName = type === 'JsdocTypeAny' ? '*' : value;\n\n const [\n hasMatchingPreferredType,\n typeName,\n isGenericMatch,\n ] = getPreferredTypeInfo(type, typeNodeName, parentNode, property);\n\n let preferred;\n let types;\n if (hasMatchingPreferredType) {\n const preferredSetting = preferredTypes[typeName];\n typeNodeName = typeName === '[]' ? typeName : typeNodeName;\n\n if (!preferredSetting) {\n invalidTypes.push([\n typeNodeName,\n ]);\n } else if (typeof preferredSetting === 'string') {\n preferred = preferredSetting;\n invalidTypes.push([\n typeNodeName, preferred,\n ]);\n } else if (typeof preferredSetting === 'object') {\n preferred = preferredSetting?.replacement;\n invalidTypes.push([\n typeNodeName,\n preferred,\n preferredSetting?.message,\n ]);\n } else {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.',\n );\n\n return;\n }\n } else if (Object.entries(structuredTags).some(([\n tag,\n {\n type: typs,\n },\n ]) => {\n types = typs;\n\n return tag === tagName &&\n Array.isArray(types) &&\n !types.includes(typeNodeName);\n })) {\n invalidTypes.push([\n typeNodeName, types,\n ]);\n } else if (!noDefaults && type === 'JsdocTypeName') {\n preferred = checkNativeTypes(typeNodeName, preferred, parentNode, invalidTypes);\n }\n\n // For fixer\n if (preferred) {\n adjustNames(type, preferred, isGenericMatch, typeNodeName, node, parentNode);\n }\n };\n\n for (const jsdocTag of jsdocTagsWithPossibleType) {\n const invalidTypes = [];\n let typeAst;\n\n try {\n typeAst = mode === 'permissive' ? tryParse(jsdocTag.type) : parse(jsdocTag.type, mode);\n } catch {\n continue;\n }\n\n const tagName = jsdocTag.tag;\n\n traverse(typeAst, (node, parentNode, property) => {\n const {\n type,\n value,\n } = node;\n if (![\n 'JsdocTypeName', 'JsdocTypeAny',\n ].includes(type)) {\n return;\n }\n\n getInvalidTypes(type, value, tagName, property, node, parentNode, invalidTypes);\n });\n\n if (invalidTypes.length) {\n const fixedType = stringify(typeAst);\n\n /**\n * @param {any} fixer The ESLint fixer\n * @returns {string}\n */\n const fix = (fixer) => {\n return fixer.replaceText(\n jsdocNode,\n sourceCode.getText(jsdocNode).replace(\n `{${jsdocTag.type}}`,\n `{${fixedType}}`,\n ),\n );\n };\n\n for (const [\n badType,\n preferredType = '',\n message,\n ] of invalidTypes) {\n const tagValue = jsdocTag.name ? ` \"${jsdocTag.name}\"` : '';\n if (exemptTagContexts.some(({\n tag,\n types,\n }) => {\n return tag === tagName &&\n (types === true || types.includes(jsdocTag.type));\n })) {\n continue;\n }\n\n report(\n message ||\n `Invalid JSDoc @${tagName}${tagValue} type \"${badType}\"` +\n (preferredType ? '; ' : '.') +\n (preferredType ? `prefer: ${JSON.stringify(preferredType)}.` : ''),\n preferredType ? fix : null,\n jsdocTag,\n message ? {\n tagName,\n tagValue,\n } : null,\n );\n }\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Reports invalid types.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-types',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n exemptTagContexts: {\n items: {\n additionalProperties: false,\n properties: {\n tag: {\n type: 'string',\n },\n types: {\n oneOf: [\n {\n type: 'boolean',\n },\n {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n ],\n },\n },\n type: 'object',\n },\n type: 'array',\n },\n noDefaults: {\n type: 'boolean',\n },\n unifyParentAndChildTypeChecks: {\n type: 'boolean',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"checkTypes.js"}
@@ -11,7 +11,7 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
11
11
 
12
12
  // If supporting Node >= 10, we could loosen the default to this for the
13
13
  // initial letter: \\p{Upper}
14
- const matchDescriptionDefault = '^[A-Z`\\d_][\\s\\S]*[.?!`]\\s*$';
14
+ const matchDescriptionDefault = '^\n?([A-Z`\\d_][\\s\\S]*[.?!`]\\s*)?$';
15
15
 
16
16
  const stringOrDefault = (value, userDefault) => {
17
17
  return typeof value === 'string' ? value : userDefault || matchDescriptionDefault;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/rules/matchDescription.js"],"names":["matchDescriptionDefault","stringOrDefault","value","userDefault","jsdoc","report","context","utils","mainDescription","matchDescription","message","tags","options","validateDescription","desc","tag","mainDescriptionMatch","errorMessage","match","Object","prototype","hasOwnProperty","call","tagValue","tagName","regex","getRegexFromString","test","line","source","number","description","getDescription","keys","length","hasOptionTag","Boolean","forEachPreferredTag","matchingJsdocTag","targetTagName","name","getTagDescription","trim","whitelistedTags","filterTags","tagsWithNames","tagsWithoutNames","getTagsByType","some","replace","contextDefaults","meta","docs","url","schema","additionalProperties","properties","contexts","items","anyOf","type","comment","oneOf","format","patternProperties","enum"],"mappings":"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","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\n// If supporting Node >= 10, we could loosen the default to this for the\n// initial letter: \\\\p{Upper}\nconst matchDescriptionDefault = '^[A-Z`\\\\d_][\\\\s\\\\S]*[.?!`]\\\\s*$';\n\nconst stringOrDefault = (value, userDefault) => {\n return typeof value === 'string' ?\n value :\n userDefault || matchDescriptionDefault;\n};\n\nexport default iterateJsdoc(({\n jsdoc,\n report,\n context,\n utils,\n}) => {\n const {\n mainDescription,\n matchDescription,\n message,\n tags,\n } = context.options[0] || {};\n\n const validateDescription = (desc, tag) => {\n let mainDescriptionMatch = mainDescription;\n let errorMessage = message;\n if (typeof mainDescription === 'object') {\n mainDescriptionMatch = mainDescription.match;\n errorMessage = mainDescription.message;\n }\n\n if (mainDescriptionMatch === false && (\n !tag || !Object.prototype.hasOwnProperty.call(tags, tag.tag))\n ) {\n return;\n }\n\n let tagValue = mainDescriptionMatch;\n if (tag) {\n const tagName = tag.tag;\n if (typeof tags[tagName] === 'object') {\n tagValue = tags[tagName].match;\n errorMessage = tags[tagName].message;\n } else {\n tagValue = tags[tagName];\n }\n }\n\n const regex = utils.getRegexFromString(\n stringOrDefault(tagValue, matchDescription),\n );\n\n if (!regex.test(desc)) {\n report(\n errorMessage || 'JSDoc description does not satisfy the regex pattern.',\n null,\n tag || {\n // Add one as description would typically be into block\n line: jsdoc.source[0].number + 1,\n },\n );\n }\n };\n\n const {\n description,\n } = utils.getDescription();\n if (description) {\n validateDescription(description);\n }\n\n if (!tags || !Object.keys(tags).length) {\n return;\n }\n\n const hasOptionTag = (tagName) => {\n return Boolean(tags[tagName]);\n };\n\n utils.forEachPreferredTag('description', (matchingJsdocTag, targetTagName) => {\n const desc = (matchingJsdocTag.name + ' ' + utils.getTagDescription(matchingJsdocTag)).trim();\n if (hasOptionTag(targetTagName)) {\n validateDescription(desc, matchingJsdocTag);\n }\n }, true);\n\n const whitelistedTags = utils.filterTags(({\n tag: tagName,\n }) => {\n return hasOptionTag(tagName);\n });\n const {\n tagsWithNames,\n tagsWithoutNames,\n } = utils.getTagsByType(whitelistedTags);\n\n tagsWithNames.some((tag) => {\n const desc = utils.getTagDescription(tag).replace(/^[- ]*/u, '')\n .trim();\n\n return validateDescription(desc, tag);\n });\n\n tagsWithoutNames.some((tag) => {\n const desc = (tag.name + ' ' + utils.getTagDescription(tag)).trim();\n\n return validateDescription(desc, tag);\n });\n}, {\n contextDefaults: true,\n meta: {\n docs: {\n description: 'Enforces a regular expression pattern on descriptions.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-match-description',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n contexts: {\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n comment: {\n type: 'string',\n },\n context: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n mainDescription: {\n oneOf: [\n {\n format: 'regex',\n type: 'string',\n },\n {\n type: 'boolean',\n },\n {\n additionalProperties: false,\n properties: {\n match: {\n oneOf: [\n {\n format: 'regex',\n type: 'string',\n },\n {\n type: 'boolean',\n },\n ],\n },\n message: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n },\n matchDescription: {\n format: 'regex',\n type: 'string',\n },\n message: {\n type: 'string',\n },\n tags: {\n patternProperties: {\n '.*': {\n oneOf: [\n {\n format: 'regex',\n type: 'string',\n },\n {\n enum: [\n true,\n ],\n type: 'boolean',\n },\n {\n additionalProperties: false,\n properties: {\n match: {\n oneOf: [\n {\n format: 'regex',\n type: 'string',\n },\n {\n enum: [\n true,\n ],\n type: 'boolean',\n },\n ],\n },\n message: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n },\n },\n type: 'object',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"matchDescription.js"}
1
+ {"version":3,"sources":["../../src/rules/matchDescription.js"],"names":["matchDescriptionDefault","stringOrDefault","value","userDefault","jsdoc","report","context","utils","mainDescription","matchDescription","message","tags","options","validateDescription","desc","tag","mainDescriptionMatch","errorMessage","match","Object","prototype","hasOwnProperty","call","tagValue","tagName","regex","getRegexFromString","test","line","source","number","description","getDescription","keys","length","hasOptionTag","Boolean","forEachPreferredTag","matchingJsdocTag","targetTagName","name","getTagDescription","trim","whitelistedTags","filterTags","tagsWithNames","tagsWithoutNames","getTagsByType","some","replace","contextDefaults","meta","docs","url","schema","additionalProperties","properties","contexts","items","anyOf","type","comment","oneOf","format","patternProperties","enum"],"mappings":"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","sourcesContent":["import iterateJsdoc from '../iterateJsdoc';\n\n// If supporting Node >= 10, we could loosen the default to this for the\n// initial letter: \\\\p{Upper}\nconst matchDescriptionDefault = '^\\n?([A-Z`\\\\d_][\\\\s\\\\S]*[.?!`]\\\\s*)?$';\n\nconst stringOrDefault = (value, userDefault) => {\n return typeof value === 'string' ?\n value :\n userDefault || matchDescriptionDefault;\n};\n\nexport default iterateJsdoc(({\n jsdoc,\n report,\n context,\n utils,\n}) => {\n const {\n mainDescription,\n matchDescription,\n message,\n tags,\n } = context.options[0] || {};\n\n const validateDescription = (desc, tag) => {\n let mainDescriptionMatch = mainDescription;\n let errorMessage = message;\n if (typeof mainDescription === 'object') {\n mainDescriptionMatch = mainDescription.match;\n errorMessage = mainDescription.message;\n }\n\n if (mainDescriptionMatch === false && (\n !tag || !Object.prototype.hasOwnProperty.call(tags, tag.tag))\n ) {\n return;\n }\n\n let tagValue = mainDescriptionMatch;\n if (tag) {\n const tagName = tag.tag;\n if (typeof tags[tagName] === 'object') {\n tagValue = tags[tagName].match;\n errorMessage = tags[tagName].message;\n } else {\n tagValue = tags[tagName];\n }\n }\n\n const regex = utils.getRegexFromString(\n stringOrDefault(tagValue, matchDescription),\n );\n\n if (!regex.test(desc)) {\n report(\n errorMessage || 'JSDoc description does not satisfy the regex pattern.',\n null,\n tag || {\n // Add one as description would typically be into block\n line: jsdoc.source[0].number + 1,\n },\n );\n }\n };\n\n const {\n description,\n } = utils.getDescription();\n if (description) {\n validateDescription(description);\n }\n\n if (!tags || !Object.keys(tags).length) {\n return;\n }\n\n const hasOptionTag = (tagName) => {\n return Boolean(tags[tagName]);\n };\n\n utils.forEachPreferredTag('description', (matchingJsdocTag, targetTagName) => {\n const desc = (matchingJsdocTag.name + ' ' + utils.getTagDescription(matchingJsdocTag)).trim();\n if (hasOptionTag(targetTagName)) {\n validateDescription(desc, matchingJsdocTag);\n }\n }, true);\n\n const whitelistedTags = utils.filterTags(({\n tag: tagName,\n }) => {\n return hasOptionTag(tagName);\n });\n const {\n tagsWithNames,\n tagsWithoutNames,\n } = utils.getTagsByType(whitelistedTags);\n\n tagsWithNames.some((tag) => {\n const desc = utils.getTagDescription(tag).replace(/^[- ]*/u, '')\n .trim();\n\n return validateDescription(desc, tag);\n });\n\n tagsWithoutNames.some((tag) => {\n const desc = (tag.name + ' ' + utils.getTagDescription(tag)).trim();\n\n return validateDescription(desc, tag);\n });\n}, {\n contextDefaults: true,\n meta: {\n docs: {\n description: 'Enforces a regular expression pattern on descriptions.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-match-description',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n contexts: {\n items: {\n anyOf: [\n {\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n comment: {\n type: 'string',\n },\n context: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n },\n type: 'array',\n },\n mainDescription: {\n oneOf: [\n {\n format: 'regex',\n type: 'string',\n },\n {\n type: 'boolean',\n },\n {\n additionalProperties: false,\n properties: {\n match: {\n oneOf: [\n {\n format: 'regex',\n type: 'string',\n },\n {\n type: 'boolean',\n },\n ],\n },\n message: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n },\n matchDescription: {\n format: 'regex',\n type: 'string',\n },\n message: {\n type: 'string',\n },\n tags: {\n patternProperties: {\n '.*': {\n oneOf: [\n {\n format: 'regex',\n type: 'string',\n },\n {\n enum: [\n true,\n ],\n type: 'boolean',\n },\n {\n additionalProperties: false,\n properties: {\n match: {\n oneOf: [\n {\n format: 'regex',\n type: 'string',\n },\n {\n enum: [\n true,\n ],\n type: 'boolean',\n },\n ],\n },\n message: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n },\n },\n type: 'object',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"matchDescription.js"}
@@ -71,7 +71,7 @@ var _default = (0, _iterateJsdoc.default)(({
71
71
  }
72
72
 
73
73
  const typedefDeclarations = context.getAllComments().filter(comment => {
74
- return comment.value.startsWith('*');
74
+ return /^\*\s/u.test(comment.value);
75
75
  }).map(commentNode => {
76
76
  return (0, _iterateJsdoc.parseComment)(commentNode, '');
77
77
  }).flatMap(doc => {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/rules/noUndefinedTypes.js"],"names":["extraTypes","stripPseudoTypes","str","replace","context","node","report","settings","sourceCode","utils","scopeManager","globalScope","definedTypes","options","definedPreferredTypes","preferredTypes","structuredTags","mode","Object","keys","length","values","map","preferredType","undefined","reportSettings","replacement","filter","typedefDeclarations","getAllComments","comment","value","startsWith","commentNode","flatMap","doc","tags","tag","isNamepathDefiningTag","name","ancestorNodes","currentNode","parent","push","getTemplateTags","ancestorNode","jsdoc","jsdocUtils","filterTags","templateTags","getPresentTags","closureGenericTypes","parseClosureTemplateTag","cjsOrESMScope","childScopes","block","type","allDefinedTypes","Set","variables","concat","jsdocTagsWithPossibleType","tagMightHaveTypePosition","parsedType","structuredTypes","has","Array","isArray","includes","markVariableAsUsed","iterateAllJsdocs","meta","docs","description","url","schema","additionalProperties","properties","items"],"mappings":"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","sourcesContent":["import {\n getJSDocComment,\n\n traverse,\n parse as parseType,\n tryParse as tryParseType,\n} from '@es-joy/jsdoccomment';\nimport iterateJsdoc, {\n parseComment,\n} from '../iterateJsdoc';\nimport jsdocUtils from '../jsdocUtils';\n\nconst extraTypes = [\n 'null', 'undefined', 'void', 'string', 'boolean', 'object',\n 'function', 'symbol',\n 'number', 'bigint', 'NaN', 'Infinity',\n 'any', '*', 'never', 'unknown', 'const',\n 'this', 'true', 'false',\n 'Array', 'Object', 'RegExp', 'Date', 'Function',\n];\n\nconst stripPseudoTypes = (str) => {\n return str && str.replace(/(?:\\.|<>|\\.<>|\\[\\])$/u, '');\n};\n\nexport default iterateJsdoc(({\n context,\n node,\n report,\n settings,\n sourceCode,\n utils,\n}) => {\n const {\n scopeManager,\n } = sourceCode;\n const {\n globalScope,\n } = scopeManager;\n\n const {\n definedTypes = [],\n } = context.options[0] || {};\n\n let definedPreferredTypes = [];\n const {\n preferredTypes,\n structuredTags,\n mode,\n } = settings;\n if (Object.keys(preferredTypes).length) {\n definedPreferredTypes = Object.values(preferredTypes).map((preferredType) => {\n if (typeof preferredType === 'string') {\n // May become an empty string but will be filtered out below\n return stripPseudoTypes(preferredType);\n }\n\n if (!preferredType) {\n return undefined;\n }\n\n if (typeof preferredType !== 'object') {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.',\n );\n }\n\n return stripPseudoTypes(preferredType.replacement);\n })\n .filter((preferredType) => {\n return preferredType;\n });\n }\n\n const typedefDeclarations = context.getAllComments()\n .filter((comment) => {\n return comment.value.startsWith('*');\n })\n .map((commentNode) => {\n return parseComment(commentNode, '');\n })\n .flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return utils.isNamepathDefiningTag(tag);\n });\n })\n .map((tag) => {\n return tag.name;\n });\n\n const ancestorNodes = [];\n\n let currentNode = node;\n // No need for Program node?\n while (currentNode?.parent) {\n ancestorNodes.push(currentNode);\n currentNode = currentNode.parent;\n }\n\n const getTemplateTags = function (ancestorNode) {\n const commentNode = getJSDocComment(sourceCode, ancestorNode, settings);\n if (!commentNode) {\n return [];\n }\n\n const jsdoc = parseComment(commentNode, '');\n\n return jsdocUtils.filterTags(jsdoc.tags, (tag) => {\n return tag.tag === 'template';\n });\n };\n\n // `currentScope` may be `null` or `Program`, so in such a case,\n // we look to present tags instead\n const templateTags = ancestorNodes.length ?\n ancestorNodes.flatMap((ancestorNode) => {\n return getTemplateTags(ancestorNode);\n }) :\n utils.getPresentTags('template');\n\n const closureGenericTypes = templateTags.flatMap((tag) => {\n return utils.parseClosureTemplateTag(tag);\n });\n\n // In modules, including Node, there is a global scope at top with the\n // Program scope inside\n const cjsOrESMScope = globalScope.childScopes[0]?.block.type === 'Program';\n\n const allDefinedTypes = new Set(globalScope.variables.map(({\n name,\n }) => {\n return name;\n })\n\n // If the file is a module, concat the variables from the module scope.\n .concat(\n cjsOrESMScope ?\n globalScope.childScopes.flatMap(({\n variables,\n }) => {\n return variables;\n }).map(({\n name,\n }) => {\n return name;\n }) : [],\n )\n .concat(extraTypes)\n .concat(typedefDeclarations)\n .concat(definedTypes)\n .concat(definedPreferredTypes)\n .concat(settings.mode === 'jsdoc' ? [] : closureGenericTypes));\n\n const jsdocTagsWithPossibleType = utils.filterTags(({\n tag,\n }) => {\n return utils.tagMightHaveTypePosition(tag) && (tag !== 'suppress' || settings.mode !== 'closure');\n });\n\n for (const tag of jsdocTagsWithPossibleType) {\n let parsedType;\n\n try {\n parsedType = mode === 'permissive' ? tryParseType(tag.type) : parseType(tag.type, mode);\n } catch {\n // On syntax error, will be handled by valid-types.\n continue;\n }\n\n traverse(parsedType, ({\n type,\n value,\n }) => {\n if (type === 'JsdocTypeName') {\n const structuredTypes = structuredTags[tag.tag]?.type;\n if (!allDefinedTypes.has(value) &&\n (!Array.isArray(structuredTypes) || !structuredTypes.includes(value))\n ) {\n report(`The type '${value}' is undefined.`, null, tag);\n } else if (!extraTypes.includes(value)) {\n context.markVariableAsUsed(value);\n }\n }\n });\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Checks that types in jsdoc comments are defined.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-no-undefined-types',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n definedTypes: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"noUndefinedTypes.js"}
1
+ {"version":3,"sources":["../../src/rules/noUndefinedTypes.js"],"names":["extraTypes","stripPseudoTypes","str","replace","context","node","report","settings","sourceCode","utils","scopeManager","globalScope","definedTypes","options","definedPreferredTypes","preferredTypes","structuredTags","mode","Object","keys","length","values","map","preferredType","undefined","reportSettings","replacement","filter","typedefDeclarations","getAllComments","comment","test","value","commentNode","flatMap","doc","tags","tag","isNamepathDefiningTag","name","ancestorNodes","currentNode","parent","push","getTemplateTags","ancestorNode","jsdoc","jsdocUtils","filterTags","templateTags","getPresentTags","closureGenericTypes","parseClosureTemplateTag","cjsOrESMScope","childScopes","block","type","allDefinedTypes","Set","variables","concat","jsdocTagsWithPossibleType","tagMightHaveTypePosition","parsedType","structuredTypes","has","Array","isArray","includes","markVariableAsUsed","iterateAllJsdocs","meta","docs","description","url","schema","additionalProperties","properties","items"],"mappings":"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","sourcesContent":["import {\n getJSDocComment,\n\n traverse,\n parse as parseType,\n tryParse as tryParseType,\n} from '@es-joy/jsdoccomment';\nimport iterateJsdoc, {\n parseComment,\n} from '../iterateJsdoc';\nimport jsdocUtils from '../jsdocUtils';\n\nconst extraTypes = [\n 'null', 'undefined', 'void', 'string', 'boolean', 'object',\n 'function', 'symbol',\n 'number', 'bigint', 'NaN', 'Infinity',\n 'any', '*', 'never', 'unknown', 'const',\n 'this', 'true', 'false',\n 'Array', 'Object', 'RegExp', 'Date', 'Function',\n];\n\nconst stripPseudoTypes = (str) => {\n return str && str.replace(/(?:\\.|<>|\\.<>|\\[\\])$/u, '');\n};\n\nexport default iterateJsdoc(({\n context,\n node,\n report,\n settings,\n sourceCode,\n utils,\n}) => {\n const {\n scopeManager,\n } = sourceCode;\n const {\n globalScope,\n } = scopeManager;\n\n const {\n definedTypes = [],\n } = context.options[0] || {};\n\n let definedPreferredTypes = [];\n const {\n preferredTypes,\n structuredTags,\n mode,\n } = settings;\n if (Object.keys(preferredTypes).length) {\n definedPreferredTypes = Object.values(preferredTypes).map((preferredType) => {\n if (typeof preferredType === 'string') {\n // May become an empty string but will be filtered out below\n return stripPseudoTypes(preferredType);\n }\n\n if (!preferredType) {\n return undefined;\n }\n\n if (typeof preferredType !== 'object') {\n utils.reportSettings(\n 'Invalid `settings.jsdoc.preferredTypes`. Values must be falsy, a string, or an object.',\n );\n }\n\n return stripPseudoTypes(preferredType.replacement);\n })\n .filter((preferredType) => {\n return preferredType;\n });\n }\n\n const typedefDeclarations = context.getAllComments()\n .filter((comment) => {\n return (/^\\*\\s/u).test(comment.value);\n })\n .map((commentNode) => {\n return parseComment(commentNode, '');\n })\n .flatMap((doc) => {\n return doc.tags.filter(({\n tag,\n }) => {\n return utils.isNamepathDefiningTag(tag);\n });\n })\n .map((tag) => {\n return tag.name;\n });\n\n const ancestorNodes = [];\n\n let currentNode = node;\n // No need for Program node?\n while (currentNode?.parent) {\n ancestorNodes.push(currentNode);\n currentNode = currentNode.parent;\n }\n\n const getTemplateTags = function (ancestorNode) {\n const commentNode = getJSDocComment(sourceCode, ancestorNode, settings);\n if (!commentNode) {\n return [];\n }\n\n const jsdoc = parseComment(commentNode, '');\n\n return jsdocUtils.filterTags(jsdoc.tags, (tag) => {\n return tag.tag === 'template';\n });\n };\n\n // `currentScope` may be `null` or `Program`, so in such a case,\n // we look to present tags instead\n const templateTags = ancestorNodes.length ?\n ancestorNodes.flatMap((ancestorNode) => {\n return getTemplateTags(ancestorNode);\n }) :\n utils.getPresentTags('template');\n\n const closureGenericTypes = templateTags.flatMap((tag) => {\n return utils.parseClosureTemplateTag(tag);\n });\n\n // In modules, including Node, there is a global scope at top with the\n // Program scope inside\n const cjsOrESMScope = globalScope.childScopes[0]?.block.type === 'Program';\n\n const allDefinedTypes = new Set(globalScope.variables.map(({\n name,\n }) => {\n return name;\n })\n\n // If the file is a module, concat the variables from the module scope.\n .concat(\n cjsOrESMScope ?\n globalScope.childScopes.flatMap(({\n variables,\n }) => {\n return variables;\n }).map(({\n name,\n }) => {\n return name;\n }) : [],\n )\n .concat(extraTypes)\n .concat(typedefDeclarations)\n .concat(definedTypes)\n .concat(definedPreferredTypes)\n .concat(settings.mode === 'jsdoc' ? [] : closureGenericTypes));\n\n const jsdocTagsWithPossibleType = utils.filterTags(({\n tag,\n }) => {\n return utils.tagMightHaveTypePosition(tag) && (tag !== 'suppress' || settings.mode !== 'closure');\n });\n\n for (const tag of jsdocTagsWithPossibleType) {\n let parsedType;\n\n try {\n parsedType = mode === 'permissive' ? tryParseType(tag.type) : parseType(tag.type, mode);\n } catch {\n // On syntax error, will be handled by valid-types.\n continue;\n }\n\n traverse(parsedType, ({\n type,\n value,\n }) => {\n if (type === 'JsdocTypeName') {\n const structuredTypes = structuredTags[tag.tag]?.type;\n if (!allDefinedTypes.has(value) &&\n (!Array.isArray(structuredTypes) || !structuredTypes.includes(value))\n ) {\n report(`The type '${value}' is undefined.`, null, tag);\n } else if (!extraTypes.includes(value)) {\n context.markVariableAsUsed(value);\n }\n }\n });\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Checks that types in jsdoc comments are defined.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-no-undefined-types',\n },\n schema: [\n {\n additionalProperties: false,\n properties: {\n definedTypes: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"noUndefinedTypes.js"}
@@ -63,7 +63,7 @@ const capitalize = str => {
63
63
  };
64
64
 
65
65
  const validateDescription = (description, reportOrig, jsdocNode, abbreviationsRegex, sourceCode, tag, newlineBeforeCapsAssumesBadSentenceEnd) => {
66
- if (!description) {
66
+ if (!description || /^\n+$/u.test(description)) {
67
67
  return false;
68
68
  }
69
69
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/rules/requireDescriptionCompleteSentence.js"],"names":["otherDescriptiveTags","Set","extractParagraphs","text","split","extractSentences","abbreviationsRegex","txt","replace","sentenceEndGrouping","puncts","RegExtras","map","punct","sentence","idx","test","isNewLinePrecededByAPeriod","lastLineEndsSentence","lines","some","line","isCapitalized","str","toUpperCase","isTable","charAt","capitalize","slice","validateDescription","description","reportOrig","jsdocNode","sourceCode","tag","newlineBeforeCapsAssumesBadSentenceEnd","paragraphs","paragraph","parIdx","sentences","fix","fixer","getText","pop","RegExp","filter","sentence_","beginning","reg","_$0","$1","replaceText","report","msg","tagObj","source","number","column","paragraphNoAbbreviations","context","jsdoc","utils","options","abbreviations","length","abbreviation","join","getDescription","forEachPreferredTag","matchingJsdocTag","desc","name","getTagDescription","trim","tagsWithNames","getTagsByType","tags","tagsWithoutNames","filterTags","tagName","has","hasOptionTag","trimEnd","iterateAllJsdocs","meta","docs","url","fixable","schema","additionalProperties","properties","items","type"],"mappings":"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","sourcesContent":["import escapeStringRegexp from 'escape-string-regexp';\nimport {\n RegExtras,\n} from 'regextras/dist/main-umd';\nimport iterateJsdoc from '../iterateJsdoc';\n\nconst otherDescriptiveTags = new Set([\n // 'copyright' and 'see' might be good addition, but as the former may be\n // sensitive text, and the latter may have just a link, they are not\n // included by default\n 'summary', 'file', 'fileoverview', 'overview', 'classdesc', 'todo',\n 'deprecated', 'throws', 'exception', 'yields', 'yield',\n]);\n\nconst extractParagraphs = (text) => {\n return text.split(/(?<![;:])\\n\\n/u);\n};\n\nconst extractSentences = (text, abbreviationsRegex) => {\n const txt = text\n\n // Remove all {} tags.\n .replace(/\\{[\\s\\S]*?\\}\\s*/gu, '')\n\n // Remove custom abbreviations\n .replace(abbreviationsRegex, '');\n\n const sentenceEndGrouping = /([.?!])(?:\\s+|$)/u;\n\n // eslint-disable-next-line unicorn/no-array-method-this-argument\n const puncts = new RegExtras(sentenceEndGrouping).map(txt, (punct) => {\n return punct;\n });\n\n return txt\n\n .split(/[.?!](?:\\s+|$)/u)\n\n // Re-add the dot.\n .map((sentence, idx) => {\n return /^\\s*$/u.test(sentence) ? sentence : `${sentence}${puncts[idx] || ''}`;\n });\n};\n\nconst isNewLinePrecededByAPeriod = (text) => {\n let lastLineEndsSentence;\n\n const lines = text.split('\\n');\n\n return !lines.some((line) => {\n if (lastLineEndsSentence === false && /^[A-Z][a-z]/u.test(line)) {\n return true;\n }\n\n lastLineEndsSentence = /[.:?!|]$/u.test(line);\n\n return false;\n });\n};\n\nconst isCapitalized = (str) => {\n return str[0] === str[0].toUpperCase();\n};\n\nconst isTable = (str) => {\n return str.charAt() === '|';\n};\n\nconst capitalize = (str) => {\n return str.charAt(0).toUpperCase() + str.slice(1);\n};\n\nconst validateDescription = (\n description, reportOrig, jsdocNode, abbreviationsRegex,\n sourceCode, tag, newlineBeforeCapsAssumesBadSentenceEnd,\n) => {\n if (!description) {\n return false;\n }\n\n const paragraphs = extractParagraphs(description);\n\n return paragraphs.some((paragraph, parIdx) => {\n const sentences = extractSentences(paragraph, abbreviationsRegex);\n\n const fix = (fixer) => {\n let text = sourceCode.getText(jsdocNode);\n\n if (!/[.:?!]$/u.test(paragraph)) {\n const line = paragraph.split('\\n').pop();\n\n text = text.replace(new RegExp(`${escapeStringRegexp(line)}$`, 'mu'), `${line}.`);\n }\n\n for (const sentence of sentences.filter((sentence_) => {\n return !(/^\\s*$/u).test(sentence_) && !isCapitalized(sentence_) &&\n !isTable(sentence_);\n })) {\n const beginning = sentence.split('\\n')[0];\n\n if (tag.tag) {\n const reg = new RegExp(`(@${escapeStringRegexp(tag.tag)}.*)${escapeStringRegexp(beginning)}`, 'u');\n\n text = text.replace(reg, (_$0, $1) => {\n return $1 + capitalize(beginning);\n });\n } else {\n text = text.replace(new RegExp('((?:[.!?]|\\\\*|\\\\})\\\\s*)' + escapeStringRegexp(beginning), 'u'), '$1' + capitalize(beginning));\n }\n }\n\n return fixer.replaceText(jsdocNode, text);\n };\n\n const report = (msg, fixer, tagObj) => {\n if ('line' in tagObj) {\n tagObj.line += parIdx * 2;\n } else {\n tagObj.source[0].number += parIdx * 2;\n }\n\n // Avoid errors if old column doesn't exist here\n tagObj.column = 0;\n reportOrig(msg, fixer, tagObj);\n };\n\n if (sentences.some((sentence) => {\n return !(/^\\s*$/u).test(sentence) && !isCapitalized(sentence) && !isTable(sentence);\n })) {\n report('Sentence should start with an uppercase character.', fix, tag);\n }\n\n const paragraphNoAbbreviations = paragraph.replace(abbreviationsRegex, '');\n\n if (!/[.!?|]\\s*$/u.test(paragraphNoAbbreviations)) {\n report('Sentence must end with a period.', fix, tag);\n\n return true;\n }\n\n if (newlineBeforeCapsAssumesBadSentenceEnd && !isNewLinePrecededByAPeriod(paragraphNoAbbreviations)) {\n report('A line of text is started with an uppercase character, but preceding line does not end the sentence.', null, tag);\n\n return true;\n }\n\n return false;\n });\n};\n\nexport default iterateJsdoc(({\n sourceCode,\n context,\n jsdoc,\n report,\n jsdocNode,\n utils,\n}) => {\n const options = context.options[0] || {};\n const {\n abbreviations = [],\n newlineBeforeCapsAssumesBadSentenceEnd = false,\n } = options;\n\n const abbreviationsRegex = abbreviations.length ?\n new RegExp('\\\\b' + abbreviations.map((abbreviation) => {\n return escapeStringRegexp(abbreviation.replace(/\\.$/ug, '') + '.');\n }).join('|') + '(?:$|\\\\s)', 'gu') :\n '';\n\n const {\n description,\n } = utils.getDescription();\n\n if (validateDescription(description, report, jsdocNode, abbreviationsRegex, sourceCode, {\n line: jsdoc.source[0].number + 1,\n }, newlineBeforeCapsAssumesBadSentenceEnd)) {\n return;\n }\n\n utils.forEachPreferredTag('description', (matchingJsdocTag) => {\n const desc = `${matchingJsdocTag.name} ${utils.getTagDescription(matchingJsdocTag)}`.trim();\n validateDescription(desc, report, jsdocNode, abbreviationsRegex, sourceCode, matchingJsdocTag, newlineBeforeCapsAssumesBadSentenceEnd);\n }, true);\n\n const {\n tagsWithNames,\n } = utils.getTagsByType(jsdoc.tags);\n const tagsWithoutNames = utils.filterTags(({\n tag: tagName,\n }) => {\n return otherDescriptiveTags.has(tagName) ||\n utils.hasOptionTag(tagName) && !tagsWithNames.some(({\n tag,\n }) => {\n // If user accidentally adds tags with names (or like `returns`\n // get parsed as having names), do not add to this list\n return tag === tagName;\n });\n });\n\n tagsWithNames.some((tag) => {\n const desc = utils.getTagDescription(tag).replace(/^- /u, '').trimEnd();\n\n return validateDescription(desc, report, jsdocNode, abbreviationsRegex, sourceCode, tag, newlineBeforeCapsAssumesBadSentenceEnd);\n });\n\n tagsWithoutNames.some((tag) => {\n const desc = `${tag.name} ${utils.getTagDescription(tag)}`.trim();\n\n return validateDescription(desc, report, jsdocNode, abbreviationsRegex, sourceCode, tag, newlineBeforeCapsAssumesBadSentenceEnd);\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Requires that block description, explicit `@description`, and `@param`/`@returns` tag descriptions are written in complete sentences.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-description-complete-sentence',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n abbreviations: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n newlineBeforeCapsAssumesBadSentenceEnd: {\n type: 'boolean',\n },\n tags: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"requireDescriptionCompleteSentence.js"}
1
+ {"version":3,"sources":["../../src/rules/requireDescriptionCompleteSentence.js"],"names":["otherDescriptiveTags","Set","extractParagraphs","text","split","extractSentences","abbreviationsRegex","txt","replace","sentenceEndGrouping","puncts","RegExtras","map","punct","sentence","idx","test","isNewLinePrecededByAPeriod","lastLineEndsSentence","lines","some","line","isCapitalized","str","toUpperCase","isTable","charAt","capitalize","slice","validateDescription","description","reportOrig","jsdocNode","sourceCode","tag","newlineBeforeCapsAssumesBadSentenceEnd","paragraphs","paragraph","parIdx","sentences","fix","fixer","getText","pop","RegExp","filter","sentence_","beginning","reg","_$0","$1","replaceText","report","msg","tagObj","source","number","column","paragraphNoAbbreviations","context","jsdoc","utils","options","abbreviations","length","abbreviation","join","getDescription","forEachPreferredTag","matchingJsdocTag","desc","name","getTagDescription","trim","tagsWithNames","getTagsByType","tags","tagsWithoutNames","filterTags","tagName","has","hasOptionTag","trimEnd","iterateAllJsdocs","meta","docs","url","fixable","schema","additionalProperties","properties","items","type"],"mappings":"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","sourcesContent":["import escapeStringRegexp from 'escape-string-regexp';\nimport {\n RegExtras,\n} from 'regextras/dist/main-umd';\nimport iterateJsdoc from '../iterateJsdoc';\n\nconst otherDescriptiveTags = new Set([\n // 'copyright' and 'see' might be good addition, but as the former may be\n // sensitive text, and the latter may have just a link, they are not\n // included by default\n 'summary', 'file', 'fileoverview', 'overview', 'classdesc', 'todo',\n 'deprecated', 'throws', 'exception', 'yields', 'yield',\n]);\n\nconst extractParagraphs = (text) => {\n return text.split(/(?<![;:])\\n\\n/u);\n};\n\nconst extractSentences = (text, abbreviationsRegex) => {\n const txt = text\n\n // Remove all {} tags.\n .replace(/\\{[\\s\\S]*?\\}\\s*/gu, '')\n\n // Remove custom abbreviations\n .replace(abbreviationsRegex, '');\n\n const sentenceEndGrouping = /([.?!])(?:\\s+|$)/u;\n\n // eslint-disable-next-line unicorn/no-array-method-this-argument\n const puncts = new RegExtras(sentenceEndGrouping).map(txt, (punct) => {\n return punct;\n });\n\n return txt\n\n .split(/[.?!](?:\\s+|$)/u)\n\n // Re-add the dot.\n .map((sentence, idx) => {\n return /^\\s*$/u.test(sentence) ? sentence : `${sentence}${puncts[idx] || ''}`;\n });\n};\n\nconst isNewLinePrecededByAPeriod = (text) => {\n let lastLineEndsSentence;\n\n const lines = text.split('\\n');\n\n return !lines.some((line) => {\n if (lastLineEndsSentence === false && /^[A-Z][a-z]/u.test(line)) {\n return true;\n }\n\n lastLineEndsSentence = /[.:?!|]$/u.test(line);\n\n return false;\n });\n};\n\nconst isCapitalized = (str) => {\n return str[0] === str[0].toUpperCase();\n};\n\nconst isTable = (str) => {\n return str.charAt() === '|';\n};\n\nconst capitalize = (str) => {\n return str.charAt(0).toUpperCase() + str.slice(1);\n};\n\nconst validateDescription = (\n description, reportOrig, jsdocNode, abbreviationsRegex,\n sourceCode, tag, newlineBeforeCapsAssumesBadSentenceEnd,\n) => {\n if (!description || (/^\\n+$/u).test(description)) {\n return false;\n }\n\n const paragraphs = extractParagraphs(description);\n\n return paragraphs.some((paragraph, parIdx) => {\n const sentences = extractSentences(paragraph, abbreviationsRegex);\n\n const fix = (fixer) => {\n let text = sourceCode.getText(jsdocNode);\n\n if (!/[.:?!]$/u.test(paragraph)) {\n const line = paragraph.split('\\n').pop();\n\n text = text.replace(new RegExp(`${escapeStringRegexp(line)}$`, 'mu'), `${line}.`);\n }\n\n for (const sentence of sentences.filter((sentence_) => {\n return !(/^\\s*$/u).test(sentence_) && !isCapitalized(sentence_) &&\n !isTable(sentence_);\n })) {\n const beginning = sentence.split('\\n')[0];\n\n if (tag.tag) {\n const reg = new RegExp(`(@${escapeStringRegexp(tag.tag)}.*)${escapeStringRegexp(beginning)}`, 'u');\n\n text = text.replace(reg, (_$0, $1) => {\n return $1 + capitalize(beginning);\n });\n } else {\n text = text.replace(new RegExp('((?:[.!?]|\\\\*|\\\\})\\\\s*)' + escapeStringRegexp(beginning), 'u'), '$1' + capitalize(beginning));\n }\n }\n\n return fixer.replaceText(jsdocNode, text);\n };\n\n const report = (msg, fixer, tagObj) => {\n if ('line' in tagObj) {\n tagObj.line += parIdx * 2;\n } else {\n tagObj.source[0].number += parIdx * 2;\n }\n\n // Avoid errors if old column doesn't exist here\n tagObj.column = 0;\n reportOrig(msg, fixer, tagObj);\n };\n\n if (sentences.some((sentence) => {\n return !(/^\\s*$/u).test(sentence) && !isCapitalized(sentence) && !isTable(sentence);\n })) {\n report('Sentence should start with an uppercase character.', fix, tag);\n }\n\n const paragraphNoAbbreviations = paragraph.replace(abbreviationsRegex, '');\n\n if (!/[.!?|]\\s*$/u.test(paragraphNoAbbreviations)) {\n report('Sentence must end with a period.', fix, tag);\n\n return true;\n }\n\n if (newlineBeforeCapsAssumesBadSentenceEnd && !isNewLinePrecededByAPeriod(paragraphNoAbbreviations)) {\n report('A line of text is started with an uppercase character, but preceding line does not end the sentence.', null, tag);\n\n return true;\n }\n\n return false;\n });\n};\n\nexport default iterateJsdoc(({\n sourceCode,\n context,\n jsdoc,\n report,\n jsdocNode,\n utils,\n}) => {\n const options = context.options[0] || {};\n const {\n abbreviations = [],\n newlineBeforeCapsAssumesBadSentenceEnd = false,\n } = options;\n\n const abbreviationsRegex = abbreviations.length ?\n new RegExp('\\\\b' + abbreviations.map((abbreviation) => {\n return escapeStringRegexp(abbreviation.replace(/\\.$/ug, '') + '.');\n }).join('|') + '(?:$|\\\\s)', 'gu') :\n '';\n\n const {\n description,\n } = utils.getDescription();\n\n if (validateDescription(description, report, jsdocNode, abbreviationsRegex, sourceCode, {\n line: jsdoc.source[0].number + 1,\n }, newlineBeforeCapsAssumesBadSentenceEnd)) {\n return;\n }\n\n utils.forEachPreferredTag('description', (matchingJsdocTag) => {\n const desc = `${matchingJsdocTag.name} ${utils.getTagDescription(matchingJsdocTag)}`.trim();\n validateDescription(desc, report, jsdocNode, abbreviationsRegex, sourceCode, matchingJsdocTag, newlineBeforeCapsAssumesBadSentenceEnd);\n }, true);\n\n const {\n tagsWithNames,\n } = utils.getTagsByType(jsdoc.tags);\n const tagsWithoutNames = utils.filterTags(({\n tag: tagName,\n }) => {\n return otherDescriptiveTags.has(tagName) ||\n utils.hasOptionTag(tagName) && !tagsWithNames.some(({\n tag,\n }) => {\n // If user accidentally adds tags with names (or like `returns`\n // get parsed as having names), do not add to this list\n return tag === tagName;\n });\n });\n\n tagsWithNames.some((tag) => {\n const desc = utils.getTagDescription(tag).replace(/^- /u, '').trimEnd();\n\n return validateDescription(desc, report, jsdocNode, abbreviationsRegex, sourceCode, tag, newlineBeforeCapsAssumesBadSentenceEnd);\n });\n\n tagsWithoutNames.some((tag) => {\n const desc = `${tag.name} ${utils.getTagDescription(tag)}`.trim();\n\n return validateDescription(desc, report, jsdocNode, abbreviationsRegex, sourceCode, tag, newlineBeforeCapsAssumesBadSentenceEnd);\n });\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Requires that block description, explicit `@description`, and `@param`/`@returns` tag descriptions are written in complete sentences.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-require-description-complete-sentence',\n },\n fixable: 'code',\n schema: [\n {\n additionalProperties: false,\n properties: {\n abbreviations: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n newlineBeforeCapsAssumesBadSentenceEnd: {\n type: 'boolean',\n },\n tags: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'suggestion',\n },\n});\n"],"file":"requireDescriptionCompleteSentence.js"}
package/package.json CHANGED
@@ -5,9 +5,9 @@
5
5
  "url": "http://gajus.com"
6
6
  },
7
7
  "dependencies": {
8
- "@es-joy/jsdoccomment": "~0.21.2",
9
- "comment-parser": "1.3.0",
10
- "debug": "^4.3.3",
8
+ "@es-joy/jsdoccomment": "~0.22.1",
9
+ "comment-parser": "1.3.1",
10
+ "debug": "^4.3.4",
11
11
  "escape-string-regexp": "^4.0.0",
12
12
  "esquery": "^1.4.0",
13
13
  "regextras": "^0.8.0",
@@ -17,15 +17,15 @@
17
17
  "description": "JSDoc linting rules for ESLint.",
18
18
  "devDependencies": {
19
19
  "@babel/cli": "^7.17.6",
20
- "@babel/core": "^7.17.5",
20
+ "@babel/core": "^7.17.8",
21
21
  "@babel/eslint-parser": "^7.17.0",
22
22
  "@babel/node": "^7.16.8",
23
23
  "@babel/plugin-syntax-class-properties": "^7.12.13",
24
24
  "@babel/plugin-transform-flow-strip-types": "^7.16.7",
25
25
  "@babel/preset-env": "^7.16.11",
26
- "@babel/register": "^7.17.0",
26
+ "@babel/register": "^7.17.7",
27
27
  "@hkdobrev/run-if-changed": "^0.3.1",
28
- "@typescript-eslint/parser": "^5.14.0",
28
+ "@typescript-eslint/parser": "^5.15.0",
29
29
  "babel-plugin-add-module-exports": "^1.0.4",
30
30
  "babel-plugin-istanbul": "^6.1.1",
31
31
  "camelcase": "^6.3.0",
@@ -37,7 +37,7 @@
37
37
  "gitdown": "^3.1.5",
38
38
  "glob": "^7.2.0",
39
39
  "husky": "^7.0.4",
40
- "lint-staged": "^12.3.5",
40
+ "lint-staged": "^12.3.7",
41
41
  "lodash.defaultsdeep": "^4.6.1",
42
42
  "mocha": "^9.2.2",
43
43
  "nyc": "^15.1.0",
@@ -116,5 +116,5 @@
116
116
  "test-cov": "cross-env TIMING=1 nyc --reporter text npm run test-no-cov",
117
117
  "test-index": "npm run test-no-cov -- test/rules/index.js"
118
118
  },
119
- "version": "38.0.4"
119
+ "version": "38.0.7"
120
120
  }