eslint-plugin-jsdoc 39.9.1 → 40.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -2031,10 +2031,10 @@ for example.
2031
2031
  This rule allows one optional string argument. If it is `"always"` then a
2032
2032
  problem is raised when the lines are not aligned. If it is `"never"` then
2033
2033
  a problem should be raised when there is more than one space between each
2034
- line's parts. Defaults to `"never"`.
2034
+ line's parts. If it is `"any"`, no alignment is made. Defaults to `"never"`.
2035
2035
 
2036
- Note that in addition to alignment, both options will ensure at least one
2037
- space is present after the asterisk delimiter.
2036
+ Note that in addition to alignment, the "never" and "always" options will both
2037
+ ensure that at least one space is present after the asterisk delimiter.
2038
2038
 
2039
2039
  After the string, an options object is allowed with the following properties.
2040
2040
 
@@ -2042,8 +2042,7 @@ After the string, an options object is allowed with the following properties.
2042
2042
  <a name="eslint-plugin-jsdoc-rules-check-line-alignment-options-3-tags"></a>
2043
2043
  ##### <code>tags</code>
2044
2044
 
2045
- Use this to change the tags which are sought for alignment changes. *Currently*
2046
- *only works with the "never" option.* Defaults to an array of
2045
+ Use this to change the tags which are sought for alignment changes. Defaults to an array of
2047
2046
  `['param', 'arg', 'argument', 'property', 'prop', 'returns', 'return']`.
2048
2047
 
2049
2048
  <a name="user-content-eslint-plugin-jsdoc-rules-check-line-alignment-options-3-customspacings"></a>
@@ -2060,10 +2059,24 @@ An object with any of the following keys set to an integer. Affects spacing:
2060
2059
 
2061
2060
  If a spacing is not defined, it defaults to one.
2062
2061
 
2062
+ <a name="user-content-eslint-plugin-jsdoc-rules-check-line-alignment-options-3-preservemaindescriptionpostdelimiter"></a>
2063
+ <a name="eslint-plugin-jsdoc-rules-check-line-alignment-options-3-preservemaindescriptionpostdelimiter"></a>
2064
+ ##### <code>preserveMainDescriptionPostDelimiter</code>
2065
+
2066
+ A boolean to determine whether to preserve the post-delimiter spacing of the
2067
+ main description. If `false` or unset, will be set to a single space.
2068
+
2069
+ <a name="user-content-eslint-plugin-jsdoc-rules-check-line-alignment-options-3-wrapindent"></a>
2070
+ <a name="eslint-plugin-jsdoc-rules-check-line-alignment-options-3-wrapindent"></a>
2071
+ ##### <code>wrapIndent</code>
2072
+
2073
+ The indent that will be applied for tag text after the first line.
2074
+ Default to the empty string (no indent).
2075
+
2063
2076
  |||
2064
2077
  |---|---|
2065
2078
  |Context|everywhere|
2066
- |Options|(a string matching `"always" or "never"` and optional object with `tags` and `customSpacings`)|
2079
+ |Options|(a string matching `"always"`, `"never"`, or `"any"` and optional object with `tags`, `customSpacings`, `preserveMainDescriptionPostDelimiter`, and `wrapIndent`)|
2067
2080
  |Tags|`param`, `property`, `returns` and others added by `tags`|
2068
2081
  |Aliases|`arg`, `argument`, `prop`, `return`|
2069
2082
  |Recommended|false|
@@ -2508,6 +2521,53 @@ const fn = ( lorem, sit ) => {}
2508
2521
  const fn = ( lorem, sit ) => {}
2509
2522
  // "jsdoc/check-line-alignment": ["error"|"warn", "never",{"customSpacings":{"postHyphen":2}}]
2510
2523
  // Message: Expected JSDoc block lines to not be aligned.
2524
+
2525
+ /**
2526
+ * @param {string} lorem Description
2527
+ * with multiple lines.
2528
+ */
2529
+ function quux () {
2530
+ }
2531
+ // "jsdoc/check-line-alignment": ["error"|"warn", "any",{"wrapIndent":" "}]
2532
+ // Message: Expected wrap indent
2533
+
2534
+ /**
2535
+ * Function description.
2536
+ *
2537
+ * @param {string} lorem Description.
2538
+ * @param {int} sit Description multi
2539
+ * line with asterisks.
2540
+ */
2541
+ const fn = ( lorem, sit ) => {}
2542
+ // "jsdoc/check-line-alignment": ["error"|"warn", "always",{"wrapIndent":" "}]
2543
+ // Message: Expected JSDoc block lines to be aligned.
2544
+
2545
+ /**
2546
+ * My function.
2547
+ *
2548
+ * @param {string} lorem Description.
2549
+ * @param {int} sit Description multiple
2550
+ * lines.
2551
+ */
2552
+ const fn = ( lorem, sit ) => {}
2553
+ // "jsdoc/check-line-alignment": ["error"|"warn", "never",{"wrapIndent":" "}]
2554
+ // Message: Expected JSDoc block lines to not be aligned.
2555
+
2556
+ /**
2557
+ * @property {boolean} tls_verify_client_certificate - Whether our API should
2558
+ * enable TLS client authentication
2559
+ */
2560
+ function quux () {}
2561
+ // "jsdoc/check-line-alignment": ["error"|"warn", "never",{"wrapIndent":" "}]
2562
+ // Message: Expected wrap indent
2563
+
2564
+ /**
2565
+ * @property {boolean} tls_verify_client_certificate - Whether our API should
2566
+ * enable TLS client authentication
2567
+ */
2568
+ function quux () {}
2569
+ // "jsdoc/check-line-alignment": ["error"|"warn", "never",{"wrapIndent":""}]
2570
+ // Message: Expected wrap indent
2511
2571
  ````
2512
2572
 
2513
2573
  The following patterns are not considered problems:
@@ -2865,11 +2925,59 @@ const fn = ( lorem, sit ) => {};
2865
2925
  const fn = ( a, b ) => {};
2866
2926
  // "jsdoc/check-line-alignment": ["error"|"warn", "always"]
2867
2927
 
2928
+ /**
2929
+ * @param {string} lorem Description
2930
+ * with multiple lines.
2931
+ */
2932
+ function quux () {
2933
+ }
2934
+ // "jsdoc/check-line-alignment": ["error"|"warn", "any",{"wrapIndent":" "}]
2935
+
2936
+ /**
2937
+ * @param {string} lorem Description
2938
+ * with multiple lines.
2939
+ */
2940
+ function quux () {
2941
+ }
2942
+ // "jsdoc/check-line-alignment": ["error"|"warn", "never",{"wrapIndent":" "}]
2943
+
2944
+ /**
2945
+ * Function description.
2946
+ *
2947
+ * @param {string} lorem Description.
2948
+ * @param {int} sit Description multi
2949
+ * line with asterisks.
2950
+ */
2951
+ const fn = ( lorem, sit ) => {}
2952
+ // "jsdoc/check-line-alignment": ["error"|"warn", "always",{"wrapIndent":" "}]
2953
+
2954
+ /**
2955
+ * Function description.
2956
+ *
2957
+ * @param {string} lorem Description.
2958
+ * @param {int} sit Description multi
2959
+ * line with
2960
+ * asterisks.
2961
+ */
2962
+ const fn = ( lorem, sit ) => {}
2963
+ // "jsdoc/check-line-alignment": ["error"|"warn", "always",{"wrapIndent":" "}]
2964
+
2965
+ /**
2966
+ * @param {
2967
+ * string | number
2968
+ * } lorem Description
2969
+ * with multiple lines.
2970
+ */
2971
+ function quux () {
2972
+ }
2973
+ // "jsdoc/check-line-alignment": ["error"|"warn", "never",{"wrapIndent":" "}]
2974
+
2868
2975
  /**
2869
2976
  * @param {string|string[]|TemplateResult|TemplateResult[]} event.detail.description -
2870
2977
  * Notification description
2871
2978
  */
2872
2979
  function quux () {}
2980
+ // "jsdoc/check-line-alignment": ["error"|"warn", "never",{"wrapIndent":" "}]
2873
2981
  ````
2874
2982
 
2875
2983
 
@@ -90,7 +90,8 @@ const alignTransform = ({
90
90
  customSpacings,
91
91
  tags,
92
92
  indent,
93
- preserveMainDescriptionPostDelimiter
93
+ preserveMainDescriptionPostDelimiter,
94
+ wrapIndent
94
95
  }) => {
95
96
  let intoTags = false;
96
97
  let width;
@@ -154,7 +155,7 @@ const alignTransform = ({
154
155
  }
155
156
  return tokens;
156
157
  };
157
- const update = (line, index, source, typelessInfo) => {
158
+ const update = (line, index, source, typelessInfo, indentTag) => {
158
159
  const tokens = {
159
160
  ...line.tokens
160
161
  };
@@ -171,8 +172,6 @@ const alignTransform = ({
171
172
  tokens
172
173
  };
173
174
  }
174
-
175
- /* eslint-disable indent */
176
175
  switch (tokens.delimiter) {
177
176
  case _commentParser.Markers.start:
178
177
  tokens.start = indent;
@@ -186,8 +185,6 @@ const alignTransform = ({
186
185
  // compensate delimiter
187
186
  tokens.start = indent + ' ';
188
187
  }
189
- /* eslint-enable */
190
-
191
188
  if (!intoTags) {
192
189
  if (tokens.description === '') {
193
190
  tokens.postDelimiter = '';
@@ -204,15 +201,15 @@ const alignTransform = ({
204
201
  tokens.description = tokens.description.replace(hyphenSpacing, '-' + ''.padStart(postHyphenSpacing, ' '));
205
202
 
206
203
  // Not align.
207
- if (!shouldAlign(tags, index, source)) {
208
- return {
209
- ...line,
210
- tokens
211
- };
204
+ if (shouldAlign(tags, index, source)) {
205
+ alignTokens(tokens, typelessInfo);
206
+ if (indentTag) {
207
+ tokens.postDelimiter += wrapIndent;
208
+ }
212
209
  }
213
210
  return {
214
211
  ...line,
215
- tokens: alignTokens(tokens, typelessInfo)
212
+ tokens
216
213
  };
217
214
  };
218
215
  return ({
@@ -223,10 +220,16 @@ const alignTransform = ({
223
220
  ...zeroWidth
224
221
  });
225
222
  const typelessInfo = getTypelessInfo(fields);
223
+ let tagIndentMode = false;
226
224
  return rewireSource({
227
225
  ...fields,
228
226
  source: source.map((line, index) => {
229
- return update(line, index, source, typelessInfo);
227
+ const indentTag = tagIndentMode && !line.tokens.tag && line.tokens.description;
228
+ const ret = update(line, index, source, typelessInfo, indentTag);
229
+ if (line.tokens.tag) {
230
+ tagIndentMode = true;
231
+ }
232
+ return ret;
230
233
  })
231
234
  });
232
235
  };
@@ -1 +1 @@
1
- {"version":3,"file":"alignTransform.js","names":["rewireSource","util","zeroWidth","name","start","tag","type","shouldAlign","tags","index","source","tokens","replace","includesTag","includes","iterator","previousTag","getWidth","width","Math","max","length","delimiter","Markers","getTypelessInfo","fields","hasNoTypes","every","maxNamedTagLength","map","filter","maxUnnamedTagLength","space","len","padStart","alignTransform","customSpacings","indent","preserveMainDescriptionPostDelimiter","intoTags","alignTokens","typelessInfo","nothingAfter","delim","description","postName","postType","postTag","untypedNameAdjustment","untypedTypeAdjustment","spacings","postDelimiter","update","line","isEmpty","end","postHyphenSpacing","postHyphen","hyphenSpacing","reduce"],"sources":["../src/alignTransform.js"],"sourcesContent":["/**\n * Transform based on https://github.com/syavorsky/comment-parser/blob/master/src/transforms/align.ts\n *\n * It contains some customizations to align based on the tags, and some custom options.\n */\n\nimport {\n\n // `comment-parser/primitives` export\n Markers,\n util,\n} from 'comment-parser';\n\nconst {\n rewireSource,\n} = util;\n\nconst zeroWidth = {\n name: 0,\n start: 0,\n tag: 0,\n type: 0,\n};\n\nconst shouldAlign = (tags, index, source) => {\n const tag = source[index].tokens.tag.replace('@', '');\n const includesTag = tags.includes(tag);\n\n if (includesTag) {\n return true;\n }\n\n if (tag !== '') {\n return false;\n }\n\n for (let iterator = index; iterator >= 0; iterator--) {\n const previousTag = source[iterator].tokens.tag.replace('@', '');\n\n if (previousTag !== '') {\n if (tags.includes(previousTag)) {\n return true;\n }\n\n return false;\n }\n }\n\n return true;\n};\n\nconst getWidth = (tags) => {\n return (width, {\n tokens,\n }, index, source) => {\n if (!shouldAlign(tags, index, source)) {\n return width;\n }\n\n return {\n name: Math.max(width.name, tokens.name.length),\n start: tokens.delimiter === Markers.start ? tokens.start.length : width.start,\n tag: Math.max(width.tag, tokens.tag.length),\n type: Math.max(width.type, tokens.type.length),\n };\n };\n};\n\nconst getTypelessInfo = (fields) => {\n const hasNoTypes = fields.tags.every(({\n type,\n }) => {\n return !type;\n });\n const maxNamedTagLength = Math.max(...fields.tags.map(({\n tag,\n name,\n }) => {\n return name.length === 0 ? -1 : tag.length;\n }).filter((length) => {\n return length !== -1;\n })) + 1;\n const maxUnnamedTagLength = Math.max(...fields.tags.map(({\n tag,\n name,\n }) => {\n return name.length === 0 ? tag.length : -1;\n }).filter((length) => {\n return length !== -1;\n })) + 1;\n return {\n hasNoTypes,\n maxNamedTagLength,\n maxUnnamedTagLength,\n };\n};\n\nconst space = (len) => {\n return ''.padStart(len, ' ');\n};\n\nconst alignTransform = ({\n customSpacings,\n tags,\n indent,\n preserveMainDescriptionPostDelimiter,\n}) => {\n let intoTags = false;\n let width;\n\n const alignTokens = (tokens, typelessInfo) => {\n const nothingAfter = {\n delim: false,\n name: false,\n tag: false,\n type: false,\n };\n\n if (tokens.description === '') {\n nothingAfter.name = true;\n tokens.postName = '';\n\n if (tokens.name === '') {\n nothingAfter.type = true;\n tokens.postType = '';\n\n if (tokens.type === '') {\n nothingAfter.tag = true;\n tokens.postTag = '';\n\n /* istanbul ignore next: Never happens because the !intoTags return. But it's here for consistency with the original align transform */\n if (tokens.tag === '') {\n nothingAfter.delim = true;\n }\n }\n }\n }\n\n let untypedNameAdjustment = 0;\n let untypedTypeAdjustment = 0;\n if (typelessInfo.hasNoTypes) {\n nothingAfter.tag = true;\n tokens.postTag = '';\n if (tokens.name === '') {\n untypedNameAdjustment = typelessInfo.maxNamedTagLength - tokens.tag.length;\n } else {\n untypedNameAdjustment = typelessInfo.maxNamedTagLength > typelessInfo.maxUnnamedTagLength ? 0 :\n Math.max(0, typelessInfo.maxUnnamedTagLength - (tokens.tag.length + tokens.name.length + 1));\n untypedTypeAdjustment = typelessInfo.maxNamedTagLength - tokens.tag.length;\n }\n }\n\n // Todo: Avoid fixing alignment of blocks with multiline wrapping of type\n if (tokens.tag === '' && tokens.type) {\n return tokens;\n }\n\n const spacings = {\n postDelimiter: customSpacings?.postDelimiter || 1,\n postName: customSpacings?.postName || 1,\n postTag: customSpacings?.postTag || 1,\n postType: customSpacings?.postType || 1,\n };\n\n tokens.postDelimiter = nothingAfter.delim ? '' : space(spacings.postDelimiter);\n\n if (!nothingAfter.tag) {\n tokens.postTag = space(width.tag - tokens.tag.length + spacings.postTag);\n }\n\n if (!nothingAfter.type) {\n tokens.postType = space(width.type - tokens.type.length + spacings.postType + untypedTypeAdjustment);\n }\n\n if (!nothingAfter.name) {\n // If post name is empty for all lines (name width 0), don't add post name spacing.\n tokens.postName = width.name === 0 ? '' : space(width.name - tokens.name.length + spacings.postName + untypedNameAdjustment);\n }\n\n return tokens;\n };\n\n const update = (line, index, source, typelessInfo) => {\n const tokens = {\n ...line.tokens,\n };\n if (tokens.tag !== '') {\n intoTags = true;\n }\n\n const isEmpty =\n tokens.tag === '' &&\n tokens.name === '' &&\n tokens.type === '' &&\n tokens.description === '';\n\n // dangling '*/'\n if (tokens.end === Markers.end && isEmpty) {\n tokens.start = indent + ' ';\n\n return {\n ...line,\n tokens,\n };\n }\n\n /* eslint-disable indent */\n switch (tokens.delimiter) {\n case Markers.start:\n tokens.start = indent;\n break;\n case Markers.delim:\n tokens.start = indent + ' ';\n break;\n default:\n tokens.delimiter = '';\n\n // compensate delimiter\n tokens.start = indent + ' ';\n }\n /* eslint-enable */\n\n if (!intoTags) {\n if (tokens.description === '') {\n tokens.postDelimiter = '';\n } else if (!preserveMainDescriptionPostDelimiter) {\n tokens.postDelimiter = ' ';\n }\n\n return {\n ...line,\n tokens,\n };\n }\n\n const postHyphenSpacing = customSpacings?.postHyphen ?? 1;\n const hyphenSpacing = /^\\s*-\\s*/u;\n tokens.description = tokens.description.replace(\n hyphenSpacing, '-' + ''.padStart(postHyphenSpacing, ' '),\n );\n\n // Not align.\n if (!shouldAlign(tags, index, source)) {\n return {\n ...line,\n tokens,\n };\n }\n\n return {\n ...line,\n tokens: alignTokens(tokens, typelessInfo),\n };\n };\n\n return ({\n source,\n ...fields\n }) => {\n width = source.reduce(getWidth(tags), {\n ...zeroWidth,\n });\n\n const typelessInfo = getTypelessInfo(fields);\n\n return rewireSource({\n ...fields,\n source: source.map((line, index) => {\n return update(line, index, source, typelessInfo);\n }),\n });\n };\n};\n\nexport default alignTransform;\n"],"mappings":"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"}
1
+ {"version":3,"file":"alignTransform.js","names":["rewireSource","util","zeroWidth","name","start","tag","type","shouldAlign","tags","index","source","tokens","replace","includesTag","includes","iterator","previousTag","getWidth","width","Math","max","length","delimiter","Markers","getTypelessInfo","fields","hasNoTypes","every","maxNamedTagLength","map","filter","maxUnnamedTagLength","space","len","padStart","alignTransform","customSpacings","indent","preserveMainDescriptionPostDelimiter","wrapIndent","intoTags","alignTokens","typelessInfo","nothingAfter","delim","description","postName","postType","postTag","untypedNameAdjustment","untypedTypeAdjustment","spacings","postDelimiter","update","line","indentTag","isEmpty","end","postHyphenSpacing","postHyphen","hyphenSpacing","reduce","tagIndentMode","ret"],"sources":["../src/alignTransform.js"],"sourcesContent":["/**\n * Transform based on https://github.com/syavorsky/comment-parser/blob/master/src/transforms/align.ts\n *\n * It contains some customizations to align based on the tags, and some custom options.\n */\n\nimport {\n\n // `comment-parser/primitives` export\n Markers,\n util,\n} from 'comment-parser';\n\nconst {\n rewireSource,\n} = util;\n\nconst zeroWidth = {\n name: 0,\n start: 0,\n tag: 0,\n type: 0,\n};\n\nconst shouldAlign = (tags, index, source) => {\n const tag = source[index].tokens.tag.replace('@', '');\n const includesTag = tags.includes(tag);\n\n if (includesTag) {\n return true;\n }\n\n if (tag !== '') {\n return false;\n }\n\n for (let iterator = index; iterator >= 0; iterator--) {\n const previousTag = source[iterator].tokens.tag.replace('@', '');\n\n if (previousTag !== '') {\n if (tags.includes(previousTag)) {\n return true;\n }\n\n return false;\n }\n }\n\n return true;\n};\n\nconst getWidth = (tags) => {\n return (width, {\n tokens,\n }, index, source) => {\n if (!shouldAlign(tags, index, source)) {\n return width;\n }\n\n return {\n name: Math.max(width.name, tokens.name.length),\n start: tokens.delimiter === Markers.start ? tokens.start.length : width.start,\n tag: Math.max(width.tag, tokens.tag.length),\n type: Math.max(width.type, tokens.type.length),\n };\n };\n};\n\nconst getTypelessInfo = (fields) => {\n const hasNoTypes = fields.tags.every(({\n type,\n }) => {\n return !type;\n });\n const maxNamedTagLength = Math.max(...fields.tags.map(({\n tag,\n name,\n }) => {\n return name.length === 0 ? -1 : tag.length;\n }).filter((length) => {\n return length !== -1;\n })) + 1;\n const maxUnnamedTagLength = Math.max(...fields.tags.map(({\n tag,\n name,\n }) => {\n return name.length === 0 ? tag.length : -1;\n }).filter((length) => {\n return length !== -1;\n })) + 1;\n return {\n hasNoTypes,\n maxNamedTagLength,\n maxUnnamedTagLength,\n };\n};\n\nconst space = (len) => {\n return ''.padStart(len, ' ');\n};\n\nconst alignTransform = ({\n customSpacings,\n tags,\n indent,\n preserveMainDescriptionPostDelimiter,\n wrapIndent,\n}) => {\n let intoTags = false;\n let width;\n\n const alignTokens = (tokens, typelessInfo) => {\n const nothingAfter = {\n delim: false,\n name: false,\n tag: false,\n type: false,\n };\n\n if (tokens.description === '') {\n nothingAfter.name = true;\n tokens.postName = '';\n\n if (tokens.name === '') {\n nothingAfter.type = true;\n tokens.postType = '';\n\n if (tokens.type === '') {\n nothingAfter.tag = true;\n tokens.postTag = '';\n\n /* istanbul ignore next: Never happens because the !intoTags return. But it's here for consistency with the original align transform */\n if (tokens.tag === '') {\n nothingAfter.delim = true;\n }\n }\n }\n }\n\n let untypedNameAdjustment = 0;\n let untypedTypeAdjustment = 0;\n if (typelessInfo.hasNoTypes) {\n nothingAfter.tag = true;\n tokens.postTag = '';\n if (tokens.name === '') {\n untypedNameAdjustment = typelessInfo.maxNamedTagLength - tokens.tag.length;\n } else {\n untypedNameAdjustment = typelessInfo.maxNamedTagLength > typelessInfo.maxUnnamedTagLength ? 0 :\n Math.max(0, typelessInfo.maxUnnamedTagLength - (tokens.tag.length + tokens.name.length + 1));\n untypedTypeAdjustment = typelessInfo.maxNamedTagLength - tokens.tag.length;\n }\n }\n\n // Todo: Avoid fixing alignment of blocks with multiline wrapping of type\n if (tokens.tag === '' && tokens.type) {\n return tokens;\n }\n\n const spacings = {\n postDelimiter: customSpacings?.postDelimiter || 1,\n postName: customSpacings?.postName || 1,\n postTag: customSpacings?.postTag || 1,\n postType: customSpacings?.postType || 1,\n };\n\n tokens.postDelimiter = nothingAfter.delim ? '' : space(spacings.postDelimiter);\n\n if (!nothingAfter.tag) {\n tokens.postTag = space(width.tag - tokens.tag.length + spacings.postTag);\n }\n\n if (!nothingAfter.type) {\n tokens.postType = space(width.type - tokens.type.length + spacings.postType + untypedTypeAdjustment);\n }\n\n if (!nothingAfter.name) {\n // If post name is empty for all lines (name width 0), don't add post name spacing.\n tokens.postName = width.name === 0 ? '' : space(width.name - tokens.name.length + spacings.postName + untypedNameAdjustment);\n }\n\n return tokens;\n };\n\n const update = (line, index, source, typelessInfo, indentTag) => {\n const tokens = {\n ...line.tokens,\n };\n\n if (tokens.tag !== '') {\n intoTags = true;\n }\n\n const isEmpty =\n tokens.tag === '' &&\n tokens.name === '' &&\n tokens.type === '' &&\n tokens.description === '';\n\n // dangling '*/'\n if (tokens.end === Markers.end && isEmpty) {\n tokens.start = indent + ' ';\n\n return {\n ...line,\n tokens,\n };\n }\n\n switch (tokens.delimiter) {\n case Markers.start:\n tokens.start = indent;\n break;\n case Markers.delim:\n tokens.start = indent + ' ';\n break;\n default:\n tokens.delimiter = '';\n\n // compensate delimiter\n tokens.start = indent + ' ';\n }\n\n if (!intoTags) {\n if (tokens.description === '') {\n tokens.postDelimiter = '';\n } else if (!preserveMainDescriptionPostDelimiter) {\n tokens.postDelimiter = ' ';\n }\n\n return {\n ...line,\n tokens,\n };\n }\n\n const postHyphenSpacing = customSpacings?.postHyphen ?? 1;\n const hyphenSpacing = /^\\s*-\\s*/u;\n tokens.description = tokens.description.replace(\n hyphenSpacing, '-' + ''.padStart(postHyphenSpacing, ' '),\n );\n\n // Not align.\n if (shouldAlign(tags, index, source)) {\n alignTokens(tokens, typelessInfo);\n if (indentTag) {\n tokens.postDelimiter += wrapIndent;\n }\n }\n\n return {\n ...line,\n tokens,\n };\n };\n\n return ({\n source,\n ...fields\n }) => {\n width = source.reduce(getWidth(tags), {\n ...zeroWidth,\n });\n\n const typelessInfo = getTypelessInfo(fields);\n\n let tagIndentMode = false;\n\n return rewireSource({\n ...fields,\n source: source.map((line, index) => {\n const indentTag = tagIndentMode && !line.tokens.tag && line.tokens.description;\n const ret = update(line, index, source, typelessInfo, indentTag);\n\n if (line.tokens.tag) {\n tagIndentMode = true;\n }\n\n return ret;\n }),\n });\n };\n};\n\nexport default alignTransform;\n"],"mappings":"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"}
@@ -652,7 +652,7 @@ const getUtils = (node, jsdoc, jsdocNode, settings, report, context, iteratingAl
652
652
  return utils;
653
653
  };
654
654
  const getSettings = context => {
655
- var _context$settings$jsd, _context$settings$jsd2, _context$settings$jsd3, _context$settings$jsd4, _context$settings$jsd5, _context$settings$jsd6, _context$settings$jsd7, _context$settings$jsd8, _context$settings$jsd9, _context$settings$jsd10, _context$settings$jsd11, _context$settings$jsd12, _context$settings$jsd13, _context$settings$jsd14;
655
+ var _context$settings$jsd, _context$settings$jsd2, _context$settings$jsd3, _context$settings$jsd4, _context$settings$jsd5, _context$settings$jsd6, _context$settings$jsd7, _context$settings$jsd8, _context$settings$jsd9, _context$settings$jsd10, _context$settings$jsd11, _context$settings$jsd12, _context$settings$jsd13, _context$parserPath, _context$settings$jsd14;
656
656
  /* eslint-disable canonical/sort-keys */
657
657
  const settings = {
658
658
  // All rules
@@ -675,7 +675,12 @@ const getSettings = context => {
675
675
  // `require-param-type`, `require-param-description`
676
676
  exemptDestructuredRootsFromChecks: (_context$settings$jsd12 = context.settings.jsdoc) === null || _context$settings$jsd12 === void 0 ? void 0 : _context$settings$jsd12.exemptDestructuredRootsFromChecks,
677
677
  // Many rules, e.g., `check-tag-names`
678
- mode: ((_context$settings$jsd13 = context.settings.jsdoc) === null || _context$settings$jsd13 === void 0 ? void 0 : _context$settings$jsd13.mode) ?? (context.parserPath.includes('@typescript-eslint') ? 'typescript' : 'jsdoc'),
678
+ mode: ((_context$settings$jsd13 = context.settings.jsdoc) === null || _context$settings$jsd13 === void 0 ? void 0 : _context$settings$jsd13.mode) ?? ((_context$parserPath = context.parserPath) !== null && _context$parserPath !== void 0 && _context$parserPath.includes('@typescript-eslint') ?
679
+ // Todo: Waiting for TS parser to label itself:
680
+ // https://github.com/eslint/eslint/pull/16944
681
+ // https://github.com/typescript-eslint/typescript-eslint/issues/6541
682
+ // || context.languageOptions?.parser?.meta?.name?.includes('typescript') ?
683
+ 'typescript' : 'jsdoc'),
679
684
  // Many rules
680
685
  contexts: (_context$settings$jsd14 = context.settings.jsdoc) === null || _context$settings$jsd14 === void 0 ? void 0 : _context$settings$jsd14.contexts
681
686
  };
@@ -1 +1 @@
1
- {"version":3,"file":"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","commentStringify","reportJSDoc","msg","handler","data","fixer","replaceText","getRegexFromString","str","requiredFlags","getTagDescription","tg","returnArray","descriptions","source","some","tokens","end","lineEnd","postDelimiter","postTag","name","description","desc","slice","push","join","setTagDescription","matcher","setter","finalIdx","idx","test","getDescription","lastDescriptionLine","length","setDescriptionLines","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","mayBeUndefinedTypeTag","hasValueOrExecutorHasNonEmptyResolveValue","anyPromiseAsReturn","allBranches","hasYieldValue","hasYieldReturnValue","hasThrowValue","isAsync","async","filterTags","item","tagList","filter","getTagsByType","hasOptionTag","Boolean","getClassNode","reverse","find","parent","getClassJsdoc","classNode","classJsdocNode","getJSDocComment","parseComment","classJsdoc","forEachPreferredTag","arrayHandler","matchingJsdocTags","matchingJsdocTag","getSettings","ignorePrivate","ignoreInternal","Number","preferredTypes","exemptDestructuredRootsFromChecks","parserPath","contexts","setTagStructure","overrideTagStructure","error","makeReport","commentNode","fix","jsdocLoc","lineNumber","colNumber","iterate","info","iterator","state","checkInternal","checkPrivate","getIndentAndJSDoc","sourceLine","indnt","charAt","repeat","jsdc","iterateAllJsdocs","additiveCommentContexts","trackedJsdocs","Set","callIterator","jsdocNodes","lastCall","getText","comment","selector","lastComment","exit","create","commentHandler","noTracking","has","nonComment","add","allComments","getAllComments","untrackedJSdoc","checkFile","iterateJsdoc","metaType","TypeError","contextDefaults","contextSelected","matchContext","match","enforcedContexts","nonGlobalSettings","map","obj","hasPlainAny","hasObjectAny","ctxt","checkJsdoc","contextObject","getContextObject","bind"],"sources":["../src/iterateJsdoc.js"],"sourcesContent":["import {\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// todo: Change these `any` types once importing types properly.\n\n/**\n * Should use ESLint rule's typing.\n *\n * @typedef {any} EslintRuleMeta\n */\n\n/**\n * A plain object for tracking state as needed by rules across iterations.\n *\n * @typedef {any} StateObject\n */\n\n/**\n * The Node AST as supplied by the parser.\n *\n * @typedef {any} Node\n */\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, returnArray) => {\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 returnArray ? descriptions : descriptions.join('\\n');\n };\n\n utils.setTagDescription = (tg, matcher, setter) => {\n let finalIdx = 0;\n tg.source.some(({\n tokens: {\n description,\n },\n }, idx) => {\n if (description && matcher.test(description)) {\n tg.source[idx].tokens.description = setter(description);\n finalIdx = idx;\n return true;\n }\n\n return false;\n });\n\n return finalIdx;\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 if (!tag && description) {\n descriptions.push(description);\n }\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 descriptions,\n lastDescriptionLine,\n };\n };\n\n utils.setDescriptionLines = (matcher, setter) => {\n let finalIdx = 0;\n jsdoc.source.some(({\n tokens: {\n description,\n tag,\n end,\n },\n }, idx) => {\n // istanbul ignore if -- Already checked\n if (idx && (tag || end)) {\n return true;\n }\n\n if (description && matcher.test(description)) {\n jsdoc.source[idx].tokens.description = setter(description);\n finalIdx = idx;\n return true;\n }\n\n return false;\n });\n\n return finalIdx;\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.mayBeUndefinedTypeTag = (tag) => {\n return jsdocUtils.mayBeUndefinedTypeTag(tag, settings.mode);\n };\n\n utils.hasValueOrExecutorHasNonEmptyResolveValue = (anyPromiseAsReturn, allBranches) => {\n return jsdocUtils.hasValueOrExecutorHasNonEmptyResolveValue(node, anyPromiseAsReturn, allBranches);\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 return parseComment(classJsdocNode, '');\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 // `require-param-type`, `require-param-description`\n exemptDestructuredRootsFromChecks: context.settings.jsdoc?.exemptDestructuredRootsFromChecks,\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 // Many rules\n contexts: context.settings.jsdoc?.contexts,\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 column: 0,\n line: lineNumber,\n },\n start: {\n column: 0,\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 -- canonical still using an older version where not defined */\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: Node | null,\n * report: ReturnType<typeof makeReport>,\n * settings: Settings,\n * utils: Utils,\n * }\n * ) => any } JsdocVisitor\n */\n/* eslint-enable jsdoc/no-undefined-types -- canonical still using an older version where not defined */\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, '');\n\n return [\n indnt, jsdc,\n ];\n};\n\n/**\n *\n * @typedef {{node: Node, state: StateObject}} NonCommentArgs\n */\n\n/**\n * Our internal dynamic set of utilities.\n *\n * @todo Document\n * @typedef {any} Utils\n */\n\n/**\n * @typedef {object} RuleConfig\n * @property {EslintRuleMeta} meta ESLint rule meta\n * @property {import('./jsdocUtils').DefaultContexts} [contextDefaults] Any default contexts\n * @property {true} [contextSelected] Whether to force a `contexts` check\n * @property {true} [iterateAllJsdocs] Whether to iterate all JSDoc blocks by default\n * regardless of context\n * @property {(context, state: StateObject, utils: Utils) => void} [exit] Handler to be executed\n * upon exiting iteration of program AST\n * @property {(NonCommentArgs) => void} [nonComment] Handler to be executed if rule wishes\n * to be supplied nodes without comments\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 {RuleConfig} ruleConfig The rule's configuration\n * @param contexts The `contexts` containing relevant `comment` info.\n * @param {boolean} additiveCommentContexts If true, will have a separate\n * iteration for each matching comment context. Otherwise, will iterate\n * once if there is a single matching comment context.\n */\nconst iterateAllJsdocs = (iterator, ruleConfig, contexts, additiveCommentContexts) => {\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 (additiveCommentContexts) {\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 settings,\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 commentNode = getJSDocComment(sourceCode, node, settings);\n if (!ruleConfig.noTracking && 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 {RuleConfig} 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 {RuleConfig} 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, ruleConfig.nonGlobalSettings ? {} : settings);\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 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 'TSDeclareFunction',\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 settings,\n state,\n });\n };\n }\n\n return contextObject;\n },\n meta: ruleConfig.meta,\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"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","commentStringify","reportJSDoc","msg","handler","data","fixer","replaceText","getRegexFromString","str","requiredFlags","getTagDescription","tg","returnArray","descriptions","source","some","tokens","end","lineEnd","postDelimiter","postTag","name","description","desc","slice","push","join","setTagDescription","matcher","setter","finalIdx","idx","test","getDescription","lastDescriptionLine","length","setDescriptionLines","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","mayBeUndefinedTypeTag","hasValueOrExecutorHasNonEmptyResolveValue","anyPromiseAsReturn","allBranches","hasYieldValue","hasYieldReturnValue","hasThrowValue","isAsync","async","filterTags","item","tagList","filter","getTagsByType","hasOptionTag","Boolean","getClassNode","reverse","find","parent","getClassJsdoc","classNode","classJsdocNode","getJSDocComment","parseComment","classJsdoc","forEachPreferredTag","arrayHandler","matchingJsdocTags","matchingJsdocTag","getSettings","ignorePrivate","ignoreInternal","Number","preferredTypes","exemptDestructuredRootsFromChecks","parserPath","contexts","setTagStructure","overrideTagStructure","error","makeReport","commentNode","fix","jsdocLoc","lineNumber","colNumber","iterate","info","iterator","state","checkInternal","checkPrivate","getIndentAndJSDoc","sourceLine","indnt","charAt","repeat","jsdc","iterateAllJsdocs","additiveCommentContexts","trackedJsdocs","Set","callIterator","jsdocNodes","lastCall","getText","comment","selector","lastComment","exit","create","commentHandler","noTracking","has","nonComment","add","allComments","getAllComments","untrackedJSdoc","checkFile","iterateJsdoc","metaType","TypeError","contextDefaults","contextSelected","matchContext","match","enforcedContexts","nonGlobalSettings","map","obj","hasPlainAny","hasObjectAny","ctxt","checkJsdoc","contextObject","getContextObject","bind"],"sources":["../src/iterateJsdoc.js"],"sourcesContent":["import {\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// todo: Change these `any` types once importing types properly.\n\n/**\n * Should use ESLint rule's typing.\n *\n * @typedef {any} EslintRuleMeta\n */\n\n/**\n * A plain object for tracking state as needed by rules across iterations.\n *\n * @typedef {any} StateObject\n */\n\n/**\n * The Node AST as supplied by the parser.\n *\n * @typedef {any} Node\n */\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, returnArray) => {\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 returnArray ? descriptions : descriptions.join('\\n');\n };\n\n utils.setTagDescription = (tg, matcher, setter) => {\n let finalIdx = 0;\n tg.source.some(({\n tokens: {\n description,\n },\n }, idx) => {\n if (description && matcher.test(description)) {\n tg.source[idx].tokens.description = setter(description);\n finalIdx = idx;\n return true;\n }\n\n return false;\n });\n\n return finalIdx;\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 if (!tag && description) {\n descriptions.push(description);\n }\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 descriptions,\n lastDescriptionLine,\n };\n };\n\n utils.setDescriptionLines = (matcher, setter) => {\n let finalIdx = 0;\n jsdoc.source.some(({\n tokens: {\n description,\n tag,\n end,\n },\n }, idx) => {\n // istanbul ignore if -- Already checked\n if (idx && (tag || end)) {\n return true;\n }\n\n if (description && matcher.test(description)) {\n jsdoc.source[idx].tokens.description = setter(description);\n finalIdx = idx;\n return true;\n }\n\n return false;\n });\n\n return finalIdx;\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.mayBeUndefinedTypeTag = (tag) => {\n return jsdocUtils.mayBeUndefinedTypeTag(tag, settings.mode);\n };\n\n utils.hasValueOrExecutorHasNonEmptyResolveValue = (anyPromiseAsReturn, allBranches) => {\n return jsdocUtils.hasValueOrExecutorHasNonEmptyResolveValue(node, anyPromiseAsReturn, allBranches);\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 return parseComment(classJsdocNode, '');\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 // `require-param-type`, `require-param-description`\n exemptDestructuredRootsFromChecks: context.settings.jsdoc?.exemptDestructuredRootsFromChecks,\n\n // Many rules, e.g., `check-tag-names`\n mode: context.settings.jsdoc?.mode ??\n (context.parserPath?.includes('@typescript-eslint') ?\n // Todo: Waiting for TS parser to label itself:\n // https://github.com/eslint/eslint/pull/16944\n // https://github.com/typescript-eslint/typescript-eslint/issues/6541\n // || context.languageOptions?.parser?.meta?.name?.includes('typescript') ?\n 'typescript' : 'jsdoc'),\n\n // Many rules\n contexts: context.settings.jsdoc?.contexts,\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 column: 0,\n line: lineNumber,\n },\n start: {\n column: 0,\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 -- canonical still using an older version where not defined */\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: Node | null,\n * report: ReturnType<typeof makeReport>,\n * settings: Settings,\n * utils: Utils,\n * }\n * ) => any } JsdocVisitor\n */\n/* eslint-enable jsdoc/no-undefined-types -- canonical still using an older version where not defined */\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, '');\n\n return [\n indnt, jsdc,\n ];\n};\n\n/**\n *\n * @typedef {{node: Node, state: StateObject}} NonCommentArgs\n */\n\n/**\n * Our internal dynamic set of utilities.\n *\n * @todo Document\n * @typedef {any} Utils\n */\n\n/**\n * @typedef {object} RuleConfig\n * @property {EslintRuleMeta} meta ESLint rule meta\n * @property {import('./jsdocUtils').DefaultContexts} [contextDefaults] Any default contexts\n * @property {true} [contextSelected] Whether to force a `contexts` check\n * @property {true} [iterateAllJsdocs] Whether to iterate all JSDoc blocks by default\n * regardless of context\n * @property {(context, state: StateObject, utils: Utils) => void} [exit] Handler to be executed\n * upon exiting iteration of program AST\n * @property {(NonCommentArgs) => void} [nonComment] Handler to be executed if rule wishes\n * to be supplied nodes without comments\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 {RuleConfig} ruleConfig The rule's configuration\n * @param contexts The `contexts` containing relevant `comment` info.\n * @param {boolean} additiveCommentContexts If true, will have a separate\n * iteration for each matching comment context. Otherwise, will iterate\n * once if there is a single matching comment context.\n */\nconst iterateAllJsdocs = (iterator, ruleConfig, contexts, additiveCommentContexts) => {\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 (additiveCommentContexts) {\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 settings,\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 commentNode = getJSDocComment(sourceCode, node, settings);\n if (!ruleConfig.noTracking && 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 {RuleConfig} 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 {RuleConfig} 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, ruleConfig.nonGlobalSettings ? {} : settings);\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 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 'TSDeclareFunction',\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 settings,\n state,\n });\n };\n }\n\n return contextObject;\n },\n meta: ruleConfig.meta,\n };\n}\n"],"mappings":"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"}
@@ -109,13 +109,15 @@ const checkAlignment = ({
109
109
  preserveMainDescriptionPostDelimiter,
110
110
  report,
111
111
  tags,
112
- utils
112
+ utils,
113
+ wrapIndent
113
114
  }) => {
114
115
  const transform = commentFlow((0, _alignTransform.default)({
115
116
  customSpacings,
116
117
  indent,
117
118
  preserveMainDescriptionPostDelimiter,
118
- tags
119
+ tags,
120
+ wrapIndent
119
121
  }));
120
122
  const transformedJsdoc = transform(jsdoc);
121
123
  const comment = '/*' + jsdocNode.value + '*/';
@@ -137,7 +139,8 @@ var _default = (0, _iterateJsdoc.default)(({
137
139
  const {
138
140
  tags: applicableTags = ['param', 'arg', 'argument', 'property', 'prop', 'returns', 'return'],
139
141
  preserveMainDescriptionPostDelimiter,
140
- customSpacings
142
+ customSpacings,
143
+ wrapIndent = ''
141
144
  } = context.options[1] || {};
142
145
  if (context.options[0] === 'always') {
143
146
  // Skip if it contains only a single line.
@@ -152,13 +155,42 @@ var _default = (0, _iterateJsdoc.default)(({
152
155
  preserveMainDescriptionPostDelimiter,
153
156
  report,
154
157
  tags: applicableTags,
155
- utils
158
+ utils,
159
+ wrapIndent
156
160
  });
157
161
  return;
158
162
  }
159
163
  const foundTags = utils.getPresentTags(applicableTags);
164
+ if (context.options[0] !== 'any') {
165
+ for (const tag of foundTags) {
166
+ checkNotAlignedPerTag(utils, tag, customSpacings);
167
+ }
168
+ }
160
169
  for (const tag of foundTags) {
161
- checkNotAlignedPerTag(utils, tag, customSpacings);
170
+ if (tag.source.length > 1) {
171
+ let idx = 0;
172
+ for (const {
173
+ tokens
174
+ // Avoid the tag line
175
+ } of tag.source.slice(1)) {
176
+ idx++;
177
+ if (!tokens.description ||
178
+ // Avoid first lines after multiline type
179
+ tokens.type || tokens.name) {
180
+ continue;
181
+ }
182
+
183
+ // Don't include a single separating space/tab
184
+ if (tokens.postDelimiter.slice(1) !== wrapIndent) {
185
+ utils.reportJSDoc('Expected wrap indent', {
186
+ line: tag.source[0].number + idx
187
+ }, () => {
188
+ tokens.postDelimiter = tokens.postDelimiter.charAt() + wrapIndent;
189
+ });
190
+ return;
191
+ }
192
+ }
193
+ }
162
194
  }
163
195
  }, {
164
196
  iterateAllJsdocs: true,
@@ -169,7 +201,7 @@ var _default = (0, _iterateJsdoc.default)(({
169
201
  },
170
202
  fixable: 'whitespace',
171
203
  schema: [{
172
- enum: ['always', 'never'],
204
+ enum: ['always', 'never', 'any'],
173
205
  type: 'string'
174
206
  }, {
175
207
  additionalProperties: false,
@@ -203,6 +235,9 @@ var _default = (0, _iterateJsdoc.default)(({
203
235
  type: 'string'
204
236
  },
205
237
  type: 'array'
238
+ },
239
+ wrapIndent: {
240
+ type: 'string'
206
241
  }
207
242
  },
208
243
  type: 'object'
@@ -1 +1 @@
1
- {"version":3,"file":"checkLineAlignment.js","names":["flow","commentFlow","transforms","checkNotAlignedPerTag","utils","tag","customSpacings","spacerProps","contentProps","mightHaveNamepath","tagMightHaveNamepath","tokens","source","followedBySpace","idx","callbck","nextIndex","slice","some","spacerProp","innerIdx","contentProp","spacePropVal","ret","postHyphenSpacing","postHyphen","exactHyphenSpacing","RegExp","hasNoHyphen","test","description","hasExactHyphenSpacing","ok","contentPropVal","spacerPropVal","spacing","length","fix","entries","padStart","hasSpace","contentPrp","hyphenSpacing","replace","setTag","reportJSDoc","checkAlignment","indent","jsdoc","jsdocNode","preserveMainDescriptionPostDelimiter","report","tags","transform","alignTransform","transformedJsdoc","comment","value","formatted","stringify","trimStart","fixer","replaceText","iterateJsdoc","context","applicableTags","options","includes","foundTags","getPresentTags","iterateAllJsdocs","meta","docs","url","fixable","schema","enum","type","additionalProperties","properties","postDelimiter","postName","postTag","postType","default","items"],"sources":["../../src/rules/checkLineAlignment.js"],"sourcesContent":["import {\n transforms,\n} from 'comment-parser';\nimport alignTransform from '../alignTransform';\nimport iterateJsdoc from '../iterateJsdoc';\n\nconst {\n flow: commentFlow,\n} = transforms;\n\nconst checkNotAlignedPerTag = (utils, tag, customSpacings) => {\n /*\n start +\n delimiter +\n postDelimiter +\n tag +\n postTag +\n type +\n postType +\n name +\n postName +\n description +\n end +\n lineEnd\n */\n let spacerProps;\n let contentProps;\n const mightHaveNamepath = utils.tagMightHaveNamepath(tag.tag);\n if (mightHaveNamepath) {\n spacerProps = [\n 'postDelimiter', 'postTag', 'postType', 'postName',\n ];\n contentProps = [\n 'tag', 'type', 'name', 'description',\n ];\n } else {\n spacerProps = [\n 'postDelimiter', 'postTag', 'postType',\n ];\n contentProps = [\n 'tag', 'type', 'description',\n ];\n }\n\n const {\n tokens,\n } = tag.source[0];\n\n const followedBySpace = (idx, callbck) => {\n const nextIndex = idx + 1;\n\n return spacerProps.slice(nextIndex).some((spacerProp, innerIdx) => {\n const contentProp = contentProps[nextIndex + innerIdx];\n\n const spacePropVal = tokens[spacerProp];\n\n const ret = spacePropVal;\n\n if (callbck) {\n callbck(!ret, contentProp);\n }\n\n return ret && (callbck || !contentProp);\n });\n };\n\n const postHyphenSpacing = customSpacings?.postHyphen ?? 1;\n const exactHyphenSpacing = new RegExp(`^\\\\s*-\\\\s{${postHyphenSpacing},${postHyphenSpacing}}(?!\\\\s)`, 'u');\n const hasNoHyphen = !(/^\\s*-(?!$)/u).test(tokens.description);\n const hasExactHyphenSpacing = exactHyphenSpacing.test(\n tokens.description,\n );\n\n // If checking alignment on multiple lines, need to check other `source`\n // items\n // Go through `post*` spacing properties and exit to indicate problem if\n // extra spacing detected\n const ok = !spacerProps.some((spacerProp, idx) => {\n const contentProp = contentProps[idx];\n const contentPropVal = tokens[contentProp];\n const spacerPropVal = tokens[spacerProp];\n const spacing = customSpacings?.[spacerProp] || 1;\n\n // There will be extra alignment if...\n\n // 1. The spaces don't match the space it should have (1 or custom spacing) OR\n return spacerPropVal.length !== spacing && spacerPropVal.length !== 0 ||\n\n // 2. There is a (single) space, no immediate content, and yet another\n // space is found subsequently (not separated by intervening content)\n spacerPropVal && !contentPropVal && followedBySpace(idx);\n }) && (hasNoHyphen || hasExactHyphenSpacing);\n if (ok) {\n return;\n }\n\n const fix = () => {\n for (const [\n idx,\n spacerProp,\n ] of spacerProps.entries()) {\n const contentProp = contentProps[idx];\n const contentPropVal = tokens[contentProp];\n\n if (contentPropVal) {\n const spacing = customSpacings?.[spacerProp] || 1;\n tokens[spacerProp] = ''.padStart(spacing, ' ');\n followedBySpace(idx, (hasSpace, contentPrp) => {\n if (hasSpace) {\n tokens[contentPrp] = '';\n }\n });\n } else {\n tokens[spacerProp] = '';\n }\n }\n\n if (!hasExactHyphenSpacing) {\n const hyphenSpacing = /^\\s*-\\s*/u;\n tokens.description = tokens.description.replace(\n hyphenSpacing, '-' + ''.padStart(postHyphenSpacing, ' '),\n );\n }\n\n utils.setTag(tag, tokens);\n };\n\n utils.reportJSDoc('Expected JSDoc block lines to not be aligned.', tag, fix, true);\n};\n\nconst checkAlignment = ({\n customSpacings,\n indent,\n jsdoc,\n jsdocNode,\n preserveMainDescriptionPostDelimiter,\n report,\n tags,\n utils,\n}) => {\n const transform = commentFlow(\n alignTransform({\n customSpacings,\n indent,\n preserveMainDescriptionPostDelimiter,\n tags,\n }),\n );\n const transformedJsdoc = transform(jsdoc);\n\n const comment = '/*' + jsdocNode.value + '*/';\n const formatted = utils.stringify(transformedJsdoc)\n .trimStart();\n\n if (comment !== formatted) {\n report(\n 'Expected JSDoc block lines to be aligned.',\n (fixer) => {\n return fixer.replaceText(jsdocNode, formatted);\n },\n );\n }\n};\n\nexport default iterateJsdoc(({\n indent,\n jsdoc,\n jsdocNode,\n report,\n context,\n utils,\n}) => {\n const {\n tags: applicableTags = [\n 'param', 'arg', 'argument', 'property', 'prop', 'returns', 'return',\n ],\n preserveMainDescriptionPostDelimiter,\n customSpacings,\n } = context.options[1] || {};\n\n if (context.options[0] === 'always') {\n // Skip if it contains only a single line.\n if (!jsdocNode.value.includes('\\n')) {\n return;\n }\n\n checkAlignment({\n customSpacings,\n indent,\n jsdoc,\n jsdocNode,\n preserveMainDescriptionPostDelimiter,\n report,\n tags: applicableTags,\n utils,\n });\n\n return;\n }\n\n const foundTags = utils.getPresentTags(applicableTags);\n for (const tag of foundTags) {\n checkNotAlignedPerTag(utils, tag, customSpacings);\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Reports invalid alignment of JSDoc block lines.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-line-alignment',\n },\n fixable: 'whitespace',\n schema: [\n {\n enum: [\n 'always', 'never',\n ],\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n customSpacings: {\n additionalProperties: false,\n properties: {\n postDelimiter: {\n type: 'integer',\n },\n postHyphen: {\n type: 'integer',\n },\n postName: {\n type: 'integer',\n },\n postTag: {\n type: 'integer',\n },\n postType: {\n type: 'integer',\n },\n },\n },\n preserveMainDescriptionPostDelimiter: {\n default: false,\n type: 'boolean',\n },\n tags: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n },\n type: 'object',\n },\n ],\n type: 'layout',\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"checkLineAlignment.js","names":["flow","commentFlow","transforms","checkNotAlignedPerTag","utils","tag","customSpacings","spacerProps","contentProps","mightHaveNamepath","tagMightHaveNamepath","tokens","source","followedBySpace","idx","callbck","nextIndex","slice","some","spacerProp","innerIdx","contentProp","spacePropVal","ret","postHyphenSpacing","postHyphen","exactHyphenSpacing","RegExp","hasNoHyphen","test","description","hasExactHyphenSpacing","ok","contentPropVal","spacerPropVal","spacing","length","fix","entries","padStart","hasSpace","contentPrp","hyphenSpacing","replace","setTag","reportJSDoc","checkAlignment","indent","jsdoc","jsdocNode","preserveMainDescriptionPostDelimiter","report","tags","wrapIndent","transform","alignTransform","transformedJsdoc","comment","value","formatted","stringify","trimStart","fixer","replaceText","iterateJsdoc","context","applicableTags","options","includes","foundTags","getPresentTags","type","name","postDelimiter","line","number","charAt","iterateAllJsdocs","meta","docs","url","fixable","schema","enum","additionalProperties","properties","postName","postTag","postType","default","items"],"sources":["../../src/rules/checkLineAlignment.js"],"sourcesContent":["import {\n transforms,\n} from 'comment-parser';\nimport alignTransform from '../alignTransform';\nimport iterateJsdoc from '../iterateJsdoc';\n\nconst {\n flow: commentFlow,\n} = transforms;\n\nconst checkNotAlignedPerTag = (utils, tag, customSpacings) => {\n /*\n start +\n delimiter +\n postDelimiter +\n tag +\n postTag +\n type +\n postType +\n name +\n postName +\n description +\n end +\n lineEnd\n */\n let spacerProps;\n let contentProps;\n const mightHaveNamepath = utils.tagMightHaveNamepath(tag.tag);\n if (mightHaveNamepath) {\n spacerProps = [\n 'postDelimiter', 'postTag', 'postType', 'postName',\n ];\n contentProps = [\n 'tag', 'type', 'name', 'description',\n ];\n } else {\n spacerProps = [\n 'postDelimiter', 'postTag', 'postType',\n ];\n contentProps = [\n 'tag', 'type', 'description',\n ];\n }\n\n const {\n tokens,\n } = tag.source[0];\n\n const followedBySpace = (idx, callbck) => {\n const nextIndex = idx + 1;\n\n return spacerProps.slice(nextIndex).some((spacerProp, innerIdx) => {\n const contentProp = contentProps[nextIndex + innerIdx];\n\n const spacePropVal = tokens[spacerProp];\n\n const ret = spacePropVal;\n\n if (callbck) {\n callbck(!ret, contentProp);\n }\n\n return ret && (callbck || !contentProp);\n });\n };\n\n const postHyphenSpacing = customSpacings?.postHyphen ?? 1;\n const exactHyphenSpacing = new RegExp(`^\\\\s*-\\\\s{${postHyphenSpacing},${postHyphenSpacing}}(?!\\\\s)`, 'u');\n const hasNoHyphen = !(/^\\s*-(?!$)/u).test(tokens.description);\n const hasExactHyphenSpacing = exactHyphenSpacing.test(\n tokens.description,\n );\n\n // If checking alignment on multiple lines, need to check other `source`\n // items\n // Go through `post*` spacing properties and exit to indicate problem if\n // extra spacing detected\n const ok = !spacerProps.some((spacerProp, idx) => {\n const contentProp = contentProps[idx];\n const contentPropVal = tokens[contentProp];\n const spacerPropVal = tokens[spacerProp];\n const spacing = customSpacings?.[spacerProp] || 1;\n\n // There will be extra alignment if...\n\n // 1. The spaces don't match the space it should have (1 or custom spacing) OR\n return spacerPropVal.length !== spacing && spacerPropVal.length !== 0 ||\n\n // 2. There is a (single) space, no immediate content, and yet another\n // space is found subsequently (not separated by intervening content)\n spacerPropVal && !contentPropVal && followedBySpace(idx);\n }) && (hasNoHyphen || hasExactHyphenSpacing);\n if (ok) {\n return;\n }\n\n const fix = () => {\n for (const [\n idx,\n spacerProp,\n ] of spacerProps.entries()) {\n const contentProp = contentProps[idx];\n const contentPropVal = tokens[contentProp];\n\n if (contentPropVal) {\n const spacing = customSpacings?.[spacerProp] || 1;\n tokens[spacerProp] = ''.padStart(spacing, ' ');\n followedBySpace(idx, (hasSpace, contentPrp) => {\n if (hasSpace) {\n tokens[contentPrp] = '';\n }\n });\n } else {\n tokens[spacerProp] = '';\n }\n }\n\n if (!hasExactHyphenSpacing) {\n const hyphenSpacing = /^\\s*-\\s*/u;\n tokens.description = tokens.description.replace(\n hyphenSpacing, '-' + ''.padStart(postHyphenSpacing, ' '),\n );\n }\n\n utils.setTag(tag, tokens);\n };\n\n utils.reportJSDoc('Expected JSDoc block lines to not be aligned.', tag, fix, true);\n};\n\nconst checkAlignment = ({\n customSpacings,\n indent,\n jsdoc,\n jsdocNode,\n preserveMainDescriptionPostDelimiter,\n report,\n tags,\n utils,\n wrapIndent,\n}) => {\n const transform = commentFlow(\n alignTransform({\n customSpacings,\n indent,\n preserveMainDescriptionPostDelimiter,\n tags,\n wrapIndent,\n }),\n );\n const transformedJsdoc = transform(jsdoc);\n\n const comment = '/*' + jsdocNode.value + '*/';\n const formatted = utils.stringify(transformedJsdoc)\n .trimStart();\n\n if (comment !== formatted) {\n report(\n 'Expected JSDoc block lines to be aligned.',\n (fixer) => {\n return fixer.replaceText(jsdocNode, formatted);\n },\n );\n }\n};\n\nexport default iterateJsdoc(({\n indent,\n jsdoc,\n jsdocNode,\n report,\n context,\n utils,\n}) => {\n const {\n tags: applicableTags = [\n 'param', 'arg', 'argument', 'property', 'prop', 'returns', 'return',\n ],\n preserveMainDescriptionPostDelimiter,\n customSpacings,\n wrapIndent = '',\n } = context.options[1] || {};\n\n if (context.options[0] === 'always') {\n // Skip if it contains only a single line.\n if (!jsdocNode.value.includes('\\n')) {\n return;\n }\n\n checkAlignment({\n customSpacings,\n indent,\n jsdoc,\n jsdocNode,\n preserveMainDescriptionPostDelimiter,\n report,\n tags: applicableTags,\n utils,\n wrapIndent,\n });\n\n return;\n }\n\n const foundTags = utils.getPresentTags(applicableTags);\n if (context.options[0] !== 'any') {\n for (const tag of foundTags) {\n checkNotAlignedPerTag(utils, tag, customSpacings);\n }\n }\n\n for (const tag of foundTags) {\n if (tag.source.length > 1) {\n let idx = 0;\n for (const {\n tokens,\n // Avoid the tag line\n } of tag.source.slice(1)) {\n idx++;\n\n if (\n !tokens.description ||\n // Avoid first lines after multiline type\n tokens.type ||\n tokens.name\n ) {\n continue;\n }\n\n // Don't include a single separating space/tab\n if (tokens.postDelimiter.slice(1) !== wrapIndent) {\n utils.reportJSDoc('Expected wrap indent', {\n line: tag.source[0].number + idx,\n }, () => {\n tokens.postDelimiter = tokens.postDelimiter.charAt() + wrapIndent;\n });\n return;\n }\n }\n }\n }\n}, {\n iterateAllJsdocs: true,\n meta: {\n docs: {\n description: 'Reports invalid alignment of JSDoc block lines.',\n url: 'https://github.com/gajus/eslint-plugin-jsdoc#eslint-plugin-jsdoc-rules-check-line-alignment',\n },\n fixable: 'whitespace',\n schema: [\n {\n enum: [\n 'always', 'never', 'any',\n ],\n type: 'string',\n },\n {\n additionalProperties: false,\n properties: {\n customSpacings: {\n additionalProperties: false,\n properties: {\n postDelimiter: {\n type: 'integer',\n },\n postHyphen: {\n type: 'integer',\n },\n postName: {\n type: 'integer',\n },\n postTag: {\n type: 'integer',\n },\n postType: {\n type: 'integer',\n },\n },\n },\n preserveMainDescriptionPostDelimiter: {\n default: false,\n type: 'boolean',\n },\n tags: {\n items: {\n type: 'string',\n },\n type: 'array',\n },\n wrapIndent: {\n type: 'string',\n },\n },\n type: 'object',\n },\n ],\n type: 'layout',\n },\n});\n"],"mappings":";;;;;;AAAA;AAGA;AACA;AAA2C;AAE3C,MAAM;EACJA,IAAI,EAAEC;AACR,CAAC,GAAGC,yBAAU;AAEd,MAAMC,qBAAqB,GAAG,CAACC,KAAK,EAAEC,GAAG,EAAEC,cAAc,KAAK;EAC5D;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACE,IAAIC,WAAW;EACf,IAAIC,YAAY;EAChB,MAAMC,iBAAiB,GAAGL,KAAK,CAACM,oBAAoB,CAACL,GAAG,CAACA,GAAG,CAAC;EAC7D,IAAII,iBAAiB,EAAE;IACrBF,WAAW,GAAG,CACZ,eAAe,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,CACnD;IACDC,YAAY,GAAG,CACb,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,CACrC;EACH,CAAC,MAAM;IACLD,WAAW,GAAG,CACZ,eAAe,EAAE,SAAS,EAAE,UAAU,CACvC;IACDC,YAAY,GAAG,CACb,KAAK,EAAE,MAAM,EAAE,aAAa,CAC7B;EACH;EAEA,MAAM;IACJG;EACF,CAAC,GAAGN,GAAG,CAACO,MAAM,CAAC,CAAC,CAAC;EAEjB,MAAMC,eAAe,GAAG,CAACC,GAAG,EAAEC,OAAO,KAAK;IACxC,MAAMC,SAAS,GAAGF,GAAG,GAAG,CAAC;IAEzB,OAAOP,WAAW,CAACU,KAAK,CAACD,SAAS,CAAC,CAACE,IAAI,CAAC,CAACC,UAAU,EAAEC,QAAQ,KAAK;MACjE,MAAMC,WAAW,GAAGb,YAAY,CAACQ,SAAS,GAAGI,QAAQ,CAAC;MAEtD,MAAME,YAAY,GAAGX,MAAM,CAACQ,UAAU,CAAC;MAEvC,MAAMI,GAAG,GAAGD,YAAY;MAExB,IAAIP,OAAO,EAAE;QACXA,OAAO,CAAC,CAACQ,GAAG,EAAEF,WAAW,CAAC;MAC5B;MAEA,OAAOE,GAAG,KAAKR,OAAO,IAAI,CAACM,WAAW,CAAC;IACzC,CAAC,CAAC;EACJ,CAAC;EAED,MAAMG,iBAAiB,GAAG,CAAAlB,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAEmB,UAAU,KAAI,CAAC;EACzD,MAAMC,kBAAkB,GAAG,IAAIC,MAAM,CAAE,aAAYH,iBAAkB,IAAGA,iBAAkB,UAAS,EAAE,GAAG,CAAC;EACzG,MAAMI,WAAW,GAAG,CAAE,aAAa,CAAEC,IAAI,CAAClB,MAAM,CAACmB,WAAW,CAAC;EAC7D,MAAMC,qBAAqB,GAAGL,kBAAkB,CAACG,IAAI,CACnDlB,MAAM,CAACmB,WAAW,CACnB;;EAED;EACA;EACA;EACA;EACA,MAAME,EAAE,GAAG,CAACzB,WAAW,CAACW,IAAI,CAAC,CAACC,UAAU,EAAEL,GAAG,KAAK;IAChD,MAAMO,WAAW,GAAGb,YAAY,CAACM,GAAG,CAAC;IACrC,MAAMmB,cAAc,GAAGtB,MAAM,CAACU,WAAW,CAAC;IAC1C,MAAMa,aAAa,GAAGvB,MAAM,CAACQ,UAAU,CAAC;IACxC,MAAMgB,OAAO,GAAG,CAAA7B,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAGa,UAAU,CAAC,KAAI,CAAC;;IAEjD;;IAEA;IACA,OAAOe,aAAa,CAACE,MAAM,KAAKD,OAAO,IAAID,aAAa,CAACE,MAAM,KAAK,CAAC;IAEnE;IACA;IACAF,aAAa,IAAI,CAACD,cAAc,IAAIpB,eAAe,CAACC,GAAG,CAAC;EAC5D,CAAC,CAAC,KAAKc,WAAW,IAAIG,qBAAqB,CAAC;EAC5C,IAAIC,EAAE,EAAE;IACN;EACF;EAEA,MAAMK,GAAG,GAAG,MAAM;IAChB,KAAK,MAAM,CACTvB,GAAG,EACHK,UAAU,CACX,IAAIZ,WAAW,CAAC+B,OAAO,EAAE,EAAE;MAC1B,MAAMjB,WAAW,GAAGb,YAAY,CAACM,GAAG,CAAC;MACrC,MAAMmB,cAAc,GAAGtB,MAAM,CAACU,WAAW,CAAC;MAE1C,IAAIY,cAAc,EAAE;QAClB,MAAME,OAAO,GAAG,CAAA7B,cAAc,aAAdA,cAAc,uBAAdA,cAAc,CAAGa,UAAU,CAAC,KAAI,CAAC;QACjDR,MAAM,CAACQ,UAAU,CAAC,GAAG,EAAE,CAACoB,QAAQ,CAACJ,OAAO,EAAE,GAAG,CAAC;QAC9CtB,eAAe,CAACC,GAAG,EAAE,CAAC0B,QAAQ,EAAEC,UAAU,KAAK;UAC7C,IAAID,QAAQ,EAAE;YACZ7B,MAAM,CAAC8B,UAAU,CAAC,GAAG,EAAE;UACzB;QACF,CAAC,CAAC;MACJ,CAAC,MAAM;QACL9B,MAAM,CAACQ,UAAU,CAAC,GAAG,EAAE;MACzB;IACF;IAEA,IAAI,CAACY,qBAAqB,EAAE;MAC1B,MAAMW,aAAa,GAAG,WAAW;MACjC/B,MAAM,CAACmB,WAAW,GAAGnB,MAAM,CAACmB,WAAW,CAACa,OAAO,CAC7CD,aAAa,EAAE,GAAG,GAAG,EAAE,CAACH,QAAQ,CAACf,iBAAiB,EAAE,GAAG,CAAC,CACzD;IACH;IAEApB,KAAK,CAACwC,MAAM,CAACvC,GAAG,EAAEM,MAAM,CAAC;EAC3B,CAAC;EAEDP,KAAK,CAACyC,WAAW,CAAC,+CAA+C,EAAExC,GAAG,EAAEgC,GAAG,EAAE,IAAI,CAAC;AACpF,CAAC;AAED,MAAMS,cAAc,GAAG,CAAC;EACtBxC,cAAc;EACdyC,MAAM;EACNC,KAAK;EACLC,SAAS;EACTC,oCAAoC;EACpCC,MAAM;EACNC,IAAI;EACJhD,KAAK;EACLiD;AACF,CAAC,KAAK;EACJ,MAAMC,SAAS,GAAGrD,WAAW,CAC3B,IAAAsD,uBAAc,EAAC;IACbjD,cAAc;IACdyC,MAAM;IACNG,oCAAoC;IACpCE,IAAI;IACJC;EACF,CAAC,CAAC,CACH;EACD,MAAMG,gBAAgB,GAAGF,SAAS,CAACN,KAAK,CAAC;EAEzC,MAAMS,OAAO,GAAG,IAAI,GAAGR,SAAS,CAACS,KAAK,GAAG,IAAI;EAC7C,MAAMC,SAAS,GAAGvD,KAAK,CAACwD,SAAS,CAACJ,gBAAgB,CAAC,CAChDK,SAAS,EAAE;EAEd,IAAIJ,OAAO,KAAKE,SAAS,EAAE;IACzBR,MAAM,CACJ,2CAA2C,EAC1CW,KAAK,IAAK;MACT,OAAOA,KAAK,CAACC,WAAW,CAACd,SAAS,EAAEU,SAAS,CAAC;IAChD,CAAC,CACF;EACH;AACF,CAAC;AAAC,eAEa,IAAAK,qBAAY,EAAC,CAAC;EAC3BjB,MAAM;EACNC,KAAK;EACLC,SAAS;EACTE,MAAM;EACNc,OAAO;EACP7D;AACF,CAAC,KAAK;EACJ,MAAM;IACJgD,IAAI,EAAEc,cAAc,GAAG,CACrB,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,CACpE;IACDhB,oCAAoC;IACpC5C,cAAc;IACd+C,UAAU,GAAG;EACf,CAAC,GAAGY,OAAO,CAACE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;EAE5B,IAAIF,OAAO,CAACE,OAAO,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE;IACnC;IACA,IAAI,CAAClB,SAAS,CAACS,KAAK,CAACU,QAAQ,CAAC,IAAI,CAAC,EAAE;MACnC;IACF;IAEAtB,cAAc,CAAC;MACbxC,cAAc;MACdyC,MAAM;MACNC,KAAK;MACLC,SAAS;MACTC,oCAAoC;MACpCC,MAAM;MACNC,IAAI,EAAEc,cAAc;MACpB9D,KAAK;MACLiD;IACF,CAAC,CAAC;IAEF;EACF;EAEA,MAAMgB,SAAS,GAAGjE,KAAK,CAACkE,cAAc,CAACJ,cAAc,CAAC;EACtD,IAAID,OAAO,CAACE,OAAO,CAAC,CAAC,CAAC,KAAK,KAAK,EAAE;IAChC,KAAK,MAAM9D,GAAG,IAAIgE,SAAS,EAAE;MAC3BlE,qBAAqB,CAACC,KAAK,EAAEC,GAAG,EAAEC,cAAc,CAAC;IACnD;EACF;EAEA,KAAK,MAAMD,GAAG,IAAIgE,SAAS,EAAE;IAC3B,IAAIhE,GAAG,CAACO,MAAM,CAACwB,MAAM,GAAG,CAAC,EAAE;MACzB,IAAItB,GAAG,GAAG,CAAC;MACX,KAAK,MAAM;QACTH;QACF;MACA,CAAC,IAAIN,GAAG,CAACO,MAAM,CAACK,KAAK,CAAC,CAAC,CAAC,EAAE;QACxBH,GAAG,EAAE;QAEL,IACE,CAACH,MAAM,CAACmB,WAAW;QACnB;QACAnB,MAAM,CAAC4D,IAAI,IACX5D,MAAM,CAAC6D,IAAI,EACX;UACA;QACF;;QAEA;QACA,IAAI7D,MAAM,CAAC8D,aAAa,CAACxD,KAAK,CAAC,CAAC,CAAC,KAAKoC,UAAU,EAAE;UAChDjD,KAAK,CAACyC,WAAW,CAAC,sBAAsB,EAAE;YACxC6B,IAAI,EAAErE,GAAG,CAACO,MAAM,CAAC,CAAC,CAAC,CAAC+D,MAAM,GAAG7D;UAC/B,CAAC,EAAE,MAAM;YACPH,MAAM,CAAC8D,aAAa,GAAG9D,MAAM,CAAC8D,aAAa,CAACG,MAAM,EAAE,GAAGvB,UAAU;UACnE,CAAC,CAAC;UACF;QACF;MACF;IACF;EACF;AACF,CAAC,EAAE;EACDwB,gBAAgB,EAAE,IAAI;EACtBC,IAAI,EAAE;IACJC,IAAI,EAAE;MACJjD,WAAW,EAAE,iDAAiD;MAC9DkD,GAAG,EAAE;IACP,CAAC;IACDC,OAAO,EAAE,YAAY;IACrBC,MAAM,EAAE,CACN;MACEC,IAAI,EAAE,CACJ,QAAQ,EAAE,OAAO,EAAE,KAAK,CACzB;MACDZ,IAAI,EAAE;IACR,CAAC,EACD;MACEa,oBAAoB,EAAE,KAAK;MAC3BC,UAAU,EAAE;QACV/E,cAAc,EAAE;UACd8E,oBAAoB,EAAE,KAAK;UAC3BC,UAAU,EAAE;YACVZ,aAAa,EAAE;cACbF,IAAI,EAAE;YACR,CAAC;YACD9C,UAAU,EAAE;cACV8C,IAAI,EAAE;YACR,CAAC;YACDe,QAAQ,EAAE;cACRf,IAAI,EAAE;YACR,CAAC;YACDgB,OAAO,EAAE;cACPhB,IAAI,EAAE;YACR,CAAC;YACDiB,QAAQ,EAAE;cACRjB,IAAI,EAAE;YACR;UACF;QACF,CAAC;QACDrB,oCAAoC,EAAE;UACpCuC,OAAO,EAAE,KAAK;UACdlB,IAAI,EAAE;QACR,CAAC;QACDnB,IAAI,EAAE;UACJsC,KAAK,EAAE;YACLnB,IAAI,EAAE;UACR,CAAC;UACDA,IAAI,EAAE;QACR,CAAC;QACDlB,UAAU,EAAE;UACVkB,IAAI,EAAE;QACR;MACF,CAAC;MACDA,IAAI,EAAE;IACR,CAAC,CACF;IACDA,IAAI,EAAE;EACR;AACF,CAAC,CAAC;AAAA;AAAA"}
package/package.json CHANGED
@@ -120,5 +120,5 @@
120
120
  "test-cov": "cross-env TIMING=1 nyc --reporter text npm run test-no-cov",
121
121
  "test-index": "npm run test-no-cov -- test/rules/index.js"
122
122
  },
123
- "version": "39.9.1"
123
+ "version": "40.0.1"
124
124
  }