mirror of
https://github.com/theoludwig/markdownlint-rule-relative-links.git
synced 2024-12-08 00:45:32 +01:00
feat: improve errors message to distinguish between file system and fragment errors
This commit is contained in:
parent
6c4e8cec9c
commit
a33c682974
@ -21,7 +21,7 @@
|
|||||||
|
|
||||||
**markdownlint-rule-relative-links** is a [markdownlint](https://github.com/DavidAnson/markdownlint) custom rule to validate relative links.
|
**markdownlint-rule-relative-links** is a [markdownlint](https://github.com/DavidAnson/markdownlint) custom rule to validate relative links.
|
||||||
|
|
||||||
It ensures that relative links (using `file:` protocol) are working and not "dead" which means that it exists in the file system of the project that uses [markdownlint](https://github.com/DavidAnson/markdownlint).
|
It ensures that relative links (using `file:` protocol) are working and exists in the file system of the project that uses [markdownlint](https://github.com/DavidAnson/markdownlint).
|
||||||
|
|
||||||
### Example
|
### Example
|
||||||
|
|
||||||
@ -37,13 +37,13 @@ With `awesome.md` content:
|
|||||||
```md
|
```md
|
||||||
[abc](./abc.txt)
|
[abc](./abc.txt)
|
||||||
|
|
||||||
[Dead link](./dead.txt)
|
[Invalid link](./invalid.txt)
|
||||||
```
|
```
|
||||||
|
|
||||||
Running [markdownlint-cli2](https://github.com/DavidAnson/markdownlint-cli2) with `markdownlint-rule-relative-links` will output:
|
Running [markdownlint-cli2](https://github.com/DavidAnson/markdownlint-cli2) with `markdownlint-rule-relative-links` will output:
|
||||||
|
|
||||||
```sh
|
```sh
|
||||||
awesome.md:3 relative-links Relative links should be valid [Link "./dead.txt" is dead]
|
awesome.md:3 relative-links Relative links should be valid [Link "./invalid.txt" should exist in the file system]
|
||||||
```
|
```
|
||||||
|
|
||||||
### Related links
|
### Related links
|
||||||
|
14
src/index.js
14
src/index.js
@ -43,10 +43,14 @@ const customRule = {
|
|||||||
const isRelative =
|
const isRelative =
|
||||||
url.protocol === 'file:' && !hrefSrc.startsWith('/')
|
url.protocol === 'file:' && !hrefSrc.startsWith('/')
|
||||||
if (isRelative) {
|
if (isRelative) {
|
||||||
const detail = `Link "${hrefSrc}" is not valid`
|
const detail = `Link "${hrefSrc}"`
|
||||||
|
|
||||||
if (!fs.existsSync(url)) {
|
if (!fs.existsSync(url)) {
|
||||||
addError(onError, lineNumber, detail)
|
addError(
|
||||||
|
onError,
|
||||||
|
lineNumber,
|
||||||
|
`${detail} should exist in the file system`
|
||||||
|
)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -68,7 +72,11 @@ const customRule = {
|
|||||||
})
|
})
|
||||||
|
|
||||||
if (!headingsHTMLFragments.includes(url.hash)) {
|
if (!headingsHTMLFragments.includes(url.hash)) {
|
||||||
addError(onError, lineNumber, detail)
|
addError(
|
||||||
|
onError,
|
||||||
|
lineNumber,
|
||||||
|
`${detail} should have a valid fragment`
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -41,8 +41,7 @@ const addError = (onError, lineNumber, detail, context, range, fixInfo) => {
|
|||||||
* Converts a Markdown heading into an HTML fragment according to the rules
|
* Converts a Markdown heading into an HTML fragment according to the rules
|
||||||
* used by GitHub.
|
* used by GitHub.
|
||||||
*
|
*
|
||||||
* Taken from <https://github.com/DavidAnson/markdownlint/blob/d01180ec5a014083ee9d574b693a8d7fbc1e566d/lib/md051.js#L19>
|
* @see https://github.com/DavidAnson/markdownlint/blob/d01180ec5a014083ee9d574b693a8d7fbc1e566d/lib/md051.js#L1
|
||||||
*
|
|
||||||
* @param {string} inlineText Inline token for heading.
|
* @param {string} inlineText Inline token for heading.
|
||||||
* @returns {string} Fragment string for heading.
|
* @returns {string} Fragment string for heading.
|
||||||
*/
|
*/
|
||||||
|
@ -23,7 +23,7 @@ test('ensure the rule validate correctly', async () => {
|
|||||||
)
|
)
|
||||||
assert.equal(
|
assert.equal(
|
||||||
lintResults['test/fixtures/Invalid.md'][0]?.errorDetail,
|
lintResults['test/fixtures/Invalid.md'][0]?.errorDetail,
|
||||||
'Link "./basic.test.js" is not valid'
|
'Link "./basic.test.js" should exist in the file system'
|
||||||
)
|
)
|
||||||
|
|
||||||
assert.equal(
|
assert.equal(
|
||||||
@ -32,7 +32,7 @@ test('ensure the rule validate correctly', async () => {
|
|||||||
)
|
)
|
||||||
assert.equal(
|
assert.equal(
|
||||||
lintResults['test/fixtures/Invalid.md'][1]?.errorDetail,
|
lintResults['test/fixtures/Invalid.md'][1]?.errorDetail,
|
||||||
'Link "../image.png" is not valid'
|
'Link "../image.png" should exist in the file system'
|
||||||
)
|
)
|
||||||
|
|
||||||
assert.equal(
|
assert.equal(
|
||||||
@ -41,6 +41,6 @@ test('ensure the rule validate correctly', async () => {
|
|||||||
)
|
)
|
||||||
assert.equal(
|
assert.equal(
|
||||||
lintResults['test/fixtures/Invalid.md'][2]?.errorDetail,
|
lintResults['test/fixtures/Invalid.md'][2]?.errorDetail,
|
||||||
'Link "./Valid.md#not-existing-heading" is not valid'
|
'Link "./Valid.md#not-existing-heading" should have a valid fragment'
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
Loading…
Reference in New Issue
Block a user