{"version":3,"file":"root.cjs","sources":["../../../../src/rules/limit-single-line-comments/root.ts"],"sourcesContent":["import type { TSESTree } from \"@typescript-eslint/utils\";\nimport type { RuleContext } from \"@typescript-eslint/utils/ts-eslint\";\n\nimport { MessageIds } from \"../../const.message-ids.js\";\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 { isLineOverflowing } from \"../../utils/is-line-overflowing.js\";\nimport { isCommentOnOwnLine } from \"../../utils/is-on-own-line.js\";\nimport { isSemanticComment } from \"../../utils/is-semantic-comment.js\";\n\nimport { SINGLE_LINE_COMMENT_BOILERPLATE_SIZE } from \"./const.boilerplate-size.js\";\nimport { fixOverflow } from \"./fix.overflow.js\";\nimport { canBlockBeCompated } from \"./util.can-block-be-compacted.js\";\nimport { captureNearbyComments } from \"./util.capture-nearby-comments.js\";\nimport { captureRelevantCommentsIntoBlock } from \"./util.capture-relevant-comments.js\";\n\nexport function limitSingleLineComments(\n  ruleContext: RuleContext<string, unknown[]>,\n  options: Options,\n  comments: TSESTree.LineComment[],\n) {\n  const sourceCode = ruleContext.sourceCode;\n  const lines = sourceCode.getLines();\n\n  for (let i = 0; i < comments.length; i++) {\n    const currentCommentLine = comments[i];\n\n    if (\n      !currentCommentLine?.range ||\n      !currentCommentLine.value ||\n      !isCommentOnOwnLine(sourceCode, currentCommentLine) ||\n      isSemanticComment(currentCommentLine, options.semanticComments)\n    ) {\n      continue;\n    }\n\n    const line = lines[currentCommentLine.loc.start.line - 1];\n    const whitespaceString = line?.split(\"//\")[0] ?? \"\";\n\n    let 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: SINGLE_LINE_COMMENT_BOILERPLATE_SIZE,\n      comment: {\n        range: currentCommentLine.range,\n        lines: [currentCommentLine.value],\n        value: currentCommentLine.value,\n      },\n    } satisfies Context;\n\n    const currentBlock = captureRelevantCommentsIntoBlock(\n      sourceCode,\n      comments,\n      i,\n      context,\n    );\n    const fixableComment = currentBlock.mergedComment;\n\n    // ensure that we only visit a captured block once\n    i += currentBlock.endIndex - currentBlock.startIndex;\n\n    const nearbyComments = captureNearbyComments(comments, i);\n    const wrappedByBackticks =\n      (nearbyComments?.value.trimStart().startsWith(\"` \") ||\n        nearbyComments?.value.trimStart().startsWith(\"``\")) &&\n      nearbyComments?.value.trimEnd().endsWith(\"`\");\n\n    if (\n      !fixableComment ||\n      wrappedByBackticks ||\n      isCommentInComment(fixableComment.value) ||\n      isCodeInComment(nearbyComments?.value, context)\n    ) {\n      continue;\n    }\n\n    // Update our context to reflect that we may have merged multiple comment\n    // lines into a singular block.\n    context = {\n      ...context,\n      comment: {\n        range: fixableComment.range,\n        lines: [fixableComment.value],\n        value: fixableComment.value,\n      },\n    };\n\n    // In case any lines in our current block overflows, then we need to warn\n    // that overflow has been detected\n    if (\n      comments\n        .slice(currentBlock.startIndex, currentBlock.endIndex + 1)\n        .some((line) => isLineOverflowing(line.value, context))\n    ) {\n      ruleContext.report({\n        loc: fixableComment.loc,\n        messageId: MessageIds.EXCEEDS_MAX_LENGTH,\n        data: {\n          maxLength: context.maxLength,\n        },\n        fix: (fixer) => fixOverflow(fixer, fixableComment, context),\n      });\n    } else if (\n      context.mode === \"compact\" &&\n      canBlockBeCompated(comments, currentBlock, context)\n    ) {\n      ruleContext.report({\n        loc: fixableComment.loc,\n        messageId: MessageIds.CAN_COMPACT,\n        data: {\n          maxLength: context.maxLength,\n        },\n        fix: (fixer) => fixOverflow(fixer, fixableComment, context),\n      });\n    }\n  }\n}\n"],"names":["isCommentOnOwnLine","isSemanticComment","SINGLE_LINE_COMMENT_BOILERPLATE_SIZE","captureRelevantCommentsIntoBlock","captureNearbyComments","isCommentInComment","isCodeInComment","line","isLineOverflowing","MessageIds","fixOverflow","canBlockBeCompated"],"mappings":"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"}