Reimplement MD051/link-fragments using micromark tokens, report reference link issues for definition and fix when possible, handle reporting multiple violations on the same line better.

This commit is contained in:
David Anson 2023-08-04 20:53:38 -07:00
parent dd73b0ad7f
commit ef1bd286a9
14 changed files with 458 additions and 346 deletions

View file

@ -12,6 +12,8 @@
[Valid](#valid-heading-with-emphasis)
[Valid](#valid-heading-with-code)
[Valid](#valid-heading-with-quotes--and-double-quotes-)
[Valid](#-valid-heading-with-emoji)
@ -70,6 +72,10 @@ Text
Text
### Valid Heading With `Code`
Text
### Valid Heading With Quotes ' And Double Quotes "
Text
@ -157,9 +163,12 @@ Text
[Invalid](#not-an-id-should-be-ignored) {MD051}
[Invalid][badref] {MD051}
[Invalid {MD051}](#multi-line
"Title")
[badref]: #missing
[Invalid][badref]
[badref]: #missing "{MD051}"
## Inconsistent Case Fragments
@ -167,9 +176,12 @@ Text
[ALL CAPS](#NAMEDLINK) {MD051}
[MiXeD][mixedref] {MD051}
[Multi-line {MD051}](#NAMEDLINK
"Title")
[mixedref]: #idLINK
[MiXeD][mixedref]
[mixedref]: #idLINK "{MD051}"
## Valid Named Fragments

View file

@ -55,10 +55,10 @@ Generated by [AVA](https://avajs.dev).
> Expected linting violations
`test-repos/mochajs-mocha/.github/CODE_OF_CONDUCT.md: 58: MD034/no-bare-urls Bare URL used [Context: "report@lists.openjsf.org"]␊
test-repos/mochajs-mocha/.github/CONTRIBUTING.md: 11: MD051/link-fragments Link fragments should be valid [Context: "[search](https://github.com/mochajs/mocha/issues/) to see if it's already been reported**. Otherwise, create a [new issue](https://github.com/mochajs/mocha/issues/new). If you can fix the bug yourself, feel free to create a [pull request](#propose-a-change)"]␊
test-repos/mochajs-mocha/.github/CONTRIBUTING.md: 11: MD051/link-fragments Link fragments should be valid [Context: "[pull request](#propose-a-change)"]␊
test-repos/mochajs-mocha/.github/CONTRIBUTING.md: 41: MD051/link-fragments Link fragments should be valid [Context: "[ask for help](#got-a-question)"]␊
test-repos/mochajs-mocha/MAINTAINERS.md: 34: MD051/link-fragments Link fragments should be valid [Context: "[Projects](#projects)"]␊
test-repos/mochajs-mocha/PROJECT_CHARTER.md: 51: MD051/link-fragments Link fragments should be valid [Context: "[mochajs organization](https://github.com/mochajs) unless explicitly stated in [§2: Scope](#%c2%a72-scope)"]␊
test-repos/mochajs-mocha/PROJECT_CHARTER.md: 51: MD051/link-fragments Link fragments should be valid [Context: "[§2: Scope](#%c2%a72-scope)"]␊
test-repos/mochajs-mocha/PROJECT_CHARTER.md: 56: MD051/link-fragments Link fragments should be valid [Context: "[§2: Scope](#%c2%a72-scope)"]␊
test-repos/mochajs-mocha/docs/index.md: 32: MD051/link-fragments Link fragments should be valid [Context: "[global variable leak detection](#-check-leaks)"]␊
test-repos/mochajs-mocha/docs/index.md: 33: MD051/link-fragments Link fragments should be valid [Context: "[optionally run tests that match a regexp](#-grep-regexp-g-regexp)"]␊
@ -72,7 +72,7 @@ Generated by [AVA](https://avajs.dev).
test-repos/mochajs-mocha/docs/index.md: 1257: MD051/link-fragments Link fragments should be valid [Context: "[\`--node-option\`](#-node-option-name-n-name)"]␊
test-repos/mochajs-mocha/docs/index.md: 1263: MD051/link-fragments Link fragments should be valid [Context: "[\`--parallel\`](#-parallel-p)"]␊
test-repos/mochajs-mocha/docs/index.md: 1288: MD051/link-fragments Link fragments should be valid [Context: "[\`--grep\`](#-grep-regexp-g-regexp)"]␊
test-repos/mochajs-mocha/docs/index.md: 1288: MD051/link-fragments Link fragments should be valid [Context: "[\`--grep\`](#-grep-regexp-g-regexp) or [\`--fgrep\`](#-fgrep-string-f-string)"]␊
test-repos/mochajs-mocha/docs/index.md: 1288: MD051/link-fragments Link fragments should be valid [Context: "[\`--fgrep\`](#-fgrep-string-f-string)"]␊
test-repos/mochajs-mocha/docs/index.md: 1299: MD051/link-fragments Link fragments should be valid [Context: "[\`--file\`](#-file-filedirectoryglob)"]␊
test-repos/mochajs-mocha/docs/index.md: 1300: MD051/link-fragments Link fragments should be valid [Context: "[\`--sort\`](#-sort-s)"]␊
test-repos/mochajs-mocha/docs/index.md: 1306: MD051/link-fragments Link fragments should be valid [Context: "[globally](#-timeout-ms-t-ms)"]␊

View file

@ -23472,7 +23472,7 @@ Generated by [AVA](https://avajs.dev).
31,
],
fixInfo: null,
lineNumber: 144,
lineNumber: 150,
ruleDescription: 'Link fragments should be valid',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/md051.md',
ruleNames: [
@ -23488,7 +23488,7 @@ Generated by [AVA](https://avajs.dev).
36,
],
fixInfo: null,
lineNumber: 146,
lineNumber: 152,
ruleDescription: 'Link fragments should be valid',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/md051.md',
ruleNames: [
@ -23504,7 +23504,7 @@ Generated by [AVA](https://avajs.dev).
28,
],
fixInfo: null,
lineNumber: 148,
lineNumber: 154,
ruleDescription: 'Link fragments should be valid',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/md051.md',
ruleNames: [
@ -23520,7 +23520,7 @@ Generated by [AVA](https://avajs.dev).
18,
],
fixInfo: null,
lineNumber: 150,
lineNumber: 156,
ruleDescription: 'Link fragments should be valid',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/md051.md',
ruleNames: [
@ -23540,7 +23540,7 @@ Generated by [AVA](https://avajs.dev).
editColumn: 11,
insertText: '#HREFandID',
},
lineNumber: 152,
lineNumber: 158,
ruleDescription: 'Link fragments should be valid',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/md051.md',
ruleNames: [
@ -23556,7 +23556,7 @@ Generated by [AVA](https://avajs.dev).
34,
],
fixInfo: null,
lineNumber: 154,
lineNumber: 160,
ruleDescription: 'Link fragments should be valid',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/md051.md',
ruleNames: [
@ -23572,7 +23572,7 @@ Generated by [AVA](https://avajs.dev).
34,
],
fixInfo: null,
lineNumber: 156,
lineNumber: 162,
ruleDescription: 'Link fragments should be valid',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/md051.md',
ruleNames: [
@ -23588,7 +23588,7 @@ Generated by [AVA](https://avajs.dev).
39,
],
fixInfo: null,
lineNumber: 158,
lineNumber: 164,
ruleDescription: 'Link fragments should be valid',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/md051.md',
ruleNames: [
@ -23597,11 +23597,28 @@ Generated by [AVA](https://avajs.dev).
],
},
{
errorContext: '#missing',
errorContext: `[Invalid {MD051}](#multi-line␊
"Title")`,
errorDetail: null,
errorRange: null,
fixInfo: null,
lineNumber: 160,
lineNumber: 166,
ruleDescription: 'Link fragments should be valid',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/md051.md',
ruleNames: [
'MD051',
'link-fragments',
],
},
{
errorContext: '[badref]: #missing "{MD051}"',
errorDetail: null,
errorRange: [
1,
28,
],
fixInfo: null,
lineNumber: 171,
ruleDescription: 'Link fragments should be valid',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/md051.md',
ruleNames: [
@ -23621,7 +23638,7 @@ Generated by [AVA](https://avajs.dev).
editColumn: 9,
insertText: '#valid-fragments',
},
lineNumber: 166,
lineNumber: 175,
ruleDescription: 'Link fragments should be valid',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/md051.md',
ruleNames: [
@ -23641,7 +23658,7 @@ Generated by [AVA](https://avajs.dev).
editColumn: 12,
insertText: '#namedlink',
},
lineNumber: 168,
lineNumber: 177,
ruleDescription: 'Link fragments should be valid',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/md051.md',
ruleNames: [
@ -23650,11 +23667,32 @@ Generated by [AVA](https://avajs.dev).
],
},
{
errorContext: '#idLINK',
errorDetail: 'Expected: #idlink; Actual: #idLINK',
errorContext: `[Multi-line {MD051}](#NAMEDLINK
"Title")`,
errorDetail: 'Expected: #namedlink; Actual: #NAMEDLINK',
errorRange: null,
fixInfo: null,
lineNumber: 170,
lineNumber: 179,
ruleDescription: 'Link fragments should be valid',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/md051.md',
ruleNames: [
'MD051',
'link-fragments',
],
},
{
errorContext: '[mixedref]: #idLINK "{MD051}"',
errorDetail: 'Expected: #idlink; Actual: #idLINK',
errorRange: [
1,
29,
],
fixInfo: {
deleteCount: 7,
editColumn: 13,
insertText: '#idlink',
},
lineNumber: 184,
ruleDescription: 'Link fragments should be valid',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/md051.md',
ruleNames: [
@ -23670,7 +23708,7 @@ Generated by [AVA](https://avajs.dev).
26,
],
fixInfo: null,
lineNumber: 207,
lineNumber: 219,
ruleDescription: 'Link fragments should be valid',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/md051.md',
ruleNames: [
@ -23686,7 +23724,7 @@ Generated by [AVA](https://avajs.dev).
26,
],
fixInfo: null,
lineNumber: 209,
lineNumber: 221,
ruleDescription: 'Link fragments should be valid',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/md051.md',
ruleNames: [
@ -23702,7 +23740,7 @@ Generated by [AVA](https://avajs.dev).
20,
],
fixInfo: null,
lineNumber: 211,
lineNumber: 223,
ruleDescription: 'Link fragments should be valid',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/md051.md',
ruleNames: [
@ -23718,7 +23756,7 @@ Generated by [AVA](https://avajs.dev).
23,
],
fixInfo: null,
lineNumber: 213,
lineNumber: 225,
ruleDescription: 'Link fragments should be valid',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/md051.md',
ruleNames: [
@ -23734,7 +23772,7 @@ Generated by [AVA](https://avajs.dev).
22,
],
fixInfo: null,
lineNumber: 215,
lineNumber: 227,
ruleDescription: 'Link fragments should be valid',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/md051.md',
ruleNames: [
@ -23750,7 +23788,7 @@ Generated by [AVA](https://avajs.dev).
42,
],
fixInfo: null,
lineNumber: 217,
lineNumber: 229,
ruleDescription: 'Link fragments should be valid',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/md051.md',
ruleNames: [
@ -23766,7 +23804,7 @@ Generated by [AVA](https://avajs.dev).
21,
],
fixInfo: null,
lineNumber: 219,
lineNumber: 231,
ruleDescription: 'Link fragments should be valid',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/md051.md',
ruleNames: [
@ -23782,7 +23820,7 @@ Generated by [AVA](https://avajs.dev).
21,
],
fixInfo: null,
lineNumber: 221,
lineNumber: 233,
ruleDescription: 'Link fragments should be valid',
ruleInformation: 'https://github.com/DavidAnson/markdownlint/blob/v0.0.0/doc/md051.md',
ruleNames: [
@ -23805,6 +23843,8 @@ Generated by [AVA](https://avajs.dev).
[Valid](#valid-heading-with-emphasis)␊
[Valid](#valid-heading-with-code)␊
[Valid](#valid-heading-with-quotes--and-double-quotes-)␊
[Valid](#-valid-heading-with-emoji)␊
@ -23863,6 +23903,10 @@ Generated by [AVA](https://avajs.dev).
Text␊
### Valid Heading With \`Code\`␊
Text␊
### Valid Heading With Quotes ' And Double Quotes "␊
Text␊
@ -23950,9 +23994,12 @@ Generated by [AVA](https://avajs.dev).
[Invalid](#not-an-id-should-be-ignored) {MD051}␊
[Invalid][badref] {MD051}␊
[Invalid {MD051}](#multi-line␊
"Title")␊
[badref]: #missing
[Invalid][badref]␊
[badref]: #missing "{MD051}"␊
## Inconsistent Case Fragments␊
@ -23960,9 +24007,12 @@ Generated by [AVA](https://avajs.dev).
[ALL CAPS](#namedlink) {MD051}␊
[MiXeD][mixedref] {MD051}␊
[Multi-line {MD051}](#NAMEDLINK
"Title")␊
[mixedref]: #idLINK
[MiXeD][mixedref]␊
[mixedref]: #idlink "{MD051}"␊
## Valid Named Fragments␊
@ -41804,9 +41854,12 @@ Generated by [AVA](https://avajs.dev).
],
},
{
errorContext: '#link%60link',
errorContext: '[link](#link`link)',
errorDetail: null,
errorRange: null,
errorRange: [
6,
18,
],
fixInfo: null,
lineNumber: 81,
ruleDescription: 'Link fragments should be valid',
@ -41817,9 +41870,12 @@ Generated by [AVA](https://avajs.dev).
],
},
{
errorContext: '#link%60link',
errorContext: '[link](#link`link)',
errorDetail: null,
errorRange: null,
errorRange: [
11,
18,
],
fixInfo: null,
lineNumber: 85,
ruleDescription: 'Link fragments should be valid',
@ -41830,9 +41886,12 @@ Generated by [AVA](https://avajs.dev).
],
},
{
errorContext: '#link%60link',
errorContext: '[link(link](#link`link)',
errorDetail: null,
errorRange: null,
errorRange: [
6,
23,
],
fixInfo: null,
lineNumber: 87,
ruleDescription: 'Link fragments should be valid',
@ -41843,9 +41902,12 @@ Generated by [AVA](https://avajs.dev).
],
},
{
errorContext: '#link%60link',
errorContext: '[link)link](#link`link)',
errorDetail: null,
errorRange: null,
errorRange: [
6,
23,
],
fixInfo: null,
lineNumber: 89,
ruleDescription: 'Link fragments should be valid',
@ -41856,9 +41918,12 @@ Generated by [AVA](https://avajs.dev).
],
},
{
errorContext: '#link%5Blink%60link',
errorContext: '[link](#link[link`link)',
errorDetail: null,
errorRange: null,
errorRange: [
6,
23,
],
fixInfo: null,
lineNumber: 91,
ruleDescription: 'Link fragments should be valid',
@ -41869,9 +41934,12 @@ Generated by [AVA](https://avajs.dev).
],
},
{
errorContext: '#link%5Dlink%60link',
errorContext: '[link](#link]link`link)',
errorDetail: null,
errorRange: null,
errorRange: [
6,
23,
],
fixInfo: null,
lineNumber: 93,
ruleDescription: 'Link fragments should be valid',