{"version":3,"file":"root.cjs","sources":["../../../../src/rules/limit-multi-line-comments/root.ts"],"sourcesContent":["import type { TSESTree } from \"@typescript-eslint/utils\";\nimport type { RuleContext } from \"@typescript-eslint/utils/ts-eslint\";\n\nimport type { Context } from \"../../typings.context.js\";\nimport type { Options } from \"../../typings.options.js\";\nimport { isCodeInComment } from \"../../utils/is-code-in-comment.js\";\nimport { isCommentInComment } from \"../../utils/is-comment-in-comment.js\";\nimport { isJSDocLikeComment } from \"../../utils/is-jsdoc-like.js\";\nimport { isCommentOnOwnLine } from \"../../utils/is-on-own-line.js\";\nimport { isSemanticComment } from \"../../utils/is-semantic-comment.js\";\n\nimport { detectOverflowInMultilineBlocks } from \"./detect.overflow.js\";\nimport { reportCompactableBlocks } from \"./report.compact.js\";\nimport { reportOverflowingBlocks } from \"./report.overflow.js\";\nimport { getBoilerPlateSize } from \"./util.boilerplate-size.js\";\nimport { extractBlocksFromMultilineComment } from \"./util.extract-blocks.js\";\n\nexport function limitMultiLineComments(\n  ruleContext: RuleContext<string, unknown[]>,\n  options: Options,\n  comments: TSESTree.Comment[],\n) {\n  const sourceCode = ruleContext.sourceCode;\n  const lines = sourceCode.getLines();\n\n  for (const comment of comments) {\n    const commentRange = comment.range;\n\n    if (\n      !commentRange ||\n      !comment.loc ||\n      comment.type !== \"Block\" ||\n      !isCommentOnOwnLine(sourceCode, comment) ||\n      isSemanticComment(comment, options.semanticComments)\n    ) {\n      continue;\n    }\n\n    const whitespaceString = (() => {\n      const firstLine = lines[comment.loc.start.line - 1];\n      const lastLine = lines[comment.loc.end.line - 1];\n\n      if (\n        comment.loc.start.line === comment.loc.end.line ||\n        (lastLine && !/^( |\\t)*\\*\\//.test(lastLine))\n      ) {\n        return firstLine?.split(\"/*\")[0] ?? \"\";\n      }\n\n      return lastLine?.split(\" */\")[0] ?? firstLine?.split(\"/*\")[0] ?? \"\";\n    })();\n\n    const commentLines = getCommentLines(comment);\n    const context = {\n      ...options,\n      whitespace: {\n        string: whitespaceString,\n        size: whitespaceString\n          .split(\"\")\n          .reduce(\n            (acc, curr) => acc + (curr === \"\\t\" ? options.tabSize : 1),\n            0,\n          ),\n      },\n      boilerplateSize: getBoilerPlateSize(commentLines),\n      comment: {\n        range: commentRange,\n        lines: commentLines,\n        value: comment.value,\n      },\n    } satisfies Context;\n\n    // Extract all valid blocks, but immediately remove those that should be\n    // ignored no matter what.\n    const blocks = extractBlocksFromMultilineComment(context).filter(\n      (block) =>\n        !block.lines.some(\n          (line) => isCommentInComment(line) || isJSDocLikeComment(line),\n        ) && !isCodeInComment(block.value, context),\n    );\n\n    const overflowingBlocks = detectOverflowInMultilineBlocks(\n      ruleContext,\n      context,\n      blocks,\n    );\n\n    reportOverflowingBlocks(ruleContext, comment, context, overflowingBlocks);\n\n    const remainingBlocks = blocks.filter(\n      (it) => !overflowingBlocks.includes(it),\n    );\n    reportCompactableBlocks(ruleContext, comment, context, remainingBlocks);\n  }\n}\n\nfunction getCommentLines(comment: TSESTree.BlockComment): string[] {\n  return comment.value.split(\"\\n\").map((it) => it.replace(/^( |\\t)*?\\*/, \"\"));\n}\n"],"names":["isCommentOnOwnLine","isSemanticComment","getBoilerPlateSize","extractBlocksFromMultilineComment","isCommentInComment","isJSDocLikeComment","isCodeInComment","detectOverflowInMultilineBlocks","reportOverflowingBlocks","reportCompactableBlocks"],"mappings":"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"}