mdrefine 0.2.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"lists.js","sourceRoot":"","sources":["../../src/rules/lists.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Blockquote, FootnoteDefinition, List, ListItem, Nodes, Parents } from \"mdast\";\nimport type { Document, Finding, Rule } from \"../core/types.js\";\nimport { optionsSchema } from \"./style.js\";\n\n/**\n * The list rules edit the markers of list items and the indentation that the\n * items' lines need. Each rule proposes one edit for each group of adjacent\n * lists outside other lists, which holds all its changes there, nested lists\n * included, so that an engine that applies some edits and holds others back\n * never applies half of a list's changes: a marker moved without its item's\n * lines would move the item's content.\n *\n * A list item's lines need as many columns of indentation as its marker,\n * the marker's indentation, and the space after it take up, counted from\n * where its container's part of the line starts. Lines with less are lazy\n * continuations of a paragraph. Changing those columns moves the item's\n * lines with them, and where that would change what a line belongs to, the\n * rule leaves the list as written.\n */\n\ntype Container = Blockquote | ListItem | FootnoteDefinition;\n\n/** A physical line of the source, without its line break. */\ninterface Line {\n start: number;\n end: number;\n}\n\ninterface Item {\n node: ListItem;\n list: ListGroup;\n index: number;\n /** The line indexes of the marker and of the item's last line. */\n first: number;\n last: number;\n marker: number;\n markerEnd: number;\n /** The number of an ordered item as written. */\n digits: string;\n /** The end of the whitespace after the marker. */\n spaceEnd: number;\n markerColumn: number;\n markerEndColumn: number;\n /** The columns of whitespace after the marker. */\n spacing: number;\n /** Whether nothing but whitespace follows the marker on its line. */\n blankFirst: boolean;\n /**\n * Where the item's part of its marker line starts, after the prefixes of\n * its containers, the columns of indentation before the marker, and the\n * columns that the item's other lines need from there. Undefined when the\n * marker line cannot be read exactly, such as when a tab spans a\n * container's prefix.\n */\n start?: number;\n offset?: number;\n width?: number;\n}\ninterface ListGroup {\n node: List;\n items: Item[];\n /** The nearest block quote, list item, or footnote definition around it. */\n parent: Container | undefined;\n /** The list directly before it, which its first line could continue. */\n previous: ListGroup | undefined;\n}\n/** Adjacent lists outside other lists, with the lists nested in them. */\ninterface Unit {\n lists: ListGroup[];\n /** Runs of adjacent sibling lists of one kind, in the unit and nested in it. */\n runs: ListGroup[][];\n valid: boolean;\n}\ninterface ContainerInfo {\n parent: Container | undefined;\n first: number;\n last: number;\n}\n/**\n * How one line passes through one of its containers. `content`: the line\n * continues inside the container from `end`. `blank`: only whitespace\n * follows `start`. `lazy`: the line lacks the container's prefix and\n * continues a paragraph. `unsupported`: a tab spans the prefix's end, or the\n * source does not have the expected shape.\n */\ninterface Level {\n node: Container;\n kind: \"content\" | \"blank\" | \"lazy\" | \"unsupported\";\n start: number;\n startColumn: number;\n end: number;\n endColumn: number;\n /** The columns of whitespace after `start`, for blank and lazy lines. */\n indent: number;\n}\ninterface Matched {\n chain: Container[];\n levels: Level[];\n}\ninterface Analysis {\n source: string;\n lines: Line[];\n units: Unit[];\n items: Map<ListItem, Item>;\n containers: Map<Container, ContainerInfo>;\n /** Later lines of inline code, math, and other inline nodes that keep their whitespace. */\n sensitive: Set<number>;\n match(line: number): Matched;\n}\ninterface Op {\n start: number;\n end: number;\n text: string;\n /** What the change does, for the finding when it is the first one. */\n message?: string;\n}\n\nconst tabStop = (column: number) => column + 4 - (column % 4);\nconst isSpace = (character: string | undefined) => character === \" \" || character === \"\\t\";\n/** The column reached from `column` at `from` after the characters up to `to`. */\nfunction columnAt(source: string, from: number, to: number, column: number): number {\n for (let at = from; at < to; at++) column = source[at] === \"\\t\" ? tabStop(column) : column + 1;\n return column;\n}\nfunction splitLines(source: string): Line[] {\n const lines: Line[] = [];\n let start = 0;\n for (const match of source.matchAll(/\\r\\n|\\r|\\n/g)) {\n lines.push({ start, end: match.index });\n start = match.index + match[0].length;\n }\n lines.push({ start, end: source.length });\n return lines;\n}\nconst located = (node: Nodes) =>\n node.position?.start.offset !== undefined && node.position.end.offset !== undefined;\nconst isContainer = (node: Nodes): node is Container =>\n node.type === \"blockquote\" || node.type === \"listItem\" || node.type === \"footnoteDefinition\";\n\nconst analyses = new WeakMap<Document, Analysis>();\n/** The lists of a document and the means to read their lines, shared by the list rules. */\nfunction analyze(document: Document): Analysis {\n const known = analyses.get(document);\n if (known) return known;\n const { source } = document;\n const lines = splitLines(source);\n const units: Unit[] = [];\n const items = new Map<ListItem, Item>();\n const containers = new Map<Container, ContainerInfo>();\n const sensitive = new Set<number>();\n /** The innermost container of each line, by line index. */\n const innermost: (Container | undefined)[] = [];\n\n const visit = (node: Parents, parent: Container | undefined, unit: Unit | undefined) => {\n const children = node.children as Nodes[];\n let group: Unit | undefined;\n let run: ListGroup[] | undefined;\n let before: ListGroup | undefined;\n for (let index = 0; index < children.length; index++) {\n const child = children[index]!;\n if (!located(child)) {\n if (unit) unit.valid = false;\n continue;\n }\n const firstLine = child.position!.start.line - 1;\n let lastLine = child.position!.end.line - 1;\n // A list item in a footnote definition can end past the next item's\n // start; a block ends before the next one starts.\n const next = children[index + 1];\n if (next && located(next)) lastLine = Math.min(lastLine, next.position!.start.line - 2);\n if (parent) lastLine = Math.min(lastLine, containers.get(parent)!.last);\n if (child.type === \"list\") {\n let target = unit;\n if (!target) {\n if (children[index - 1]?.type !== \"list\" || !group) {\n group = { lists: [], runs: [], valid: true };\n units.push(group);\n }\n target = group;\n }\n const previous = children[index - 1];\n if (!run || previous?.type !== \"list\" || previous.ordered !== child.ordered) {\n run = [];\n target.runs.push(run);\n }\n const list: ListGroup = {\n node: child,\n items: [],\n parent,\n previous: children[index - 1]?.type === \"list\" ? before : undefined,\n };\n before = list;\n run.push(list);\n target.lists.push(list);\n for (const [position, entry] of child.children.entries()) {\n const item = readItem(entry, list, position, target);\n if (item) list.items.push(item);\n }\n visit(child, parent, target);\n continue;\n }\n run = undefined;\n if (isContainer(child)) {\n containers.set(child, { parent, first: firstLine, last: Math.max(firstLine, lastLine) });\n for (let line = firstLine; line <= lastLine; line++) innermost[line] = child;\n visit(child, child, unit);\n continue;\n }\n // Code and other blocks that hold text as written have no inline nodes.\n if (unit && !(\"value\" in child)) collectInline(child, unit);\n }\n };\n /**\n * The later lines of nodes that keep the whitespace at the start of their\n * lines, such as code spans, math, and titles, and nodes without positions.\n */\n const collectInline = (node: Nodes, unit: Unit) => {\n if (!located(node)) {\n unit.valid = false;\n return;\n }\n const keeps =\n node.type === \"definition\" ||\n (\"title\" in node && typeof node.title === \"string\") ||\n (\"value\" in node &&\n typeof node.value === \"string\" &&\n node.type !== \"text\" &&\n node.type !== \"html\");\n if (keeps)\n for (let line = node.position!.start.line; line < node.position!.end.line; line++)\n sensitive.add(line);\n if (\"children\" in node)\n for (const child of node.children as Nodes[]) collectInline(child, unit);\n };\n const readItem = (\n node: ListItem,\n list: ListGroup,\n index: number,\n unit: Unit,\n ): Item | undefined => {\n if (!located(node)) {\n unit.valid = false;\n return undefined;\n }\n const marker = node.position!.start.offset!;\n const first = node.position!.start.line - 1;\n const line = lines[first]!;\n let markerEnd = marker;\n let digits = \"\";\n if (list.node.ordered) {\n digits = /^\\d{1,9}/.exec(source.slice(marker, marker + 10))?.[0] ?? \"\";\n markerEnd = marker + digits.length;\n if (!digits || (source[markerEnd] !== \".\" && source[markerEnd] !== \")\")) unit.valid = false;\n markerEnd++;\n } else {\n if (!\"-+*\".includes(source[marker] ?? \"_\")) unit.valid = false;\n markerEnd++;\n }\n let spaceEnd = markerEnd;\n while (spaceEnd < line.end && isSpace(source[spaceEnd])) spaceEnd++;\n const markerColumn = columnAt(source, line.start, marker, 0);\n const markerEndColumn = markerColumn + markerEnd - marker;\n const item: Item = {\n node,\n list,\n index,\n first,\n last: first,\n marker,\n markerEnd,\n digits,\n spaceEnd,\n markerColumn,\n markerEndColumn,\n spacing: columnAt(source, markerEnd, spaceEnd, markerEndColumn) - markerEndColumn,\n blankFirst: spaceEnd === line.end,\n };\n items.set(node, item);\n return item;\n };\n visit(document.tree, undefined, undefined);\n for (const item of items.values()) item.last = containers.get(item.node)?.last ?? item.first;\n for (const unit of units)\n for (const list of unit.lists)\n for (const item of list.items)\n if (item.last < item.first || (list.items[item.index + 1]?.first ?? Infinity) <= item.last)\n unit.valid = false;\n\n const enclosing = (line: number) => {\n const chain: Container[] = [];\n for (let node = innermost[line]; node; node = containers.get(node)?.parent) chain.unshift(node);\n return chain;\n };\n const chains = new Map<number, Container[]>();\n /** A line with nothing but whitespace and `>`, which starts no container. */\n const blank = (line: number) => {\n const { start, end } = lines[line]!;\n const node = innermost[line];\n return (\n (!node || containers.get(node)!.first !== line) && /^[ \\t>]*$/.test(source.slice(start, end))\n );\n };\n /**\n * The containers that a line passes through. A blank line belongs to every\n * container that the line before it is in, until a later line closes them,\n * though the tree ends a container at its last line with content: in a list\n * item that ends with indented code, a blank line's spaces beyond the code's\n * indentation become part of the code.\n */\n const open = (line: number): Container[] => {\n let from = line;\n while (from > 0 && !chains.has(from) && !chains.has(from - 1) && blank(from)) from--;\n for (let at = from; at <= line; at++) {\n if (chains.has(at)) continue;\n let chain = enclosing(at);\n const before = at > 0 && blank(at) ? chains.get(at - 1) : undefined;\n if (before && chain.every((node, index) => before[index] === node)) chain = before;\n chains.set(at, chain);\n }\n return chains.get(line)!;\n };\n const memo = new Map<number, Matched>();\n const match = (line: number): Matched => {\n const known = memo.get(line);\n if (known) return known;\n const chain = open(line);\n const levels: Level[] = [];\n const result = { chain, levels };\n memo.set(line, result);\n let at = lines[line]!.start;\n let column = 0;\n for (const node of chain) {\n const level = matchLevel(node, line, at, column);\n levels.push(level);\n if (level.kind !== \"content\") break;\n at = level.end;\n column = level.endColumn;\n }\n return result;\n };\n /** How `line`, from `start` at `column`, passes through the prefix of `node`. */\n const matchLevel = (node: Container, line: number, start: number, column: number): Level => {\n const { end: lineEnd } = lines[line]!;\n const level: Level = {\n node,\n kind: \"unsupported\",\n start,\n startColumn: column,\n end: start,\n endColumn: column,\n indent: 0,\n };\n const info = containers.get(node)!;\n if (node.type === \"listItem\") {\n const item = items.get(node);\n if (!item) return level;\n if (line === item.first) {\n if (!/^[ \\t]*$/.test(source.slice(start, item.marker))) return level;\n const offset = item.markerColumn - column;\n if (offset > 3) return level;\n const content =\n item.blankFirst || item.spacing >= 5\n ? item.markerEndColumn + 1\n : item.markerEndColumn + item.spacing;\n item.start = start;\n item.offset = offset;\n item.width = content - column;\n if (item.blankFirst) return { ...level, kind: \"content\", end: lineEnd, endColumn: content };\n if (item.spacing >= 5) {\n // A tab right after the marker gives one of its columns to the marker.\n if (source[item.markerEnd] !== \" \") return level;\n return { ...level, kind: \"content\", end: item.markerEnd + 1, endColumn: content };\n }\n return { ...level, kind: \"content\", end: item.spaceEnd, endColumn: content };\n }\n if (item.width === undefined) match(item.first);\n if (item.width === undefined) return level;\n return indented(level, item.width, lineEnd);\n }\n if (node.type === \"blockquote\") {\n let at = start;\n let reached = column;\n if (line === info.first) at = node.position!.start.offset!;\n else\n while (at < lineEnd && isSpace(source[at])) {\n const next = source[at] === \"\\t\" ? tabStop(reached) : reached + 1;\n if (next - column > 3) break;\n reached = next;\n at++;\n }\n if (source[at] !== \">\" || !/^[ \\t]*$/.test(source.slice(start, at)))\n return /^[ \\t]*$/.test(source.slice(start, lineEnd))\n ? { ...level, kind: \"blank\", indent: columnAt(source, start, lineEnd, column) - column }\n : line === info.first\n ? level\n : { ...level, kind: \"lazy\", indent: columnAt(source, start, at, column) - column };\n reached = columnAt(source, start, at, column) + 1;\n at++;\n if (source[at] === \"\\t\") return level;\n if (source[at] === \" \") {\n at++;\n reached++;\n }\n return { ...level, kind: \"content\", end: at, endColumn: reached };\n }\n // A footnote definition: its first line's content starts with its first\n // block, and its other lines need four columns.\n if (line === info.first) {\n const child = node.children[0];\n const end =\n child && located(child) && child.position!.start.line - 1 === line\n ? child.position!.start.offset!\n : lineEnd;\n return {\n ...level,\n kind: \"content\",\n end,\n endColumn: columnAt(source, start, end, column),\n };\n }\n return indented(level, 4, lineEnd);\n };\n /** A line that needs `width` columns of indentation to continue a container. */\n const indented = (level: Level, width: number, lineEnd: number): Level => {\n let at = level.start;\n let column = level.startColumn;\n if (/^[ \\t]*$/.test(source.slice(at, lineEnd)))\n return {\n ...level,\n kind: \"blank\",\n indent: columnAt(source, at, lineEnd, column) - column,\n };\n while (column - level.startColumn < width && isSpace(source[at])) {\n const next = source[at] === \"\\t\" ? tabStop(column) : column + 1;\n if (next - level.startColumn > width) return level;\n column = next;\n at++;\n }\n if (column - level.startColumn < width)\n return { ...level, kind: \"lazy\", indent: column - level.startColumn };\n return { ...level, kind: \"content\", end: at, endColumn: column };\n };\n const analysis = { source, lines, units, items, containers, sensitive, match };\n analyses.set(document, analysis);\n return analysis;\n}\n\n/** A tab among the whitespace and container markers that start the rest of a line. */\nfunction structuralTab(source: string, from: number, to: number): boolean {\n const prefix = /^(?:[ \\t>]|(?:[-+*]|\\d{1,9}[.)])(?=[ \\t]|$))*/.exec(source.slice(from, to))![0];\n return prefix.includes(\"\\t\");\n}\nconst onlySpaces = (source: string, from: number, to: number) =>\n from <= to && /^ *$/.test(source.slice(from, to));\n/**\n * Whether a lazy line can join its item: once the item needs fewer columns,\n * the line may have enough and continue the item's paragraph from inside it.\n * Text that starts with a letter, or a number that is no list marker, does\n * that; anything else could start a block there, and inline code or math\n * would keep the indentation that the line no longer has.\n */\nfunction lazySafe(analysis: Analysis, line: number, level: Level): boolean {\n const { source, lines } = analysis;\n const text = source.slice(level.start, lines[line]!.end).trimStart();\n return (\n !analysis.sensitive.has(line) &&\n !text.includes(\"|\") &&\n /^(?:\\p{L}|[0-9]+(?![.)0-9]))/u.test(text)\n );\n}\n/**\n * Whether the item's column changes are possible without moving content: an\n * item's lines must be read exactly, and none of the lines around it may\n * start or stop belonging to it. `delta` gives the change of each item's\n * column, `minimum` the fewest columns that an item can need once the list\n * rules are done, and `siblings` says whether the other items of the list\n * move to the start of their container's part of the line too.\n */\nfunction feasible(\n analysis: Analysis,\n list: ListGroup,\n delta: Map<Item, number>,\n mode: \"start\" | \"end\",\n minimum: (item: Item) => number,\n siblings: \"move\" | \"stay\",\n): boolean {\n const { source, lines } = analysis;\n for (const item of list.items) analysis.match(item.first);\n for (const item of list.items) {\n const change = delta.get(item) ?? 0;\n if (!change) continue;\n if (item.width === undefined) return false;\n for (const line of linesWithBlanks(analysis, item.first + 1, item.last)) {\n const { chain, levels } = analysis.match(line);\n const at = chain.indexOf(item.node);\n if (at < 0) {\n if (line > item.last) continue;\n return false;\n }\n const level = levels[at];\n if (!level) {\n const last = levels.at(-1);\n if (!last || last.kind === \"unsupported\") return false;\n if (last.kind === \"blank\" && !blankFeasible(analysis, line, chain, levels.length - 1))\n return false;\n continue;\n }\n if (level.kind === \"unsupported\") return false;\n if (level.kind === \"blank\") {\n if (!blankFeasible(analysis, line, chain, at)) return false;\n continue;\n }\n if (level.kind === \"lazy\") {\n if (change < 0 && level.indent >= minimum(item) && !lazySafe(analysis, line, level))\n return false;\n continue;\n }\n const lineEnd = lines[line]!.end;\n if (mode === \"start\") {\n if (change < 0 && !onlySpaces(source, level.start, level.start - change)) return false;\n if (structuralTab(source, level.start, lineEnd)) return false;\n } else {\n if (change < 0 && !onlySpaces(source, level.end + change, level.end)) return false;\n if (structuralTab(source, level.end + Math.min(0, change), lineEnd)) return false;\n }\n }\n if (change < 0 && !captureFree(analysis, item, change, minimum, siblings)) return false;\n }\n return true;\n}\n/**\n * The items and footnote definitions whose prefixes a blank line's\n * whitespace stands for, from the level where the line is blank down to the\n * deepest container still open there; a block quote that the line has no `>`\n * for ends there. Undefined when an item's columns are not known.\n */\nfunction blankPath(analysis: Analysis, chain: Container[], from: number) {\n const path: (Item | undefined)[] = [];\n let width = 0;\n for (const node of chain.slice(from)) {\n if (node.type === \"blockquote\") break;\n if (node.type === \"footnoteDefinition\") {\n path.push(undefined);\n width += 4;\n continue;\n }\n const item = analysis.items.get(node);\n if (item?.width === undefined) return undefined;\n path.push(item);\n width += item.width;\n }\n return { items: path, width };\n}\n/** Whether a blank line can keep its whitespace beyond its containers' prefixes. */\nfunction blankFeasible(analysis: Analysis, line: number, chain: Container[], from: number) {\n const path = blankPath(analysis, chain, from);\n if (!path) return false;\n const level = analysis.match(line).levels[from]!;\n return (\n !path.items.length ||\n !analysis.source.slice(level.start, analysis.lines[line]!.end).includes(\"\\t\")\n );\n}\n/** The line indexes from `first` to `last`, and the blank lines after them. */\nfunction* linesWithBlanks(analysis: Analysis, first: number, last: number) {\n const { source, lines } = analysis;\n for (let line = first; line <= last; line++) yield line;\n for (let line = last + 1; line < lines.length; line++) {\n if (!/^[ \\t>]*$/.test(source.slice(lines[line]!.start, lines[line]!.end))) break;\n yield line;\n }\n}\n/**\n * Whether the line after an item that needs fewer columns stays out of it:\n * the next item of its list, unless that moves too, or the first line after\n * the item that its container continues with.\n */\nfunction captureFree(\n analysis: Analysis,\n item: Item,\n change: number,\n minimum: (item: Item) => number,\n siblings: \"move\" | \"stay\",\n): boolean {\n const { source, lines } = analysis;\n const next = item.list.items[item.index + 1];\n if (next) {\n if (siblings === \"move\") return true;\n return next.offset !== undefined && next.offset < item.width! + change;\n }\n const { parent } = item.list;\n const last = parent ? analysis.containers.get(parent)!.last : lines.length - 1;\n for (let line = item.last + 1; line <= last; line++) {\n let start = lines[line]!.start;\n let column = 0;\n if (parent) {\n const { chain, levels } = analysis.match(line);\n const at = chain.indexOf(parent);\n if (at < 0) return false;\n const level = levels[at];\n const reached = level ?? levels.at(-1);\n if (!reached || reached.kind === \"unsupported\") return false;\n if (reached.kind === \"blank\") continue;\n if (!level || level.kind === \"lazy\") return true;\n start = level.end;\n column = level.endColumn;\n }\n const text = source.slice(start, lines[line]!.end);\n if (/^[ \\t]*$/.test(text)) continue;\n const indent = /^[ \\t]*/.exec(text)![0];\n return columnAt(source, start, start + indent.length, column) - column < minimum(item);\n }\n return true;\n}\n/**\n * The changes to the lines of items whose columns change by `delta`: the\n * columns are removed or added at the start of each item's part of a line,\n * or at its end, where its content starts. A blank line in code keeps the\n * whitespace that the code holds there.\n */\nfunction shiftOps(\n analysis: Analysis,\n unit: Unit,\n delta: Map<Item, number>,\n mode: \"start\" | \"end\",\n): Op[] {\n const ops: Op[] = [];\n if (![...delta.values()].some(Boolean)) return ops;\n const { lines } = analysis;\n let firstLine = Infinity;\n let lastLine = -1;\n for (const { items } of unit.lists) {\n firstLine = Math.min(firstLine, items[0]?.first ?? Infinity);\n lastLine = Math.max(lastLine, items.at(-1)?.last ?? -1);\n }\n for (const line of linesWithBlanks(analysis, firstLine, lastLine)) {\n const { chain, levels } = analysis.match(line);\n for (const [at, level] of levels.entries()) {\n if (level.kind === \"blank\") {\n // The whitespace beyond the prefixes of the containers still open\n // stays: in code, it is part of the code.\n const path = blankPath(analysis, chain, at);\n if (!path) break;\n const change = path.items.reduce((sum, item) => sum + ((item && delta.get(item)) ?? 0), 0);\n const indent =\n level.indent >= path.width\n ? level.indent + change\n : Math.min(level.indent, path.width + change);\n if (change && indent !== level.indent)\n ops.push({ start: level.start, end: lines[line]!.end, text: \" \".repeat(indent) });\n break;\n }\n if (level.kind !== \"content\") break;\n if (level.node.type !== \"listItem\") continue;\n const item = analysis.items.get(level.node)!;\n const change = delta.get(item) ?? 0;\n if (!change || line === item.first) continue;\n if (mode === \"start\")\n ops.push(\n change > 0\n ? { start: level.start, end: level.start, text: \" \".repeat(change) }\n : { start: level.start, end: level.start - change, text: \"\" },\n );\n else if (change > 0) ops.push({ start: level.end, end: level.end, text: \" \".repeat(change) });\n else ops.push({ start: level.end + change, end: level.end, text: \"\" });\n }\n }\n return ops;\n}\n/**\n * One finding for a unit's changes, with the edit that makes all of them and\n * the message of the first change that has one.\n */\nfunction unitFinding(source: string, ops: Op[]): Finding | undefined {\n if (!ops.length) return undefined;\n ops.sort((a, b) => a.start - b.start || a.end - b.end);\n for (let index = 1; index < ops.length; index++)\n if (ops[index]!.start < ops[index - 1]!.end) return undefined;\n const start = ops[0]!.start;\n const end = ops.at(-1)!.end;\n let text = \"\";\n let cursor = start;\n for (const op of ops) {\n text += source.slice(cursor, op.start) + op.text;\n cursor = op.end;\n }\n text += source.slice(cursor, end);\n const message = ops.find((op) => op.message)?.message ?? \"Format the list.\";\n return { start, end, message, edit: { start, end, text } };\n}\n\nconst bullets = [\"-\", \"*\", \"+\"] as const;\n/** The marker after `marker` in the order `-`, `*`, `+`. */\nconst nextBullet = (marker: string) => bullets[(bullets.indexOf(marker as \"-\") + 1) % 3]!;\n/** A line that reads as a thematic break. */\nconst thematicBreak = /^([-*_])(?:[ \\t]*\\1){2,}[ \\t]*$/;\n\n/** The number of bullet lists that a list is nested in. */\nfunction bulletDepth(analysis: Analysis, list: ListGroup): number {\n let depth = 0;\n for (let node = list.parent; node; node = analysis.containers.get(node)?.parent)\n if (node.type === \"listItem\" && !analysis.items.get(node)?.list.node.ordered) depth++;\n return depth;\n}\n/**\n * The marker that each bullet list of a document gets before lists that\n * follow one another alternate: the configured one, the first list's with\n * `consistent`, or with `sublist` the first list's at each depth, unless the\n * depth above has that marker, in which case the next one.\n */\nfunction bulletMarkers(analysis: Analysis, marker: string): (list: ListGroup) => string {\n if (marker !== \"consistent\" && marker !== \"sublist\") return () => marker;\n const { source } = analysis;\n const lists = analysis.units.flatMap((unit) =>\n unit.lists.filter(\n (list) => !list.node.ordered && bullets.includes(source[list.items[0]?.marker ?? -1] as \"-\"),\n ),\n );\n const written = (list: ListGroup) => source[list.items[0]!.marker]!;\n if (marker === \"consistent\") {\n const first = lists[0] ? written(lists[0]) : \"-\";\n return () => first;\n }\n const byDepth: string[] = [];\n const depths = new Map(lists.map((list) => [list, bulletDepth(analysis, list)]));\n for (const list of lists) {\n const depth = depths.get(list)!;\n // The lists that a list is nested in come before it.\n if (byDepth[depth] !== undefined) continue;\n const own = written(list);\n byDepth[depth] = depth && own === byDepth[depth - 1] ? nextBullet(own) : own;\n }\n return (list) => byDepth[depths.get(list) ?? 0] ?? \"-\";\n}\n\nconst listMarker: Rule = {\n description: \"Use one bullet list marker, and the next one for a list that follows another.\",\n kind: \"style\",\n phase: \"block\",\n schema: optionsSchema({ marker: { enum: [...bullets, \"consistent\", \"sublist\"] } }),\n check({ document, options }) {\n const analysis = analyze(document);\n const { source, lines } = analysis;\n const base = bulletMarkers(analysis, String(options.marker ?? \"-\"));\n const findings: Finding[] = [];\n for (const unit of analysis.units) {\n if (!unit.valid) continue;\n const target = new Map<Item, string>();\n const runOf = new Map<Item, ListGroup[]>();\n for (const run of unit.runs) {\n if (run[0]!.node.ordered) continue;\n const preferred = base(run[0]!);\n run.forEach((list, index) => {\n for (const item of list.items) {\n target.set(item, index % 2 ? nextBullet(preferred) : preferred);\n runOf.set(item, run);\n }\n });\n }\n // A run keeps its markers where a new one would turn a line into a\n // thematic break, also together with the markers of lists nested on it.\n const kept = new Set<ListGroup[]>();\n const byLine = new Map<number, Item[]>();\n for (const item of target.keys())\n byLine.set(item.first, [...(byLine.get(item.first) ?? []), item]);\n for (let changed = true; changed;) {\n changed = false;\n for (const [line, onLine] of byLine) {\n const marked = (item: Item) =>\n kept.has(runOf.get(item)!) ? source[item.marker]! : target.get(item)!;\n if (onLine.every((item) => marked(item) === source[item.marker])) continue;\n const { start, end } = lines[line]!;\n let text = source.slice(start, end);\n for (const item of onLine)\n text =\n text.slice(0, item.marker - start) +\n marked(item) +\n text.slice(item.marker - start + 1);\n if (onLine.some((item) => thematicBreak.test(text.slice(item.marker - start)))) {\n for (const item of onLine)\n if (marked(item) !== source[item.marker]) kept.add(runOf.get(item)!);\n changed = true;\n }\n }\n }\n const ops: Op[] = [];\n for (const [item, marker] of target)\n if (!kept.has(runOf.get(item)!) && source[item.marker] !== marker)\n ops.push({\n start: item.marker,\n end: item.marker + 1,\n text: marker,\n message: `Use ${JSON.stringify(marker)} as the bullet list marker.`,\n });\n const finding = unitFinding(source, ops);\n if (finding) findings.push(finding);\n }\n return findings;\n },\n};\n\n/** The numbers that `numbering` gives a list's items, or undefined to keep them. */\nfunction renumbered(digits: string[], numbering: string): string[] | undefined {\n if (digits.length < 2 || digits.some((value) => value.length > 1 && value.startsWith(\"0\")))\n return undefined;\n const first = Number(digits[0]);\n const same = numbering === \"same\" || (numbering !== \"ordered\" && Number(digits[1]) === first);\n const numbers = digits.map((value, index) =>\n index === 0 ? first : same ? first : first + index,\n );\n if (numbers.some((value) => value > 999_999_999)) return undefined;\n return numbers.map((value, index) => (index === 0 ? digits[0]! : String(value)));\n}\n\nconst orderedList: Rule = {\n description: \"Use one delimiter after list numbers, and number list items consistently.\",\n kind: \"style\",\n phase: \"block\",\n schema: optionsSchema({\n delimiter: { enum: [\".\", \")\", \"consistent\"] },\n numbering: { enum: [\"auto\", \"ordered\", \"same\"] },\n }),\n check({ document, options }) {\n const analysis = analyze(document);\n const { source } = analysis;\n let preferred = String(options.delimiter ?? \".\");\n if (preferred === \"consistent\") {\n // The delimiter of the document's first ordered list.\n const first = analysis.units\n .flatMap((unit) => unit.lists)\n .find((list) => list.node.ordered && list.items.length);\n preferred = source[(first?.items[0]?.markerEnd ?? 0) - 1] === \")\" ? \")\" : \".\";\n }\n const other = preferred === \".\" ? \")\" : \".\";\n const numbering = String(options.numbering ?? \"auto\");\n const findings: Finding[] = [];\n for (const unit of analysis.units) {\n if (!unit.valid) continue;\n const delimiter = new Map<ListGroup, string>();\n for (const run of unit.runs)\n if (run[0]!.node.ordered)\n run.forEach((list, index) => delimiter.set(list, index % 2 ? other : preferred));\n const ops: Op[] = [];\n const delta = new Map<Item, number>();\n for (const list of unit.lists) {\n if (!list.node.ordered) continue;\n const digits = list.items.map((item) => item.digits);\n let numbers = renumbered(digits, numbering) ?? digits;\n const changes = new Map<Item, number>();\n for (const item of list.items) {\n const change = numbers[item.index]!.length - item.digits.length;\n if (change) changes.set(item, change);\n }\n const minimum = (item: Item) => numbers[item.index]!.length + 2;\n if (changes.size) {\n // The marker line's content moves with the number; a tab after it\n // would change its width instead.\n const readable = [...changes.keys()].every(\n (item) => !structuralTab(source, item.markerEnd, analysis.lines[item.first]!.end),\n );\n if (!readable || !feasible(analysis, list, changes, \"end\", minimum, \"stay\")) {\n numbers = digits;\n changes.clear();\n }\n }\n for (const [item, change] of changes) delta.set(item, change);\n const mark = delimiter.get(list) ?? preferred;\n for (const item of list.items) {\n const text = numbers[item.index]! + mark;\n if (source.slice(item.marker, item.markerEnd) === text) continue;\n ops.push({\n start: item.marker,\n end: item.markerEnd,\n text,\n message:\n source[item.markerEnd - 1] !== mark\n ? `Use ${JSON.stringify(mark)} after list item numbers.`\n : `Number this list item ${numbers[item.index]}.`,\n });\n }\n }\n for (const op of shiftOps(analysis, unit, delta, \"end\")) ops.push(op);\n const finding = unitFinding(source, ops);\n if (finding) findings.push(finding);\n }\n return findings;\n },\n};\n\n/** The columns from an item's marker to its text. */\nconst reachOf = (item: Item, spacing = item.spacing) =>\n item.markerEnd - item.marker + (item.blankFirst || item.spacing >= 5 ? 1 : spacing);\nconst spaces = { type: \"integer\", minimum: 1, maximum: 4 };\n\nconst listIndent: Rule = {\n description: \"Indent list items consistently, with the configured spaces after the marker.\",\n kind: \"style\",\n phase: \"block\",\n schema: optionsSchema({\n bulletSpaces: spaces,\n orderedSpaces: spaces,\n bulletSpacesMultiline: spaces,\n orderedSpacesMultiline: spaces,\n nestedIndent: { type: \"integer\", minimum: 1, maximum: 8 },\n }),\n check({ document, options }) {\n const analysis = analyze(document);\n const { source, lines } = analysis;\n const bullet = Number(options.bulletSpaces ?? 1);\n const ordered = Number(options.orderedSpaces ?? 1);\n const spacing = {\n bullet: [bullet, Number(options.bulletSpacesMultiline ?? bullet)],\n ordered: [ordered, Number(options.orderedSpacesMultiline ?? ordered)],\n };\n const nested = options.nestedIndent === undefined ? undefined : Number(options.nestedIndent);\n const findings: Finding[] = [];\n for (const unit of analysis.units) {\n if (!unit.valid) continue;\n const ops: Op[] = [];\n const delta = new Map<Item, number>();\n // The columns from each item's marker to its text once the rule is done,\n // and the fewest columns that its lines can need then.\n const reach = new Map<Item, number>();\n const lowest = new Map<Item, number>();\n for (const list of unit.lists) {\n for (const item of list.items) analysis.match(item.first);\n // As in markdownlint, a list whose items each take one line, with no\n // blank line between them, gets the spacing for single lines.\n const single = list.items.every(\n (item, index) =>\n item.first === item.last && (!index || item.first === list.items[index - 1]!.last + 1),\n );\n const wanted = spacing[list.node.ordered ? \"ordered\" : \"bullet\"][single ? 0 : 1]!;\n const holder =\n list.parent?.type === \"listItem\" ? analysis.items.get(list.parent) : undefined;\n // A nested list starts under its item's text, or as many columns from\n // the item's marker as configured, where CommonMark lets it start. On\n // the item's own marker line, columns before the nested marker would\n // be the item's spacing, so a list that starts there stays. A first\n // line that the last item of the list before it would continue would\n // join that item.\n const before = list.previous?.items.at(-1);\n const indent =\n nested !== undefined && holder && list.items[0]?.first !== holder.first\n ? Math.max(\n 0,\n Math.min(\n 3,\n nested - (reach.get(holder) ?? reachOf(holder)),\n (before ? (lowest.get(before) ?? 0) : Infinity) - 1,\n ),\n )\n : 0;\n const marks: Op[] = [];\n const changes = new Map<Item, number>();\n let possible = true;\n for (const item of list.items) {\n if (item.width === undefined || item.start === undefined) {\n possible = false;\n break;\n }\n const offset = item.offset!;\n // The spacing stays where the item starts with indented code, which\n // depends on it, or with a blank line, which has none.\n const keep = item.blankFirst || item.spacing >= 5;\n const target = keep ? item.spacing : wanted;\n if (offset === indent && target === item.spacing) continue;\n const lineEnd = lines[item.first]!.end;\n if (\n (offset !== indent && !onlySpaces(source, item.start, item.marker)) ||\n (target !== item.spacing && !onlySpaces(source, item.markerEnd, item.spaceEnd)) ||\n structuralTab(source, item.start, lineEnd)\n ) {\n possible = false;\n break;\n }\n const count = (value: number) => (value === 1 ? \"one space\" : `${value} spaces`);\n if (offset !== indent)\n marks.push({\n start: item.start,\n end: item.marker,\n text: \" \".repeat(indent),\n message: indent\n ? `Indent the list marker by ${count(indent)}.`\n : \"Remove the indentation before the list marker.\",\n });\n if (target !== item.spacing)\n marks.push({\n start: item.markerEnd,\n end: item.spaceEnd,\n text: \" \".repeat(target),\n message: `Put ${count(target)} after the list marker.`,\n });\n const change = indent - offset + (keep ? 0 : target - item.spacing);\n if (change) changes.set(item, change);\n }\n const minimum = (item: Item) =>\n indent +\n (!list.node.ordered ? 1 : item.index ? 2 : item.digits.length + 1) +\n (item.blankFirst || item.spacing >= 5 ? 1 : wanted);\n const accepted =\n possible &&\n marks.length > 0 &&\n feasible(analysis, list, changes, \"start\", minimum, \"move\");\n for (const item of list.items) {\n reach.set(item, accepted ? reachOf(item, wanted) : reachOf(item));\n const narrowest =\n (!list.node.ordered ? 1 : item.index ? 2 : item.digits.length + 1) +\n (item.blankFirst || item.spacing >= 5 ? 1 : accepted ? wanted : item.spacing);\n lowest.set(item, (accepted ? indent : (item.offset ?? 0)) + narrowest);\n }\n if (!accepted) continue;\n for (const op of marks) ops.push(op);\n for (const [item, change] of changes) delta.set(item, change);\n }\n for (const op of shiftOps(analysis, unit, delta, \"start\")) ops.push(op);\n const finding = unitFinding(source, ops);\n if (finding) findings.push(finding);\n }\n return findings;\n },\n};\n\nexport const listRules: Record<string, Rule> = {\n \"style/list-indent\": listIndent,\n \"style/list-marker\": listMarker,\n \"style/ordered-list\": orderedList,\n};\n"]}
1
+ {"version":3,"file":"lists.js","sourceRoot":"","sources":["../../src/rules/lists.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Blockquote, FootnoteDefinition, List, ListItem, Nodes, Parents } from \"mdast\";\nimport type { Document, Finding, Rule } from \"../core/types.js\";\nimport { misreadLists } from \"../syntax/misread-lists.js\";\nimport { joinsTomlFrontMatter } from \"../syntax/parse.js\";\nimport { optionsSchema } from \"./style.js\";\n\n/**\n * The list rules edit the markers of list items and the indentation that the\n * items' lines need. Each rule proposes one edit for each group of adjacent\n * lists outside other lists, which holds all its changes there, nested lists\n * included, so that an engine that applies some edits and holds others back\n * never applies half of a list's changes: a marker moved without its item's\n * lines would move the item's content.\n *\n * A list item's lines need as many columns of indentation as its marker,\n * the marker's indentation, and the space after it take up, counted from\n * where its container's part of the line starts. Lines with less are lazy\n * continuations of a paragraph. Changing those columns moves the item's\n * lines with them, and where that would change what a line belongs to, the\n * rule leaves the list as written.\n */\n\ntype Container = Blockquote | ListItem | FootnoteDefinition;\n\n/** A physical line of the source, without its line break. */\ninterface Line {\n start: number;\n end: number;\n}\n\ninterface Item {\n node: ListItem;\n list: ListGroup;\n index: number;\n /** The line indexes of the marker and of the item's last line. */\n first: number;\n last: number;\n marker: number;\n markerEnd: number;\n /** The number of an ordered item as written. */\n digits: string;\n /** The end of the whitespace after the marker. */\n spaceEnd: number;\n markerColumn: number;\n markerEndColumn: number;\n /** The columns of whitespace after the marker. */\n spacing: number;\n /** Whether nothing but whitespace follows the marker on its line. */\n blankFirst: boolean;\n /**\n * Where the item's part of its marker line starts, after the prefixes of\n * its containers, the columns of indentation before the marker, and the\n * columns that the item's other lines need from there. Undefined when the\n * marker line cannot be read exactly, such as when a tab spans a\n * container's prefix.\n */\n start?: number;\n offset?: number;\n width?: number;\n}\ninterface ListGroup {\n node: List;\n items: Item[];\n /** The nearest block quote, list item, or footnote definition around it. */\n parent: Container | undefined;\n /** The list directly before it, which its first line could continue. */\n previous: ListGroup | undefined;\n}\n/** Adjacent lists outside other lists, with the lists nested in them. */\ninterface Unit {\n lists: ListGroup[];\n /** Runs of adjacent sibling lists of one kind, in the unit and nested in it. */\n runs: ListGroup[][];\n valid: boolean;\n}\ninterface ContainerInfo {\n parent: Container | undefined;\n first: number;\n last: number;\n}\n/**\n * How one line passes through one of its containers. `content`: the line\n * continues inside the container from `end`. `blank`: only whitespace\n * follows `start`. `lazy`: the line lacks the container's prefix and\n * continues a paragraph. `unsupported`: a tab spans the prefix's end, or the\n * source does not have the expected shape.\n */\ninterface Level {\n node: Container;\n kind: \"content\" | \"blank\" | \"lazy\" | \"unsupported\";\n start: number;\n startColumn: number;\n end: number;\n endColumn: number;\n /** The columns of whitespace after `start`, for blank and lazy lines. */\n indent: number;\n}\ninterface Matched {\n chain: Container[];\n levels: Level[];\n}\ninterface Analysis {\n source: string;\n lines: Line[];\n units: Unit[];\n items: Map<ListItem, Item>;\n containers: Map<Container, ContainerInfo>;\n /** Later lines of inline code, math, and other inline nodes that keep their whitespace. */\n sensitive: Set<number>;\n match(line: number): Matched;\n}\ninterface Op {\n start: number;\n end: number;\n text: string;\n /** What the change does, for the finding when it is the first one. */\n message?: string;\n}\n\nconst tabStop = (column: number) => column + 4 - (column % 4);\nconst isSpace = (character: string | undefined) => character === \" \" || character === \"\\t\";\n/** The column reached from `column` at `from` after the characters up to `to`. */\nfunction columnAt(source: string, from: number, to: number, column: number): number {\n for (let at = from; at < to; at++) column = source[at] === \"\\t\" ? tabStop(column) : column + 1;\n return column;\n}\nfunction splitLines(source: string): Line[] {\n const lines: Line[] = [];\n let start = 0;\n for (const match of source.matchAll(/\\r\\n|\\r|\\n/g)) {\n lines.push({ start, end: match.index });\n start = match.index + match[0].length;\n }\n lines.push({ start, end: source.length });\n return lines;\n}\nconst located = (node: Nodes) =>\n node.position?.start.offset !== undefined && node.position.end.offset !== undefined;\nconst isContainer = (node: Nodes): node is Container =>\n node.type === \"blockquote\" || node.type === \"listItem\" || node.type === \"footnoteDefinition\";\n\nconst analyses = new WeakMap<Document, Analysis>();\n/** The lists of a document and the means to read their lines, shared by the list rules. */\nfunction analyze(document: Document): Analysis {\n const known = analyses.get(document);\n if (known) return known;\n const { source } = document;\n const lines = splitLines(source);\n const units: Unit[] = [];\n const items = new Map<ListItem, Item>();\n const containers = new Map<Container, ContainerInfo>();\n const sensitive = new Set<number>();\n /** The innermost container of each line, by line index. */\n const innermost: (Container | undefined)[] = [];\n\n // Renderers may read a list where the parser read text that starts with a\n // list marker, the blocks indented below it inside that list's last item,\n // and the block after those as more of its items (issue #191). Another\n // marker or indentation could move a list among them into or out of that\n // item, or join it to that list, so its group of lists stays as written.\n const misread = misreadLists(document);\n\n const visit = (node: Parents, parent: Container | undefined, unit: Unit | undefined) => {\n const children = node.children as Nodes[];\n let group: Unit | undefined;\n let run: ListGroup[] | undefined;\n let before: ListGroup | undefined;\n for (let index = 0; index < children.length; index++) {\n const child = children[index]!;\n if (!located(child)) {\n if (unit) unit.valid = false;\n continue;\n }\n const firstLine = child.position!.start.line - 1;\n let lastLine = child.position!.end.line - 1;\n // A list item in a footnote definition can end past the next item's\n // start; a block ends before the next one starts.\n const next = children[index + 1];\n if (next && located(next)) lastLine = Math.min(lastLine, next.position!.start.line - 2);\n if (parent) lastLine = Math.min(lastLine, containers.get(parent)!.last);\n if (child.type === \"list\") {\n let target = unit;\n if (!target) {\n if (children[index - 1]?.type !== \"list\" || !group) {\n group = { lists: [], runs: [], valid: true };\n units.push(group);\n }\n target = group;\n }\n if (misread.nested.has(child) || misread.next.has(child)) target.valid = false;\n const previous = children[index - 1];\n if (!run || previous?.type !== \"list\" || previous.ordered !== child.ordered) {\n run = [];\n target.runs.push(run);\n }\n const list: ListGroup = {\n node: child,\n items: [],\n parent,\n previous: children[index - 1]?.type === \"list\" ? before : undefined,\n };\n before = list;\n run.push(list);\n target.lists.push(list);\n for (const [position, entry] of child.children.entries()) {\n const item = readItem(entry, list, position, target);\n if (item) list.items.push(item);\n }\n visit(child, parent, target);\n continue;\n }\n run = undefined;\n if (isContainer(child)) {\n containers.set(child, { parent, first: firstLine, last: Math.max(firstLine, lastLine) });\n for (let line = firstLine; line <= lastLine; line++) innermost[line] = child;\n visit(child, child, unit);\n continue;\n }\n // Code and other blocks that hold text as written have no inline nodes.\n if (unit && !(\"value\" in child)) collectInline(child, unit);\n }\n };\n /**\n * The later lines of nodes that keep the whitespace at the start of their\n * lines, such as code spans, math, and titles, and nodes without positions.\n */\n const collectInline = (node: Nodes, unit: Unit) => {\n if (!located(node)) {\n unit.valid = false;\n return;\n }\n const keeps =\n node.type === \"definition\" ||\n (\"title\" in node && typeof node.title === \"string\") ||\n (\"value\" in node &&\n typeof node.value === \"string\" &&\n node.type !== \"text\" &&\n node.type !== \"html\");\n if (keeps)\n for (let line = node.position!.start.line; line < node.position!.end.line; line++)\n sensitive.add(line);\n if (\"children\" in node)\n for (const child of node.children as Nodes[]) collectInline(child, unit);\n };\n const readItem = (\n node: ListItem,\n list: ListGroup,\n index: number,\n unit: Unit,\n ): Item | undefined => {\n if (!located(node)) {\n unit.valid = false;\n return undefined;\n }\n const marker = node.position!.start.offset!;\n const first = node.position!.start.line - 1;\n const line = lines[first]!;\n let markerEnd = marker;\n let digits = \"\";\n if (list.node.ordered) {\n digits = /^\\d{1,9}/.exec(source.slice(marker, marker + 10))?.[0] ?? \"\";\n markerEnd = marker + digits.length;\n if (!digits || (source[markerEnd] !== \".\" && source[markerEnd] !== \")\")) unit.valid = false;\n markerEnd++;\n } else {\n if (!\"-+*\".includes(source[marker] ?? \"_\")) unit.valid = false;\n markerEnd++;\n }\n let spaceEnd = markerEnd;\n while (spaceEnd < line.end && isSpace(source[spaceEnd])) spaceEnd++;\n const markerColumn = columnAt(source, line.start, marker, 0);\n const markerEndColumn = markerColumn + markerEnd - marker;\n const item: Item = {\n node,\n list,\n index,\n first,\n last: first,\n marker,\n markerEnd,\n digits,\n spaceEnd,\n markerColumn,\n markerEndColumn,\n spacing: columnAt(source, markerEnd, spaceEnd, markerEndColumn) - markerEndColumn,\n blankFirst: spaceEnd === line.end,\n };\n items.set(node, item);\n return item;\n };\n visit(document.tree, undefined, undefined);\n // Renderers without TOML front matter read its lines as a paragraph, which\n // a list directly below continues where it cannot interrupt one: a numbered\n // list that does not start at 1, or one whose first item starts with a blank\n // line (issue #333).\n const below = units[0]?.lists[0];\n if (below && joinsTomlFrontMatter(document.tree, below.node)) units[0]!.valid = false;\n for (const item of items.values()) item.last = containers.get(item.node)?.last ?? item.first;\n for (const unit of units)\n for (const list of unit.lists)\n for (const item of list.items)\n if (item.last < item.first || (list.items[item.index + 1]?.first ?? Infinity) <= item.last)\n unit.valid = false;\n\n const enclosing = (line: number) => {\n const chain: Container[] = [];\n for (let node = innermost[line]; node; node = containers.get(node)?.parent) chain.unshift(node);\n return chain;\n };\n const chains = new Map<number, Container[]>();\n /** A line with nothing but whitespace and `>`, which starts no container. */\n const blank = (line: number) => {\n const { start, end } = lines[line]!;\n const node = innermost[line];\n return (\n (!node || containers.get(node)!.first !== line) && /^[ \\t>]*$/.test(source.slice(start, end))\n );\n };\n /**\n * The containers that a line passes through. A blank line belongs to every\n * container that the line before it is in, until a later line closes them,\n * though the tree ends a container at its last line with content: in a list\n * item that ends with indented code, a blank line's spaces beyond the code's\n * indentation become part of the code.\n */\n const open = (line: number): Container[] => {\n let from = line;\n while (from > 0 && !chains.has(from) && !chains.has(from - 1) && blank(from)) from--;\n for (let at = from; at <= line; at++) {\n if (chains.has(at)) continue;\n let chain = enclosing(at);\n const before = at > 0 && blank(at) ? chains.get(at - 1) : undefined;\n if (before && chain.every((node, index) => before[index] === node)) chain = before;\n chains.set(at, chain);\n }\n return chains.get(line)!;\n };\n const memo = new Map<number, Matched>();\n const match = (line: number): Matched => {\n const known = memo.get(line);\n if (known) return known;\n const chain = open(line);\n const levels: Level[] = [];\n const result = { chain, levels };\n memo.set(line, result);\n let at = lines[line]!.start;\n let column = 0;\n for (const node of chain) {\n const level = matchLevel(node, line, at, column);\n levels.push(level);\n if (level.kind !== \"content\") break;\n at = level.end;\n column = level.endColumn;\n }\n return result;\n };\n /** How `line`, from `start` at `column`, passes through the prefix of `node`. */\n const matchLevel = (node: Container, line: number, start: number, column: number): Level => {\n const { end: lineEnd } = lines[line]!;\n const level: Level = {\n node,\n kind: \"unsupported\",\n start,\n startColumn: column,\n end: start,\n endColumn: column,\n indent: 0,\n };\n const info = containers.get(node)!;\n if (node.type === \"listItem\") {\n const item = items.get(node);\n if (!item) return level;\n if (line === item.first) {\n if (!/^[ \\t]*$/.test(source.slice(start, item.marker))) return level;\n const offset = item.markerColumn - column;\n if (offset > 3) return level;\n const content =\n item.blankFirst || item.spacing >= 5\n ? item.markerEndColumn + 1\n : item.markerEndColumn + item.spacing;\n item.start = start;\n item.offset = offset;\n item.width = content - column;\n if (item.blankFirst) return { ...level, kind: \"content\", end: lineEnd, endColumn: content };\n if (item.spacing >= 5) {\n // A tab right after the marker gives one of its columns to the marker.\n if (source[item.markerEnd] !== \" \") return level;\n return { ...level, kind: \"content\", end: item.markerEnd + 1, endColumn: content };\n }\n return { ...level, kind: \"content\", end: item.spaceEnd, endColumn: content };\n }\n if (item.width === undefined) match(item.first);\n if (item.width === undefined) return level;\n return indented(level, item.width, lineEnd);\n }\n if (node.type === \"blockquote\") {\n let at = start;\n let reached = column;\n if (line === info.first) at = node.position!.start.offset!;\n else\n while (at < lineEnd && isSpace(source[at])) {\n const next = source[at] === \"\\t\" ? tabStop(reached) : reached + 1;\n if (next - column > 3) break;\n reached = next;\n at++;\n }\n if (source[at] !== \">\" || !/^[ \\t]*$/.test(source.slice(start, at)))\n return /^[ \\t]*$/.test(source.slice(start, lineEnd))\n ? { ...level, kind: \"blank\", indent: columnAt(source, start, lineEnd, column) - column }\n : line === info.first\n ? level\n : { ...level, kind: \"lazy\", indent: columnAt(source, start, at, column) - column };\n reached = columnAt(source, start, at, column) + 1;\n at++;\n if (source[at] === \"\\t\") return level;\n if (source[at] === \" \") {\n at++;\n reached++;\n }\n return { ...level, kind: \"content\", end: at, endColumn: reached };\n }\n // A footnote definition: its first line's content starts with its first\n // block, and its other lines need four columns.\n if (line === info.first) {\n const child = node.children[0];\n const end =\n child && located(child) && child.position!.start.line - 1 === line\n ? child.position!.start.offset!\n : lineEnd;\n return {\n ...level,\n kind: \"content\",\n end,\n endColumn: columnAt(source, start, end, column),\n };\n }\n return indented(level, 4, lineEnd);\n };\n /** A line that needs `width` columns of indentation to continue a container. */\n const indented = (level: Level, width: number, lineEnd: number): Level => {\n let at = level.start;\n let column = level.startColumn;\n if (/^[ \\t]*$/.test(source.slice(at, lineEnd)))\n return {\n ...level,\n kind: \"blank\",\n indent: columnAt(source, at, lineEnd, column) - column,\n };\n while (column - level.startColumn < width && isSpace(source[at])) {\n const next = source[at] === \"\\t\" ? tabStop(column) : column + 1;\n if (next - level.startColumn > width) return level;\n column = next;\n at++;\n }\n if (column - level.startColumn < width)\n return { ...level, kind: \"lazy\", indent: column - level.startColumn };\n return { ...level, kind: \"content\", end: at, endColumn: column };\n };\n const analysis = { source, lines, units, items, containers, sensitive, match };\n analyses.set(document, analysis);\n return analysis;\n}\n\n/** A tab among the whitespace and container markers that start the rest of a line. */\nfunction structuralTab(source: string, from: number, to: number): boolean {\n const prefix = /^(?:[ \\t>]|(?:[-+*]|\\d{1,9}[.)])(?=[ \\t]|$))*/.exec(source.slice(from, to))![0];\n return prefix.includes(\"\\t\");\n}\nconst onlySpaces = (source: string, from: number, to: number) =>\n from <= to && /^ *$/.test(source.slice(from, to));\n/**\n * Whether a lazy line can join its item: once the item needs fewer columns,\n * the line may have enough and continue the item's paragraph from inside it.\n * Text that starts with a letter, or a number that is no list marker, does\n * that; anything else could start a block there, and inline code or math\n * would keep the indentation that the line no longer has.\n */\nfunction lazySafe(analysis: Analysis, line: number, level: Level): boolean {\n const { source, lines } = analysis;\n const text = source.slice(level.start, lines[line]!.end).trimStart();\n return (\n !analysis.sensitive.has(line) &&\n !text.includes(\"|\") &&\n /^(?:\\p{L}|[0-9]+(?![.)0-9]))/u.test(text)\n );\n}\n/**\n * Whether the item's column changes are possible without moving content: an\n * item's lines must be read exactly, and none of the lines around it may\n * start or stop belonging to it. `delta` gives the change of each item's\n * column, `minimum` the fewest columns that an item can need once the list\n * rules are done, and `siblings` says whether the other items of the list\n * move to the start of their container's part of the line too.\n */\nfunction feasible(\n analysis: Analysis,\n list: ListGroup,\n delta: Map<Item, number>,\n mode: \"start\" | \"end\",\n minimum: (item: Item) => number,\n siblings: \"move\" | \"stay\",\n): boolean {\n const { source, lines } = analysis;\n for (const item of list.items) analysis.match(item.first);\n for (const item of list.items) {\n const change = delta.get(item) ?? 0;\n if (!change) continue;\n if (item.width === undefined) return false;\n for (const line of linesWithBlanks(analysis, item.first + 1, item.last)) {\n const { chain, levels } = analysis.match(line);\n const at = chain.indexOf(item.node);\n if (at < 0) {\n if (line > item.last) continue;\n return false;\n }\n const level = levels[at];\n if (!level) {\n const last = levels.at(-1);\n if (!last || last.kind === \"unsupported\") return false;\n if (last.kind === \"blank\" && !blankFeasible(analysis, line, chain, levels.length - 1))\n return false;\n continue;\n }\n if (level.kind === \"unsupported\") return false;\n if (level.kind === \"blank\") {\n if (!blankFeasible(analysis, line, chain, at)) return false;\n continue;\n }\n if (level.kind === \"lazy\") {\n if (change < 0 && level.indent >= minimum(item) && !lazySafe(analysis, line, level))\n return false;\n continue;\n }\n const lineEnd = lines[line]!.end;\n if (mode === \"start\") {\n if (change < 0 && !onlySpaces(source, level.start, level.start - change)) return false;\n if (structuralTab(source, level.start, lineEnd)) return false;\n } else {\n if (change < 0 && !onlySpaces(source, level.end + change, level.end)) return false;\n if (structuralTab(source, level.end + Math.min(0, change), lineEnd)) return false;\n }\n }\n if (change < 0 && !captureFree(analysis, item, change, minimum, siblings)) return false;\n }\n return true;\n}\n/**\n * The items and footnote definitions whose prefixes a blank line's\n * whitespace stands for, from the level where the line is blank down to the\n * deepest container still open there; a block quote that the line has no `>`\n * for ends there. Undefined when an item's columns are not known.\n */\nfunction blankPath(analysis: Analysis, chain: Container[], from: number) {\n const path: (Item | undefined)[] = [];\n let width = 0;\n for (const node of chain.slice(from)) {\n if (node.type === \"blockquote\") break;\n if (node.type === \"footnoteDefinition\") {\n path.push(undefined);\n width += 4;\n continue;\n }\n const item = analysis.items.get(node);\n if (item?.width === undefined) return undefined;\n path.push(item);\n width += item.width;\n }\n return { items: path, width };\n}\n/** Whether a blank line can keep its whitespace beyond its containers' prefixes. */\nfunction blankFeasible(analysis: Analysis, line: number, chain: Container[], from: number) {\n const path = blankPath(analysis, chain, from);\n if (!path) return false;\n const level = analysis.match(line).levels[from]!;\n return (\n !path.items.length ||\n !analysis.source.slice(level.start, analysis.lines[line]!.end).includes(\"\\t\")\n );\n}\n/** The line indexes from `first` to `last`, and the blank lines after them. */\nfunction* linesWithBlanks(analysis: Analysis, first: number, last: number) {\n const { source, lines } = analysis;\n for (let line = first; line <= last; line++) yield line;\n for (let line = last + 1; line < lines.length; line++) {\n if (!/^[ \\t>]*$/.test(source.slice(lines[line]!.start, lines[line]!.end))) break;\n yield line;\n }\n}\n/**\n * Whether the line after an item that needs fewer columns stays out of it:\n * the next item of its list, unless that moves too, or the first line after\n * the item that its container continues with.\n */\nfunction captureFree(\n analysis: Analysis,\n item: Item,\n change: number,\n minimum: (item: Item) => number,\n siblings: \"move\" | \"stay\",\n): boolean {\n const { source, lines } = analysis;\n const next = item.list.items[item.index + 1];\n if (next) {\n if (siblings === \"move\") return true;\n return next.offset !== undefined && next.offset < item.width! + change;\n }\n const { parent } = item.list;\n const last = parent ? analysis.containers.get(parent)!.last : lines.length - 1;\n for (let line = item.last + 1; line <= last; line++) {\n let start = lines[line]!.start;\n let column = 0;\n if (parent) {\n const { chain, levels } = analysis.match(line);\n const at = chain.indexOf(parent);\n if (at < 0) return false;\n const level = levels[at];\n const reached = level ?? levels.at(-1);\n if (!reached || reached.kind === \"unsupported\") return false;\n if (reached.kind === \"blank\") continue;\n if (!level || level.kind === \"lazy\") return true;\n start = level.end;\n column = level.endColumn;\n }\n const text = source.slice(start, lines[line]!.end);\n if (/^[ \\t]*$/.test(text)) continue;\n const indent = /^[ \\t]*/.exec(text)![0];\n return columnAt(source, start, start + indent.length, column) - column < minimum(item);\n }\n return true;\n}\n/**\n * The changes to the lines of items whose columns change by `delta`: the\n * columns are removed or added at the start of each item's part of a line,\n * or at its end, where its content starts. A blank line in code keeps the\n * whitespace that the code holds there.\n */\nfunction shiftOps(\n analysis: Analysis,\n unit: Unit,\n delta: Map<Item, number>,\n mode: \"start\" | \"end\",\n): Op[] {\n const ops: Op[] = [];\n if (![...delta.values()].some(Boolean)) return ops;\n const { lines } = analysis;\n let firstLine = Infinity;\n let lastLine = -1;\n for (const { items } of unit.lists) {\n firstLine = Math.min(firstLine, items[0]?.first ?? Infinity);\n lastLine = Math.max(lastLine, items.at(-1)?.last ?? -1);\n }\n for (const line of linesWithBlanks(analysis, firstLine, lastLine)) {\n const { chain, levels } = analysis.match(line);\n for (const [at, level] of levels.entries()) {\n if (level.kind === \"blank\") {\n // The whitespace beyond the prefixes of the containers still open\n // stays: in code, it is part of the code.\n const path = blankPath(analysis, chain, at);\n if (!path) break;\n const change = path.items.reduce((sum, item) => sum + ((item && delta.get(item)) ?? 0), 0);\n const indent =\n level.indent >= path.width\n ? level.indent + change\n : Math.min(level.indent, path.width + change);\n if (change && indent !== level.indent)\n ops.push({ start: level.start, end: lines[line]!.end, text: \" \".repeat(indent) });\n break;\n }\n if (level.kind !== \"content\") break;\n if (level.node.type !== \"listItem\") continue;\n const item = analysis.items.get(level.node)!;\n const change = delta.get(item) ?? 0;\n if (!change || line === item.first) continue;\n if (mode === \"start\")\n ops.push(\n change > 0\n ? { start: level.start, end: level.start, text: \" \".repeat(change) }\n : { start: level.start, end: level.start - change, text: \"\" },\n );\n else if (change > 0) ops.push({ start: level.end, end: level.end, text: \" \".repeat(change) });\n else ops.push({ start: level.end + change, end: level.end, text: \"\" });\n }\n }\n return ops;\n}\n/**\n * One finding for a unit's changes, with the edit that makes all of them and\n * the message of the first change that has one.\n */\nfunction unitFinding(source: string, ops: Op[]): Finding | undefined {\n if (!ops.length) return undefined;\n ops.sort((a, b) => a.start - b.start || a.end - b.end);\n for (let index = 1; index < ops.length; index++)\n if (ops[index]!.start < ops[index - 1]!.end) return undefined;\n const start = ops[0]!.start;\n const end = ops.at(-1)!.end;\n let text = \"\";\n let cursor = start;\n for (const op of ops) {\n text += source.slice(cursor, op.start) + op.text;\n cursor = op.end;\n }\n text += source.slice(cursor, end);\n const message = ops.find((op) => op.message)?.message ?? \"Format the list.\";\n return { start, end, message, edit: { start, end, text } };\n}\n\nconst bullets = [\"-\", \"*\", \"+\"] as const;\n/** The marker after `marker` in the order `-`, `*`, `+`. */\nconst nextBullet = (marker: string) => bullets[(bullets.indexOf(marker as \"-\") + 1) % 3]!;\n/** A line that reads as a thematic break. */\nconst thematicBreak = /^([-*_])(?:[ \\t]*\\1){2,}[ \\t]*$/;\n\n/** The number of bullet lists that a list is nested in. */\nfunction bulletDepth(analysis: Analysis, list: ListGroup): number {\n let depth = 0;\n for (let node = list.parent; node; node = analysis.containers.get(node)?.parent)\n if (node.type === \"listItem\" && !analysis.items.get(node)?.list.node.ordered) depth++;\n return depth;\n}\n/**\n * The marker that each bullet list of a document gets before lists that\n * follow one another alternate: the configured one, the first list's with\n * `consistent`, or with `sublist` the first list's at each depth, unless the\n * depth above has that marker, in which case the next one.\n */\nfunction bulletMarkers(analysis: Analysis, marker: string): (list: ListGroup) => string {\n if (marker !== \"consistent\" && marker !== \"sublist\") return () => marker;\n const { source } = analysis;\n const lists = analysis.units.flatMap((unit) =>\n unit.lists.filter(\n (list) => !list.node.ordered && bullets.includes(source[list.items[0]?.marker ?? -1] as \"-\"),\n ),\n );\n const written = (list: ListGroup) => source[list.items[0]!.marker]!;\n if (marker === \"consistent\") {\n const first = lists[0] ? written(lists[0]) : \"-\";\n return () => first;\n }\n const byDepth: string[] = [];\n const depths = new Map(lists.map((list) => [list, bulletDepth(analysis, list)]));\n for (const list of lists) {\n const depth = depths.get(list)!;\n // The lists that a list is nested in come before it.\n if (byDepth[depth] !== undefined) continue;\n const own = written(list);\n byDepth[depth] = depth && own === byDepth[depth - 1] ? nextBullet(own) : own;\n }\n return (list) => byDepth[depths.get(list) ?? 0] ?? \"-\";\n}\n\nconst listMarker: Rule = {\n description: \"Use one bullet list marker, and the next one for a list that follows another.\",\n kind: \"style\",\n phase: \"block\",\n schema: optionsSchema({ marker: { enum: [...bullets, \"consistent\", \"sublist\"] } }),\n check({ document, options }) {\n const analysis = analyze(document);\n const { source, lines } = analysis;\n const base = bulletMarkers(analysis, String(options.marker ?? \"-\"));\n const findings: Finding[] = [];\n for (const unit of analysis.units) {\n if (!unit.valid) continue;\n const target = new Map<Item, string>();\n const runOf = new Map<Item, ListGroup[]>();\n for (const run of unit.runs) {\n if (run[0]!.node.ordered) continue;\n const preferred = base(run[0]!);\n run.forEach((list, index) => {\n for (const item of list.items) {\n target.set(item, index % 2 ? nextBullet(preferred) : preferred);\n runOf.set(item, run);\n }\n });\n }\n // A run keeps its markers where a new one would turn a line into a\n // thematic break, also together with the markers of lists nested on it.\n const kept = new Set<ListGroup[]>();\n const byLine = new Map<number, Item[]>();\n for (const item of target.keys())\n byLine.set(item.first, [...(byLine.get(item.first) ?? []), item]);\n for (let changed = true; changed;) {\n changed = false;\n for (const [line, onLine] of byLine) {\n const marked = (item: Item) =>\n kept.has(runOf.get(item)!) ? source[item.marker]! : target.get(item)!;\n if (onLine.every((item) => marked(item) === source[item.marker])) continue;\n const { start, end } = lines[line]!;\n let text = source.slice(start, end);\n for (const item of onLine)\n text =\n text.slice(0, item.marker - start) +\n marked(item) +\n text.slice(item.marker - start + 1);\n if (onLine.some((item) => thematicBreak.test(text.slice(item.marker - start)))) {\n for (const item of onLine)\n if (marked(item) !== source[item.marker]) kept.add(runOf.get(item)!);\n changed = true;\n }\n }\n }\n const ops: Op[] = [];\n for (const [item, marker] of target)\n if (!kept.has(runOf.get(item)!) && source[item.marker] !== marker)\n ops.push({\n start: item.marker,\n end: item.marker + 1,\n text: marker,\n message: `Use ${JSON.stringify(marker)} as the bullet list marker.`,\n });\n const finding = unitFinding(source, ops);\n if (finding) findings.push(finding);\n }\n return findings;\n },\n};\n\n/** The numbers that `numbering` gives a list's items, or undefined to keep them. */\nfunction renumbered(digits: string[], numbering: string): string[] | undefined {\n if (digits.length < 2 || digits.some((value) => value.length > 1 && value.startsWith(\"0\")))\n return undefined;\n const first = Number(digits[0]);\n const same = numbering === \"same\" || (numbering !== \"ordered\" && Number(digits[1]) === first);\n const numbers = digits.map((value, index) =>\n index === 0 ? first : same ? first : first + index,\n );\n if (numbers.some((value) => value > 999_999_999)) return undefined;\n return numbers.map((value, index) => (index === 0 ? digits[0]! : String(value)));\n}\n\nconst orderedList: Rule = {\n description: \"Use one delimiter after list numbers, and number list items consistently.\",\n kind: \"style\",\n phase: \"block\",\n schema: optionsSchema({\n delimiter: { enum: [\".\", \")\", \"consistent\"] },\n numbering: { enum: [\"auto\", \"ordered\", \"same\"] },\n }),\n check({ document, options }) {\n const analysis = analyze(document);\n const { source } = analysis;\n let preferred = String(options.delimiter ?? \".\");\n if (preferred === \"consistent\") {\n // The delimiter of the document's first ordered list.\n const first = analysis.units\n .flatMap((unit) => unit.lists)\n .find((list) => list.node.ordered && list.items.length);\n preferred = source[(first?.items[0]?.markerEnd ?? 0) - 1] === \")\" ? \")\" : \".\";\n }\n const other = preferred === \".\" ? \")\" : \".\";\n const numbering = String(options.numbering ?? \"auto\");\n const findings: Finding[] = [];\n for (const unit of analysis.units) {\n if (!unit.valid) continue;\n const delimiter = new Map<ListGroup, string>();\n for (const run of unit.runs)\n if (run[0]!.node.ordered)\n run.forEach((list, index) => delimiter.set(list, index % 2 ? other : preferred));\n const ops: Op[] = [];\n const delta = new Map<Item, number>();\n for (const list of unit.lists) {\n if (!list.node.ordered) continue;\n const digits = list.items.map((item) => item.digits);\n let numbers = renumbered(digits, numbering) ?? digits;\n const changes = new Map<Item, number>();\n for (const item of list.items) {\n const change = numbers[item.index]!.length - item.digits.length;\n if (change) changes.set(item, change);\n }\n const minimum = (item: Item) => numbers[item.index]!.length + 2;\n if (changes.size) {\n // The marker line's content moves with the number; a tab after it\n // would change its width instead.\n const readable = [...changes.keys()].every(\n (item) => !structuralTab(source, item.markerEnd, analysis.lines[item.first]!.end),\n );\n if (!readable || !feasible(analysis, list, changes, \"end\", minimum, \"stay\")) {\n numbers = digits;\n changes.clear();\n }\n }\n for (const [item, change] of changes) delta.set(item, change);\n const mark = delimiter.get(list) ?? preferred;\n for (const item of list.items) {\n const text = numbers[item.index]! + mark;\n if (source.slice(item.marker, item.markerEnd) === text) continue;\n ops.push({\n start: item.marker,\n end: item.markerEnd,\n text,\n message:\n source[item.markerEnd - 1] !== mark\n ? `Use ${JSON.stringify(mark)} after list item numbers.`\n : `Number this list item ${numbers[item.index]}.`,\n });\n }\n }\n for (const op of shiftOps(analysis, unit, delta, \"end\")) ops.push(op);\n const finding = unitFinding(source, ops);\n if (finding) findings.push(finding);\n }\n return findings;\n },\n};\n\n/** The columns from an item's marker to its text. */\nconst reachOf = (item: Item, spacing = item.spacing) =>\n item.markerEnd - item.marker + (item.blankFirst || item.spacing >= 5 ? 1 : spacing);\nconst spaces = { type: \"integer\", minimum: 1, maximum: 4 };\n\nconst listIndent: Rule = {\n description: \"Indent list items consistently, with the configured spaces after the marker.\",\n kind: \"style\",\n phase: \"block\",\n schema: optionsSchema({\n bulletSpaces: spaces,\n orderedSpaces: spaces,\n bulletSpacesMultiline: spaces,\n orderedSpacesMultiline: spaces,\n nestedIndent: { type: \"integer\", minimum: 1, maximum: 8 },\n }),\n check({ document, options }) {\n const analysis = analyze(document);\n const { source, lines } = analysis;\n const bullet = Number(options.bulletSpaces ?? 1);\n const ordered = Number(options.orderedSpaces ?? 1);\n const spacing = {\n bullet: [bullet, Number(options.bulletSpacesMultiline ?? bullet)],\n ordered: [ordered, Number(options.orderedSpacesMultiline ?? ordered)],\n };\n const nested = options.nestedIndent === undefined ? undefined : Number(options.nestedIndent);\n const findings: Finding[] = [];\n for (const unit of analysis.units) {\n if (!unit.valid) continue;\n const ops: Op[] = [];\n const delta = new Map<Item, number>();\n // The columns from each item's marker to its text once the rule is done,\n // and the fewest columns that its lines can need then.\n const reach = new Map<Item, number>();\n const lowest = new Map<Item, number>();\n for (const list of unit.lists) {\n for (const item of list.items) analysis.match(item.first);\n // As in markdownlint, a list whose items each take one line, with no\n // blank line between them, gets the spacing for single lines.\n const single = list.items.every(\n (item, index) =>\n item.first === item.last && (!index || item.first === list.items[index - 1]!.last + 1),\n );\n const wanted = spacing[list.node.ordered ? \"ordered\" : \"bullet\"][single ? 0 : 1]!;\n const holder =\n list.parent?.type === \"listItem\" ? analysis.items.get(list.parent) : undefined;\n // A nested list starts under its item's text, or as many columns from\n // the item's marker as configured, where CommonMark lets it start. On\n // the item's own marker line, columns before the nested marker would\n // be the item's spacing, so a list that starts there stays. A first\n // line that the last item of the list before it would continue would\n // join that item.\n const before = list.previous?.items.at(-1);\n const indent =\n nested !== undefined && holder && list.items[0]?.first !== holder.first\n ? Math.max(\n 0,\n Math.min(\n 3,\n nested - (reach.get(holder) ?? reachOf(holder)),\n (before ? (lowest.get(before) ?? 0) : Infinity) - 1,\n ),\n )\n : 0;\n const marks: Op[] = [];\n const changes = new Map<Item, number>();\n let possible = true;\n for (const item of list.items) {\n if (item.width === undefined || item.start === undefined) {\n possible = false;\n break;\n }\n const offset = item.offset!;\n // The spacing stays where the item starts with indented code, which\n // depends on it, or with a blank line, which has none.\n const keep = item.blankFirst || item.spacing >= 5;\n const target = keep ? item.spacing : wanted;\n if (offset === indent && target === item.spacing) continue;\n const lineEnd = lines[item.first]!.end;\n if (\n (offset !== indent && !onlySpaces(source, item.start, item.marker)) ||\n (target !== item.spacing && !onlySpaces(source, item.markerEnd, item.spaceEnd)) ||\n structuralTab(source, item.start, lineEnd)\n ) {\n possible = false;\n break;\n }\n const count = (value: number) => (value === 1 ? \"one space\" : `${value} spaces`);\n if (offset !== indent)\n marks.push({\n start: item.start,\n end: item.marker,\n text: \" \".repeat(indent),\n message: indent\n ? `Indent the list marker by ${count(indent)}.`\n : \"Remove the indentation before the list marker.\",\n });\n if (target !== item.spacing)\n marks.push({\n start: item.markerEnd,\n end: item.spaceEnd,\n text: \" \".repeat(target),\n message: `Put ${count(target)} after the list marker.`,\n });\n const change = indent - offset + (keep ? 0 : target - item.spacing);\n if (change) changes.set(item, change);\n }\n const minimum = (item: Item) =>\n indent +\n (!list.node.ordered ? 1 : item.index ? 2 : item.digits.length + 1) +\n (item.blankFirst || item.spacing >= 5 ? 1 : wanted);\n const accepted =\n possible &&\n marks.length > 0 &&\n feasible(analysis, list, changes, \"start\", minimum, \"move\");\n for (const item of list.items) {\n reach.set(item, accepted ? reachOf(item, wanted) : reachOf(item));\n const narrowest =\n (!list.node.ordered ? 1 : item.index ? 2 : item.digits.length + 1) +\n (item.blankFirst || item.spacing >= 5 ? 1 : accepted ? wanted : item.spacing);\n lowest.set(item, (accepted ? indent : (item.offset ?? 0)) + narrowest);\n }\n if (!accepted) continue;\n for (const op of marks) ops.push(op);\n for (const [item, change] of changes) delta.set(item, change);\n }\n for (const op of shiftOps(analysis, unit, delta, \"start\")) ops.push(op);\n const finding = unitFinding(source, ops);\n if (finding) findings.push(finding);\n }\n return findings;\n },\n};\n\nexport const listRules: Record<string, Rule> = {\n \"style/list-indent\": listIndent,\n \"style/list-marker\": listMarker,\n \"style/ordered-list\": orderedList,\n};\n"]}