{"version":3,"file":"tagLines.cjs","names":["iterateJsdoc"],"sources":["../../src/rules/tagLines.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\n/**\n * @param {{\n *   maxBlockLines: null|number,\n *   startLines: null|number,\n *   utils: import('../iterateJsdoc.js').Utils\n * }} cfg\n */\nconst checkMaxBlockLines = ({\n  maxBlockLines,\n  startLines,\n  utils,\n}) => {\n  if (typeof maxBlockLines !== 'number') {\n    return false;\n  }\n\n  if (typeof startLines === 'number' && maxBlockLines < startLines) {\n    utils.reportJSDoc(\n      'If set to a number, `maxBlockLines` must be greater than or equal to `startLines`.',\n    );\n    return true;\n  }\n\n  const {\n    description,\n  } = utils.getDescription();\n  const excessBlockLinesRegex = new RegExp('\\n{' + (maxBlockLines + 2) + ',}', 'v');\n  const excessBlockLinesMatch = description.match(excessBlockLinesRegex);\n  const excessBlockLines = excessBlockLinesMatch?.[0]?.length ?? 0;\n  if (excessBlockLinesMatch) {\n    const excessIndexLine = description.slice(0, excessBlockLinesMatch.index).match(/\\n/gv)?.length ?? 0;\n    utils.reportJSDoc(\n      `Expected a maximum of ${maxBlockLines} line${maxBlockLines === 1 ? '' : 's'} within block description`,\n      {\n        line: excessIndexLine,\n      },\n      () => {\n        utils.setBlockDescription((info, seedTokens, descLines, postDelims) => {\n          const newPostDelims = [\n            ...postDelims.slice(0, excessIndexLine),\n            ...postDelims.slice(excessIndexLine + excessBlockLines - 1 - maxBlockLines),\n          ];\n          return [\n            ...descLines.slice(0, excessIndexLine),\n            ...descLines.slice(excessIndexLine + excessBlockLines - 1 - maxBlockLines),\n          ].map((desc, idx) => {\n            return {\n              number: 0,\n              source: '',\n              tokens: seedTokens({\n                ...info,\n                description: desc,\n                postDelimiter: newPostDelims[idx],\n              }),\n            };\n          });\n        });\n      },\n    );\n    return true;\n  }\n\n  return false;\n};\n\nexport default iterateJsdoc(({\n  context,\n  jsdoc,\n  utils,\n}) => {\n  const [\n    alwaysNever = 'never',\n    {\n      applyToEndTag = true,\n      count = 1,\n      endLines = 0,\n      maxBlockLines = null,\n      startLines = 0,\n      startLinesWithNoTags = null,\n      tags = {},\n    } = {},\n  ] = context.options;\n\n  jsdoc.tags.some((tg, tagIdx) => {\n    let lastTag;\n\n    /**\n     * @type {null|import('../iterateJsdoc.js').Integer}\n     */\n    let lastEmpty = null;\n\n    /**\n     * @type {null|import('../iterateJsdoc.js').Integer}\n     */\n    let reportIndex = null;\n    let emptyLinesCount = 0;\n    for (const [\n      idx,\n      {\n        tokens: {\n          description,\n          end,\n          name,\n          tag,\n          type,\n        },\n      },\n    ] of tg.source.entries()) {\n      // May be text after a line break within a tag description\n      if (description) {\n        reportIndex = null;\n      }\n\n      if (lastTag && [\n        'always', 'any',\n      ].includes(tags[lastTag.slice(1)]?.lines)) {\n        continue;\n      }\n\n      const empty = !tag && !name && !type && !description;\n      if (\n        empty && !end &&\n        (alwaysNever === 'never' ||\n          lastTag && tags[lastTag.slice(1)]?.lines === 'never'\n        )\n      ) {\n        reportIndex = idx;\n\n        continue;\n      }\n\n      if (!end) {\n        if (empty) {\n          emptyLinesCount++;\n        } else {\n          emptyLinesCount = 0;\n        }\n\n        lastEmpty = empty ? idx : null;\n      }\n\n      lastTag = tag;\n    }\n\n    if (\n      typeof endLines === 'number' &&\n      lastEmpty !== null && tagIdx === jsdoc.tags.length - 1\n    ) {\n      const lineDiff = endLines - emptyLinesCount;\n\n      if (lineDiff < 0) {\n        const fixer = () => {\n          utils.removeTag(tagIdx, {\n            tagSourceOffset: /** @type {import('../iterateJsdoc.js').Integer} */ (\n              lastEmpty\n            ) + lineDiff + 1,\n          });\n        };\n\n        utils.reportJSDoc(\n          `Expected ${endLines} trailing lines`,\n          {\n            line: tg.source[lastEmpty].number + lineDiff + 1,\n          },\n          fixer,\n        );\n      } else if (lineDiff > 0) {\n        const fixer = () => {\n          utils.addLines(\n            tagIdx,\n            /** @type {import('../iterateJsdoc.js').Integer} */ (lastEmpty),\n            endLines - emptyLinesCount,\n          );\n        };\n\n        utils.reportJSDoc(\n          `Expected ${endLines} trailing lines`,\n          {\n            line: tg.source[lastEmpty].number,\n          },\n          fixer,\n        );\n      }\n\n      return true;\n    }\n\n    if (reportIndex !== null) {\n      const fixer = () => {\n        utils.removeTag(tagIdx, {\n          tagSourceOffset: /** @type {import('../iterateJsdoc.js').Integer} */ (\n            reportIndex\n          ),\n        });\n      };\n\n      utils.reportJSDoc(\n        'Expected no lines between tags',\n        {\n          line: tg.source[0].number + 1,\n        },\n        fixer,\n      );\n\n      return true;\n    }\n\n    return false;\n  });\n\n  (applyToEndTag ? jsdoc.tags : jsdoc.tags.slice(0, -1)).some((tg, tagIdx) => {\n    /**\n     * @type {{\n     *   idx: import('../iterateJsdoc.js').Integer,\n     *   number: import('../iterateJsdoc.js').Integer\n     * }[]}\n     */\n    const lines = [];\n\n    let currentTag;\n    let tagSourceIdx = 0;\n    for (const [\n      idx,\n      {\n        number,\n        tokens: {\n          description,\n          end,\n          name,\n          tag,\n          type,\n        },\n      },\n    ] of tg.source.entries()) {\n      if (description) {\n        lines.splice(0);\n        tagSourceIdx = idx;\n      }\n\n      if (tag) {\n        currentTag = tag;\n      }\n\n      if (!tag && !name && !type && !description && !end) {\n        lines.push({\n          idx,\n          number,\n        });\n      }\n    }\n\n    const currentTg = currentTag && tags[currentTag.slice(1)];\n    const tagCount = currentTg?.count;\n\n    const defaultAlways = alwaysNever === 'always' && currentTg?.lines !== 'never' &&\n      currentTg?.lines !== 'any' && lines.length < count;\n\n    let overrideAlways;\n    let fixCount = count;\n    if (!defaultAlways) {\n      fixCount = typeof tagCount === 'number' ? tagCount : count;\n      overrideAlways = currentTg?.lines === 'always' &&\n        lines.length < fixCount;\n    }\n\n    if (defaultAlways || overrideAlways) {\n      const fixer = () => {\n        utils.addLines(tagIdx, lines[lines.length - 1]?.idx || tagSourceIdx + 1, fixCount - lines.length);\n      };\n\n      const line = lines[lines.length - 1]?.number || tg.source[tagSourceIdx].number;\n      utils.reportJSDoc(\n        `Expected ${fixCount} line${fixCount === 1 ? '' : 's'} between tags but found ${lines.length}`,\n        {\n          line,\n        },\n        fixer,\n      );\n\n      return true;\n    }\n\n    return false;\n  });\n\n  if (checkMaxBlockLines({\n    maxBlockLines,\n    startLines,\n    utils,\n  })) {\n    return;\n  }\n\n  if (typeof startLines === 'number' || typeof startLinesWithNoTags === 'number') {\n    const noTags = !jsdoc.tags.length;\n\n    if (noTags && startLinesWithNoTags === null) {\n      return;\n    }\n\n    const {\n      description,\n      lastDescriptionLine,\n    } = utils.getDescription();\n    if (!(/\\S/v).test(description)) {\n      return;\n    }\n\n    const startingLines = noTags ? startLinesWithNoTags : startLines;\n\n    const trailingLines = description.match(/\\n+$/v)?.[0]?.length;\n    const trailingDiff = (trailingLines ?? 0) - startingLines;\n    if (trailingDiff > 0) {\n      utils.reportJSDoc(\n        `Expected only ${startingLines} line${startingLines === 1 ? '' : 's'} after block description`,\n        {\n          line: lastDescriptionLine - trailingDiff,\n        },\n        () => {\n          utils.setBlockDescription((info, seedTokens, descLines, postDelims) => {\n            return descLines.slice(0, -trailingDiff).map((desc, idx) => {\n              return {\n                number: 0,\n                source: '',\n                tokens: seedTokens({\n                  ...info,\n                  description: desc,\n                  postDelimiter: postDelims[idx],\n                }),\n              };\n            });\n          });\n        },\n      );\n    } else if (trailingDiff < 0) {\n      utils.reportJSDoc(\n        `Expected ${startingLines} lines after block description`,\n        {\n          line: lastDescriptionLine,\n        },\n        () => {\n          utils.setBlockDescription((info, seedTokens, descLines, postDelims) => {\n            return [\n              ...descLines,\n              ...Array.from({\n                length: -trailingDiff,\n              }, () => {\n                return '';\n              }),\n            ].map((desc, idx) => {\n              return {\n                number: 0,\n                source: '',\n                tokens: seedTokens({\n                  ...info,\n                  description: desc,\n                  postDelimiter: desc.trim() ? postDelims[idx] : '',\n                }),\n              };\n            });\n          });\n        },\n      );\n    }\n  }\n}, {\n  iterateAllJsdocs: true,\n  meta: {\n    docs: {\n      description: 'Enforces lines (or no lines) before, after, or between tags.',\n      url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/tag-lines.md#repos-sticky-header',\n    },\n    fixable: 'code',\n    schema: [\n      {\n        description: `Defaults to \"never\". \"any\" is only useful with \\`tags\\` (allowing non-enforcement of lines except\nfor particular tags) or with \\`startLines\\`, \\`startLinesWithNoTags\\` \\`endLines\\`, or \\`maxBlockLines\\`. It is also\nnecessary if using the linebreak-setting options of the \\`sort-tags\\` rule\nso that the two rules won't conflict in both attempting to set lines\nbetween tags.`,\n        enum: [\n          'always', 'any', 'never',\n        ],\n        type: 'string',\n      },\n      {\n        additionalProperties: false,\n        properties: {\n          applyToEndTag: {\n            description: `Set to \\`false\\` and use with \"always\" to indicate the normal lines to be\nadded after tags should not be added after the final tag.\n\nDefaults to \\`true\\`.`,\n            type: 'boolean',\n          },\n          count: {\n            description: `Use with \"always\" to indicate the number of lines to require be present.\n\nDefaults to 1.`,\n            type: 'integer',\n          },\n          endLines: {\n            anyOf: [\n              {\n                type: 'integer',\n              },\n              {\n                type: 'null',\n              },\n            ],\n            description: `If not set to \\`null\\`, will enforce end lines to the given count on the\nfinal tag only.\n\nDefaults to \\`0\\`.`,\n          },\n          maxBlockLines: {\n            anyOf: [\n              {\n                type: 'integer',\n              },\n              {\n                type: 'null',\n              },\n            ],\n            description: `If not set to \\`null\\`, will enforce a maximum number of lines to the given count anywhere in the block description.\n\nNote that if non-\\`null\\`, \\`maxBlockLines\\` must be greater than or equal to \\`startLines\\`.\n\nDefaults to \\`null\\`.`,\n          },\n          startLines: {\n            anyOf: [\n              {\n                type: 'integer',\n              },\n              {\n                type: 'null',\n              },\n            ],\n            description: `If not set to \\`null\\`, will enforce end lines to the given count before the\nfirst tag only, unless there is only whitespace content, in which case,\na line count will not be enforced.\n\nDefaults to \\`0\\`.`,\n          },\n          startLinesWithNoTags: {\n            description: 'If set to a number, will enforce a starting lines count when there are no tags. Defaults to `undefined`.',\n            type: 'number',\n          },\n          tags: {\n            description: `Overrides the default behavior depending on specific tags.\n\nAn object whose keys are tag names and whose values are objects with the\nfollowing keys:\n\n1. \\`lines\\` - Set to \\`always\\`, \\`never\\`, or \\`any\\` to override.\n2. \\`count\\` - Overrides main \\`count\\` (for \"always\")\n\nDefaults to empty object.`,\n            patternProperties: {\n              '.*': {\n                additionalProperties: false,\n                properties: {\n                  count: {\n                    type: 'integer',\n                  },\n                  lines: {\n                    enum: [\n                      'always', 'never', 'any',\n                    ],\n                    type: 'string',\n                  },\n                },\n              },\n            },\n            type: 'object',\n          },\n        },\n        type: 'object',\n      },\n    ],\n    type: 'suggestion',\n  },\n});\n"],"mappings":"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","ignoreList":[]}