{"version":3,"file":"requireDescriptionCompleteSentence.cjs","names":["_iterateJsdoc","_interopRequireDefault","require","_escapeStringRegexp","e","__esModule","default","otherDescriptiveTags","Set","extractParagraphs","text","split","extractSentences","abbreviationsRegex","txt","replaceAll","replace","sentenceEndGrouping","puncts","matchAll","map","sentEnd","sentence","idx","test","isNewLinePrecededByAPeriod","lastLineEndsSentence","lines","some","line","isCapitalized","str","toUpperCase","isTable","charAt","capitalize","slice","validateDescription","description","reportOrig","jsdocNode","sourceCode","tag","newlineBeforeCapsAssumesBadSentenceEnd","descriptionNoHeadings","paragraphs","filter","Boolean","paragraph","parIdx","sentences","fix","fixer","getText","pop","RegExp","escapeStringRegexp","sentence_","beginning","reg","_$0","$1","replaceText","report","msg","tagObj","source","number","column","paragraphNoAbbreviations","_default","exports","iterateJsdoc","context","jsdoc","utils","abbreviations","options","length","abbreviation","join","getDescription","indices","match","index","reverse","forEachPreferredTag","matchingJsdocTag","desc","name","getTagDescription","trim","tagsWithNames","getTagsByType","tags","tagsWithoutNames","filterTags","tagName","has","hasOptionTag","trimEnd","iterateAllJsdocs","meta","docs","url","fixable","schema","additionalProperties","properties","items","type","module"],"sources":["../../src/rules/requireDescriptionCompleteSentence.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\nimport escapeStringRegexp from 'escape-string-regexp';\n\nconst otherDescriptiveTags = new Set([\n  // 'copyright' and 'see' might be good addition, but as the former may be\n  //   sensitive text, and the latter may have just a link, they are not\n  //   included by default\n  'summary', 'file', 'fileoverview', 'overview', 'classdesc', 'todo',\n  'deprecated', 'throws', 'exception', 'yields', 'yield',\n]);\n\n/**\n * @param {string} text\n * @returns {string[]}\n */\nconst extractParagraphs = (text) => {\n  return text.split(/(?<![;:])\\n\\n+/u);\n};\n\n/**\n * @param {string} text\n * @param {string|RegExp} abbreviationsRegex\n * @returns {string[]}\n */\nconst extractSentences = (text, abbreviationsRegex) => {\n  const txt = text\n    // Remove all {} tags.\n    .replaceAll(/(?<!^)\\{[\\s\\S]*?\\}\\s*/gu, '')\n\n    // Remove custom abbreviations\n    .replace(abbreviationsRegex, '');\n\n  const sentenceEndGrouping = /([.?!])(?:\\s+|$)/ug;\n\n  const puncts = [\n    ...txt.matchAll(sentenceEndGrouping),\n  ].map((sentEnd) => {\n    return sentEnd[0];\n  });\n\n  return txt\n    .split(/[.?!](?:\\s+|$)/u)\n\n    // Re-add the dot.\n    .map((sentence, idx) => {\n      return !puncts[idx] && /^\\s*$/u.test(sentence) ? sentence : `${sentence}${puncts[idx] || ''}`;\n    });\n};\n\n/**\n * @param {string} text\n * @returns {boolean}\n */\nconst isNewLinePrecededByAPeriod = (text) => {\n  /** @type {boolean} */\n  let lastLineEndsSentence;\n\n  const lines = text.split('\\n');\n\n  return !lines.some((line) => {\n    if (lastLineEndsSentence === false && /^[A-Z][a-z]/u.test(line)) {\n      return true;\n    }\n\n    lastLineEndsSentence = /[.:?!|]$/u.test(line);\n\n    return false;\n  });\n};\n\n/**\n * @param {string} str\n * @returns {boolean}\n */\nconst isCapitalized = (str) => {\n  return str[0] === str[0].toUpperCase();\n};\n\n/**\n * @param {string} str\n * @returns {boolean}\n */\nconst isTable = (str) => {\n  return str.charAt(0) === '|';\n};\n\n/**\n * @param {string} str\n * @returns {string}\n */\nconst capitalize = (str) => {\n  return str.charAt(0).toUpperCase() + str.slice(1);\n};\n\n/**\n * @param {string} description\n * @param {import('../iterateJsdoc.js').Report} reportOrig\n * @param {import('eslint').Rule.Node} jsdocNode\n * @param {string|RegExp} abbreviationsRegex\n * @param {import('eslint').SourceCode} sourceCode\n * @param {import('comment-parser').Spec|{\n *   line: import('../iterateJsdoc.js').Integer\n * }} tag\n * @param {boolean} newlineBeforeCapsAssumesBadSentenceEnd\n * @returns {boolean}\n */\nconst validateDescription = (\n  description, reportOrig, jsdocNode, abbreviationsRegex,\n  sourceCode, tag, newlineBeforeCapsAssumesBadSentenceEnd,\n) => {\n  if (!description || (/^\\n+$/u).test(description)) {\n    return false;\n  }\n\n  const descriptionNoHeadings = description.replaceAll(/^\\s*#[^\\n]*(\\n|$)/gm, '');\n\n  const paragraphs = extractParagraphs(descriptionNoHeadings).filter(Boolean);\n\n  return paragraphs.some((paragraph, parIdx) => {\n    const sentences = extractSentences(paragraph, abbreviationsRegex);\n\n    const fix = /** @type {import('eslint').Rule.ReportFixer} */ (fixer) => {\n      let text = sourceCode.getText(jsdocNode);\n\n      if (!/[.:?!]$/u.test(paragraph)) {\n        const line = paragraph.split('\\n').filter(Boolean).pop();\n        text = text.replace(new RegExp(`${escapeStringRegexp(\n          /** @type {string} */\n          (line),\n        )}$`, 'mu'), `${line}.`);\n      }\n\n      for (const sentence of sentences.filter((sentence_) => {\n        return !(/^\\s*$/u).test(sentence_) && !isCapitalized(sentence_) &&\n          !isTable(sentence_);\n      })) {\n        const beginning = sentence.split('\\n')[0];\n\n        if ('tag' in tag && tag.tag) {\n          const reg = new RegExp(`(@${escapeStringRegexp(tag.tag)}.*)${escapeStringRegexp(beginning)}`, 'u');\n\n          text = text.replace(reg, (_$0, $1) => {\n            return $1 + capitalize(beginning);\n          });\n        } else {\n          text = text.replace(new RegExp('((?:[.?!]|\\\\*|\\\\})\\\\s*)' + escapeStringRegexp(beginning), 'u'), '$1' + capitalize(beginning));\n        }\n      }\n\n      return fixer.replaceText(jsdocNode, text);\n    };\n\n    /**\n     * @param {string} msg\n     * @param {import('eslint').Rule.ReportFixer | null | undefined} fixer\n     * @param {{\n     *   line?: number | undefined;\n     *   column?: number | undefined;\n     * } | (import('comment-parser').Spec & {\n     *   line?: number | undefined;\n     *   column?: number | undefined;\n     * })} tagObj\n     * @returns {void}\n     */\n    const report = (msg, fixer, tagObj) => {\n      if ('line' in tagObj) {\n        /**\n         * @type {{\n         *   line: number;\n         * }}\n         */ (tagObj).line += parIdx * 2;\n      } else {\n        /** @type {import('comment-parser').Spec} */ (\n          tagObj\n        ).source[0].number += parIdx * 2;\n      }\n\n      // Avoid errors if old column doesn't exist here\n      tagObj.column = 0;\n      reportOrig(msg, fixer, tagObj);\n    };\n\n    if (sentences.some((sentence) => {\n      return (/^[.?!]$/u).test(sentence);\n    })) {\n      report('Sentences must be more than punctuation.', null, tag);\n    }\n\n    if (sentences.some((sentence) => {\n      return !(/^\\s*$/u).test(sentence) && !isCapitalized(sentence) && !isTable(sentence);\n    })) {\n      report('Sentences should start with an uppercase character.', fix, tag);\n    }\n\n    const paragraphNoAbbreviations = paragraph.replace(abbreviationsRegex, '');\n\n    if (!/(?:[.?!|]|```)\\s*$/u.test(paragraphNoAbbreviations)) {\n      report('Sentences must end with a period.', fix, tag);\n      return true;\n    }\n\n    if (newlineBeforeCapsAssumesBadSentenceEnd && !isNewLinePrecededByAPeriod(paragraphNoAbbreviations)) {\n      report('A line of text is started with an uppercase character, but the preceding line does not end the sentence.', null, tag);\n\n      return true;\n    }\n\n    return false;\n  });\n};\n\nexport default iterateJsdoc(({\n  sourceCode,\n  context,\n  jsdoc,\n  report,\n  jsdocNode,\n  utils,\n}) => {\n  const /** @type {{abbreviations: string[], newlineBeforeCapsAssumesBadSentenceEnd: boolean}} */ {\n    abbreviations = [],\n    newlineBeforeCapsAssumesBadSentenceEnd = false,\n  } = context.options[0] || {};\n\n  const abbreviationsRegex = abbreviations.length ?\n    new RegExp('\\\\b' + abbreviations.map((abbreviation) => {\n      return escapeStringRegexp(abbreviation.replaceAll(/\\.$/ug, '') + '.');\n    }).join('|') + '(?:$|\\\\s)', 'gu') :\n    '';\n\n  let {\n    description,\n  } = utils.getDescription();\n\n  const indices = [\n    ...description.matchAll(/```[\\s\\S]*```/gu),\n  ].map((match) => {\n    const {\n      index,\n    } = match;\n    const [\n      {\n        length,\n      },\n    ] = match;\n    return {\n      index,\n      length,\n    };\n  }).reverse();\n\n  for (const {\n    index,\n    length,\n  } of indices) {\n    description = description.slice(0, index) +\n      description.slice(/** @type {import('../iterateJsdoc.js').Integer} */ (\n        index\n      ) + length);\n  }\n\n  if (validateDescription(description, report, jsdocNode, abbreviationsRegex, sourceCode, {\n    line: jsdoc.source[0].number + 1,\n  }, newlineBeforeCapsAssumesBadSentenceEnd)) {\n    return;\n  }\n\n  utils.forEachPreferredTag('description', (matchingJsdocTag) => {\n    const desc = `${matchingJsdocTag.name} ${utils.getTagDescription(matchingJsdocTag)}`.trim();\n    validateDescription(desc, report, jsdocNode, abbreviationsRegex, sourceCode, matchingJsdocTag, newlineBeforeCapsAssumesBadSentenceEnd);\n  }, true);\n\n  const {\n    tagsWithNames,\n  } = utils.getTagsByType(jsdoc.tags);\n  const tagsWithoutNames = utils.filterTags(({\n    tag: tagName,\n  }) => {\n    return otherDescriptiveTags.has(tagName) ||\n      utils.hasOptionTag(tagName) && !tagsWithNames.some(({\n        tag,\n      }) => {\n        // If user accidentally adds tags with names (or like `returns`\n        //  get parsed as having names), do not add to this list\n        return tag === tagName;\n      });\n  });\n\n  tagsWithNames.some((tag) => {\n    const desc = /** @type {string} */ (\n      utils.getTagDescription(tag)\n    ).replace(/^- /u, '').trimEnd();\n\n    return validateDescription(desc, report, jsdocNode, abbreviationsRegex, sourceCode, tag, newlineBeforeCapsAssumesBadSentenceEnd);\n  });\n\n  tagsWithoutNames.some((tag) => {\n    const desc = `${tag.name} ${utils.getTagDescription(tag)}`.trim();\n\n    return validateDescription(desc, report, jsdocNode, abbreviationsRegex, sourceCode, tag, newlineBeforeCapsAssumesBadSentenceEnd);\n  });\n}, {\n  iterateAllJsdocs: true,\n  meta: {\n    docs: {\n      description: 'Requires that block description, explicit `@description`, and `@param`/`@returns` tag descriptions are written in complete sentences.',\n      url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-description-complete-sentence.md#repos-sticky-header',\n    },\n    fixable: 'code',\n    schema: [\n      {\n        additionalProperties: false,\n        properties: {\n          abbreviations: {\n            items: {\n              type: 'string',\n            },\n            type: 'array',\n          },\n          newlineBeforeCapsAssumesBadSentenceEnd: {\n            type: 'boolean',\n          },\n          tags: {\n            items: {\n              type: 'string',\n            },\n            type: 'array',\n          },\n        },\n        type: 'object',\n      },\n    ],\n    type: 'suggestion',\n  },\n});\n"],"mappings":"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","ignoreList":[]}