@isentinel/eslint-plugin-comment-length
Version:
37 lines (30 loc) • 1.11 kB
text/typescript
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;
}