{"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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"}