mirror of
https://github.com/theoludwig/markdownlint-rule-relative-links.git
synced 2024-12-08 00:45:32 +01:00
feat: stricter validation of heading fragments by being Case sensitive
Fixes #8 BREAKING CHANGE: Heading fragments is now Case sensitive. For example "#ExistIng-Heading" is invalid as it should be "#existing-heading".
This commit is contained in:
parent
450cdb84f0
commit
85f465306f
@ -126,7 +126,7 @@ const customRule = {
|
|||||||
|
|
||||||
fragmentsHTML.push(...idOrAnchorNameHTMLFragments)
|
fragmentsHTML.push(...idOrAnchorNameHTMLFragments)
|
||||||
|
|
||||||
if (!fragmentsHTML.includes(url.hash.toLowerCase())) {
|
if (!fragmentsHTML.includes(url.hash)) {
|
||||||
if (url.hash.startsWith("#L")) {
|
if (url.hash.startsWith("#L")) {
|
||||||
const lineNumberFragmentString = getLineNumberStringFromFragment(
|
const lineNumberFragmentString = getLineNumberStringFromFragment(
|
||||||
url.hash,
|
url.hash,
|
||||||
@ -157,6 +157,8 @@ const customRule = {
|
|||||||
})
|
})
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
onError({
|
onError({
|
||||||
|
@ -28,7 +28,7 @@ const convertHeadingToHTMLFragment = (inlineText) => {
|
|||||||
"",
|
"",
|
||||||
)
|
)
|
||||||
.replace(/ /gu, "-"),
|
.replace(/ /gu, "-"),
|
||||||
).toLowerCase()
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
# Valid
|
# Valid
|
||||||
|
|
||||||
[Link fragment](./awesome.md#L7)
|
[Link fragment](./awesome.md#l7)
|
||||||
|
@ -47,6 +47,14 @@ test("ensure the rule validates correctly", async (t) => {
|
|||||||
'"./awesome.md#not-an-id-should-be-ignored" should have a valid fragment identifier',
|
'"./awesome.md#not-an-id-should-be-ignored" should have a valid fragment identifier',
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "should be invalid with uppercase letters in fragment (case sensitive)",
|
||||||
|
fixturePath:
|
||||||
|
"test/fixtures/invalid/invalid-heading-case-sensitive/invalid-heading-case-sensitive.md",
|
||||||
|
errors: [
|
||||||
|
'"./awesome.md#ExistIng-Heading" should have a valid fragment identifier',
|
||||||
|
],
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "should be invalid with invalid heading with #L fragment",
|
name: "should be invalid with invalid heading with #L fragment",
|
||||||
fixturePath:
|
fixturePath:
|
||||||
@ -148,7 +156,11 @@ test("ensure the rule validates correctly", async (t) => {
|
|||||||
)
|
)
|
||||||
return result.errorDetail
|
return result.errorDetail
|
||||||
})
|
})
|
||||||
assert.deepStrictEqual(errorsDetails, errors)
|
assert.deepStrictEqual(
|
||||||
|
errorsDetails,
|
||||||
|
errors,
|
||||||
|
`${fixturePath}: Expected errors`,
|
||||||
|
)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@ -165,11 +177,6 @@ test("ensure the rule validates correctly", async (t) => {
|
|||||||
fixturePath:
|
fixturePath:
|
||||||
"test/fixtures/valid/existing-element-id-fragment/existing-element-id-fragment.md",
|
"test/fixtures/valid/existing-element-id-fragment/existing-element-id-fragment.md",
|
||||||
},
|
},
|
||||||
{
|
|
||||||
name: "should be valid with an existing heading fragment (case insensitive)",
|
|
||||||
fixturePath:
|
|
||||||
"test/fixtures/valid/existing-heading-case-insensitive/existing-heading-case-insensitive.md",
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
name: "should be valid with an existing heading fragment",
|
name: "should be valid with an existing heading fragment",
|
||||||
fixturePath:
|
fixturePath:
|
||||||
@ -232,7 +239,7 @@ test("ensure the rule validates correctly", async (t) => {
|
|||||||
assert.equal(
|
assert.equal(
|
||||||
errorsDetails.length,
|
errorsDetails.length,
|
||||||
0,
|
0,
|
||||||
`Expected no errors, got ${errorsDetails.join(", ")}`,
|
`${fixturePath}: Expected no errors, got ${errorsDetails.join(", ")}`,
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user