feat: support line number checking in link fragment (e.g: '#L50')

Fixes #6
This commit is contained in:
2024-01-31 01:14:27 +01:00
parent e20ee54b05
commit f332c833ca
15 changed files with 154 additions and 2 deletions
+32 -1
View File
@@ -8,6 +8,9 @@ const {
convertHeadingToHTMLFragment,
getMarkdownHeadings,
getMarkdownIdOrAnchorNameFragments,
isValidIntegerString,
getNumberOfLines,
getLineNumberStringFromFragment,
} = require("./utils.js")
/** @typedef {import('markdownlint').Rule} MarkdownLintRule */
@@ -121,7 +124,35 @@ const customRule = {
fragmentsHTML.push(...idOrAnchorNameHTMLFragments)
if (!fragmentsHTML.includes(url.hash)) {
if (!fragmentsHTML.includes(url.hash.toLowerCase())) {
if (url.hash.startsWith("#L")) {
const lineNumberFragmentString = getLineNumberStringFromFragment(
url.hash,
)
const hasOnlyDigits = isValidIntegerString(lineNumberFragmentString)
if (!hasOnlyDigits) {
onError({
lineNumber,
detail: `${detail} should have a valid fragment identifier`,
})
continue
}
const lineNumberFragment = Number.parseInt(
lineNumberFragmentString,
10,
)
const numberOfLines = getNumberOfLines(fileContent)
if (lineNumberFragment > numberOfLines) {
onError({
lineNumber,
detail: `${detail} should have a valid fragment identifier, ${detail} should have at least ${lineNumberFragment} lines to be valid`,
})
continue
}
}
onError({
lineNumber,
detail: `${detail} should have a valid fragment identifier`,