markdownlint-rule-relative-links
Custom rule for markdownlint to validate relative links.
## 📜 About
**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 exists in the file system of the project that uses [markdownlint](https://github.com/DavidAnson/markdownlint).
### Example
File structure:
```txt
├── abc.txt
└── awesome.md
```
With `awesome.md` content:
```md
[abc](./abc.txt)
[Invalid link](./invalid.txt)
```
Running [markdownlint-cli2](https://github.com/DavidAnson/markdownlint-cli2) with `markdownlint-rule-relative-links` will output:
```sh
awesome.md:3 relative-links Relative links should be valid ["./invalid.txt" should exist in the file system]
```
### Additional features
- Support images (e.g: ``).
- Support anchors (heading fragment links) (e.g: `[Link](./awesome.md#existing-heading)`).
- Ignore external links and absolute paths as it only checks relative links (e.g: `https://example.com/` or `/absolute/path.png`).
### Limitations
- Only images and links defined using markdown syntax are validated, html syntax is not supported (e.g: `` or `
`).
- Anchors checking is limited to headings, other elements are not supported (e.g: with a "id", ``).
Contributions are welcome to improve the rule, and to alleviate these limitations. See [CONTRIBUTING.md](./CONTRIBUTING.md) for more information.
### Related links
- [DavidAnson/markdownlint#253](https://github.com/DavidAnson/markdownlint/issues/253)
- [DavidAnson/markdownlint#121](https://github.com/DavidAnson/markdownlint/issues/121)
- [nschonni/markdownlint-valid-links](https://github.com/nschonni/markdownlint-valid-links)
## Prerequisites
- [Node.js](https://nodejs.org/) >= 16.0.0
## Installation
```sh
npm install --save-dev markdownlint-rule-relative-links
```
## Configuration
There are various ways [markdownlint](https://github.com/DavidAnson/markdownlint) can be configured using objects, config files etc. For more information on configuration refer to [options.config](https://github.com/DavidAnson/markdownlint#optionsconfig).
We recommend configuring [markdownlint-cli2](https://github.com/DavidAnson/markdownlint-cli2) over [markdownlint-cli](https://github.com/igorshubovych/markdownlint-cli) for compatibility with the [vscode-markdownlint](https://github.com/DavidAnson/vscode-markdownlint) extension.
`.markdownlint-cli2.jsonc`
```json
{
"config": {
"default": true,
"relative-links": true
},
"globs": ["**/*.{md,mdx}"],
"ignores": ["**/node_modules"],
"customRules": ["markdownlint-rule-relative-links"]
}
```
`package.json`
```json
{
"scripts": {
"lint:markdown": "markdownlint-cli2"
}
}
```
## Usage
```sh
npm run lint:markdown
```
## 💡 Contributing
Anyone can help to improve the project, submit a Feature Request, a bug report or even correct a simple spelling mistake.
The steps to contribute can be found in the [CONTRIBUTING.md](./CONTRIBUTING.md) file.
## 📄 License
[MIT](./LICENSE)