Lint JS, JSX, TypeScript, and more inside Markdown.
Install the plugin alongside ESLint v8 or greater:
npm install --save-dev eslint @eslint/markdown
Configuration Name | Description |
---|---|
recommended |
Lints all .md files with the recommended rules and assumes CommonMark format. |
processor |
Enables extracting code blocks from all .md files so code blocks can be individually linted. |
In your eslint.config.js
file, import @eslint/markdown
and include the recommended config to enable the Markdown processor on all .md
files:
// eslint.config.js
import markdown from "@eslint/markdown";
export default [
...markdown.configs.recommended
// your other configs here
];
Rule Name | Description | Recommended |
---|---|---|
fenced-code-language |
Require languages for fenced code blocks. | yes |
heading-increment |
Enforce heading levels increment by one. | yes |
no-duplicate-headings |
Disallow duplicate headings in the same document. | no |
no-empty-links |
Disallow empty links. | yes |
no-html |
Disallow HTML tags. | no |
no-invalid-label-refs |
Disallow invalid label references. | yes |
no-missing-label-refs |
Disallow missing label references. | yes |
Note: This plugin does not provide formatting rules. We recommend using a source code formatter such as Prettier for that purpose.
In order to individually configure a rule in your eslint.config.js
file, import @eslint/markdown
and configure each rule with a prefix:
// eslint.config.js
import markdown from "@eslint/markdown";
export default [
{
files: ["**/*.md"],
plugins: {
markdown
},
rules: {
"markdown/no-html": "error"
}
}
];
Language Name | Description |
---|---|
commonmark |
Parse using CommonMark Markdown format |
gfm |
Parse using GitHub-Flavored Markdown format |
In order to individually configure a language in your eslint.config.js
file, import @eslint/markdown
and configure a language
:
// eslint.config.js
import markdown from "@eslint/markdown";
export default [
{
files: ["**/*.md"],
plugins: {
markdown
},
language: "markdown/gfm",
rules: {
"markdown/no-html": "error"
}
}
];
Processor Name | Description |
---|---|
markdown |
Extract fenced code blocks from the Markdown code so they can be linted separately. |
vscode-eslint
has built-in support for the Markdown processor.
The linter-eslint
package allows for linting within the Atom IDE.
In order to see @eslint/markdown
work its magic within Markdown code blocks in your Atom editor, you can go to linter-eslint
's settings and within "List of scopes to run ESLint on...", add the cursor scope "source.gfm".
However, this reports a problem when viewing Markdown which does not have configuration, so you may wish to use the cursor scope "source.embedded.js", but note that @eslint/markdown
configuration comments and skip directives won't work in this context.
$ git clone https://github.com/eslint/markdown.git
$ cd markdown
$ npm install
$ npm test
This project follows the ESLint contribution guidelines.