diff --git a/src/rules/no-missing-label-refs.js b/src/rules/no-missing-label-refs.js index fa505a13..bb835fcf 100644 --- a/src/rules/no-missing-label-refs.js +++ b/src/rules/no-missing-label-refs.js @@ -7,7 +7,7 @@ // Imports //----------------------------------------------------------------------------- -import { findOffsets, illegalShorthandTailPattern } from "../util.js"; +import { illegalShorthandTailPattern } from "../util.js"; //----------------------------------------------------------------------------- // Type Definitions @@ -17,6 +17,7 @@ import { findOffsets, illegalShorthandTailPattern } from "../util.js"; * @import { Position } from "unist"; * @import { Text } from "mdast"; * @import { MarkdownRuleDefinition } from "../types.js"; + * @import { MarkdownSourceCode } from "../language/markdown-source-code.js"; * @typedef {"notFound"} NoMissingLabelRefsMessageIds * @typedef {[{ allowLabels?: string[] }]} NoMissingLabelRefsOptions * @typedef {MarkdownRuleDefinition<{ RuleOptions: NoMissingLabelRefsOptions, MessageIds: NoMissingLabelRefsMessageIds }>} NoMissingLabelRefsRuleDefinition @@ -29,14 +30,13 @@ import { findOffsets, illegalShorthandTailPattern } from "../util.js"; /** * Finds missing references in a node. * @param {Text} node The node to check. - * @param {string} nodeText The text of the node. + * @param {MarkdownSourceCode} sourceCode The Markdown source code object. * @returns {Array<{label:string,position:Position}>} The missing references. */ -function findMissingReferences(node, nodeText) { +function findMissingReferences(node, sourceCode) { /** @type {Array<{label:string,position:Position}>} */ const missing = []; - const nodeStartLine = node.position.start.line; - const nodeStartColumn = node.position.start.column; + const nodeText = sourceCode.getText(node); /** * Matches substrings like `"[foo]"`, `"[]"`, `"[foo][bar]"`, `"[foo][]"`, `"[][bar]"`, or `"[][]"`. @@ -46,6 +46,7 @@ function findMissingReferences(node, nodeText) { const labelPattern = /(?<=(?(?:\\.|[^[\]\\])*)\](?:\[(?(?:\\.|[^\]\\])*)\])?/dgu; + /** @type {RegExpExecArray} */ let match; /* @@ -75,28 +76,14 @@ function findMissingReferences(node, nodeText) { labelIndices = match.indices.groups.left; } - const { lineOffset: startLineOffset, columnOffset: startColumnOffset } = - findOffsets(nodeText, labelIndices[0]); - const { lineOffset: endLineOffset, columnOffset: endColumnOffset } = - findOffsets(nodeText, labelIndices[1]); + const startOffset = labelIndices[0] + node.position.start.offset; + const endOffset = labelIndices[1] + node.position.start.offset; missing.push({ label: label.trim(), position: { - start: { - line: nodeStartLine + startLineOffset, - column: - startLineOffset > 0 - ? startColumnOffset + 1 - : nodeStartColumn + startColumnOffset, - }, - end: { - line: nodeStartLine + endLineOffset, - column: - endLineOffset > 0 - ? endColumnOffset + 1 - : nodeStartColumn + endColumnOffset, - }, + start: sourceCode.getLocFromIndex(startOffset), + end: sourceCode.getLocFromIndex(endOffset), }, }); } @@ -169,7 +156,7 @@ export default { text(node) { const missingReferences = findMissingReferences( node, - sourceCode.getText(node), + sourceCode, ); for (const missingReference of missingReferences) {