UNPKG

@isentinel/eslint-plugin-comment-length

Version:
37 lines (30 loc) 1.11 kB
import { Context } from "../../typings.context"; import { MultilineBlock } from "./typings.block"; import { captureNextBlock } from "./util.capture-next-block"; import { mergeLines } from "./util.merge-lines"; export function extractBlocksFromMultilineComment(context: Context) { const blocks = [] as MultilineBlock[]; let ignoreFollowingLines = false; // Processing multi-line comments becomes a tad more difficult than simply // parsing single-line comments since a single comment may contain // multiple logical comment blocks which should be handled individually. // // Thus our first step is to take a multi-line comment and convert it into // logical blocks for (let i = 0; i < context.comment.lines.length; i++) { if (i <= (blocks[blocks.length - 1]?.endIndex ?? -1)) { continue; } const [block, ignoreLines] = captureNextBlock( ignoreFollowingLines, i, context, ); blocks.push({ ...block, value: block.lines.reduce((acc, curr) => mergeLines(acc, curr)), }); ignoreFollowingLines = ignoreLines; } return blocks; }