Initial implementation of MD051/valid-link-fragments (refs #253, closes #495).

This commit is contained in:
Divlo 2022-01-26 00:21:08 +01:00 committed by David Anson
parent 62f5c85238
commit 33ee1cd85e
13 changed files with 250 additions and 24 deletions

View file

@ -314,5 +314,31 @@
"MD050",
"strong-style"
]
},
{
"errorContext": "#",
"errorDetail": "Link Fragment is invalid",
"errorRange": null,
"fixInfo": null,
"lineNumber": 5,
"ruleDescription": "Link fragments should be valid",
"ruleInformation": "https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/Rules.md#md051",
"ruleNames": [
"MD051",
"valid-link-fragments"
]
},
{
"errorContext": "#one",
"errorDetail": "Link Fragment is invalid",
"errorRange": null,
"fixInfo": null,
"lineNumber": 17,
"ruleDescription": "Link fragments should be valid",
"ruleInformation": "https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/Rules.md#md051",
"ruleNames": [
"MD051",
"valid-link-fragments"
]
}
]

View file

@ -12,22 +12,24 @@
[text]( <> "title" ) {MD042}
[text](#) {MD042}
[text](#) {MD042} {MD051}
[text]( # ) {MD042}
[text]( # ) {MD042} {MD051}
[text](# "title") {MD042}
[text](# "title") {MD042} {MD051}
[text]( # "title" ) {MD042}
[text]( # "title" ) {MD042} {MD051}
[text][frag] {MD042}
[text][frag] {MD042} {MD051}
[text][ frag ] {MD042}
[text][ frag ] {MD042} {MD051}
[frag]: #
## Non-empty links
### frag
[text](link)
[text]( link )

View file

@ -841,7 +841,7 @@ test.cb("customFileSystemAsync", (t) => {
});
test.cb("readme", (t) => {
t.plan(119);
t.plan(121);
const tagToRules = {};
rules.forEach(function forRule(rule) {
rule.tags.forEach(function forTag(tag) {
@ -917,7 +917,7 @@ test.cb("readme", (t) => {
});
test.cb("rules", (t) => {
t.plan(352);
t.plan(359);
fs.readFile("doc/Rules.md", "utf8",
(err, contents) => {
t.falsy(err);
@ -1094,7 +1094,7 @@ test("validateConfigExampleJson", async(t) => {
});
test("allBuiltInRulesHaveValidUrl", (t) => {
t.plan(138);
t.plan(141);
rules.forEach(function forRule(rule) {
t.truthy(rule.information);
t.true(Object.getPrototypeOf(rule.information) === URL.prototype);

View file

@ -78,21 +78,21 @@ Text [link](https://example.com/link`link`link`link) text `code`.
Text [link](https://example.com/link "title`title") text `code`.
Text [link](#link`link) text `code`.
Text [link](#link`link) text `code`. {MD051}
Text [link] (#link`link) text `code`. {MD038}
Text [link[link](#link`link) text `code`.
Text [link[link](#link`link) text `code`. {MD051}
Text [link(link](#link`link) text `code`.
Text [link(link](#link`link) text `code`. {MD051}
Text [link)link](#link`link) text `code`.
Text [link)link](#link`link) text `code`. {MD051}
Text [link](#link[link`link) text `code`.
Text [link](#link[linklink) text `code`. {MD051}
Text [link](#link]link`link) text `code`.
Text [link](#link[linklink) text `code`. {MD051}
Text [link](#link(link`link) text `code`. {MD038}
Text [link](#link[linklink) text `code`. {MD051}
Text [`link`](xref:custom.link`1) text `code`.

View file

@ -0,0 +1,56 @@
# Valid/Invalid Link Fragments
## Valid Fragments
[Valid](#validinvalid-link-fragments)
[Valid](#valid-fragments)
[Valid](#valid-h3-heading)
[Valid](#valid-heading-with-underscores-_)
[Valid](#valid-heading-with-quotes--and-double-quotes-)
[Valid](#-valid-heading-with-emoji)
[Valid](#valid-heading--with-emoji-2)
[Valid](#valid-closed-atx-heading)
[Valid](#valid-setex-heading)
### Valid H3 Heading
Text
### Valid Heading With Underscores _
Text
### Valid Heading With Quotes ' And Double Quotes "
Text
### 🚀 Valid Heading With Emoji
Text
### Valid Heading 👀 With Emoji 2
Text
<!-- markdownlint-disable-next-line MD003 -->
### Valid Closed ATX Heading ###
Text
<!-- markdownlint-disable-next-line MD003 -->
Valid Setex Heading
----
Text
## Invalid Fragments
[Invalid](#invalid-fragments-not-exist) {MD051}