Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/leo-buneev/eslint-plugin-md
Allows you to lint markdown code in your *.md files.
https://github.com/leo-buneev/eslint-plugin-md
eslint eslint-plugin eslintplugin markdown md remark remark-lint
Last synced: 2 months ago
JSON representation
Allows you to lint markdown code in your *.md files.
- Host: GitHub
- URL: https://github.com/leo-buneev/eslint-plugin-md
- Owner: leo-buneev
- Created: 2020-03-14T15:55:31.000Z (almost 5 years ago)
- Default Branch: master
- Last Pushed: 2023-01-05T10:14:53.000Z (almost 2 years ago)
- Last Synced: 2024-10-20T04:21:42.012Z (2 months ago)
- Topics: eslint, eslint-plugin, eslintplugin, markdown, md, remark, remark-lint
- Language: JavaScript
- Homepage:
- Size: 1.34 MB
- Stars: 16
- Watchers: 1
- Forks: 5
- Open Issues: 23
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# eslint-plugin-md
An ESLint plugin to lint and fix markdown files. It uses amazing [remark-lint](https://github.com/remarkjs/remark-lint)
under the hood. Also enables using `prettier` to automatically format your markdown files right from `eslint`!## Motivation
ESLint is a tool for linting Javascript. There is another plugin called `eslint-plugin-markdown`, however it is still
only linting Javascript parts inside `*.md` files, and leaves Markdown itself untouched.Wouldn't it be cool, if we could use ESLint to enforce style of Markdown itself? That is what this plugin is for!
## Installation
You'll first need to install [ESLint](http://eslint.org):
```bash
$ npm i eslint --save-dev
# or
$ yarn add -D eslint
```Next, install `eslint-plugin-md`:
```bash
$ npm install eslint-plugin-md --save-dev
# or
$ yarn add -D eslint-plugin-md
```**Note:** If you installed ESLint globally (using the `npm -g` or `yarn global`) then you must also install
`eslint-plugin-md` globally.## Usage
Add `plugin:md/recommended` config to `extends` section of your your `.eslintrc` configuration file
```js
// .eslintrc.js
module.exports = {
extends: ['plugin:md/recommended'],
overrides: [
{
files: ['*.md'],
parser: 'markdown-eslint-parser',
},
],
}
```And this is it! By default it will apply all rules from
[Markdown style guide](https://github.com/remarkjs/remark-lint/tree/master/packages/remark-preset-lint-markdown-style-guide).**Note:** By default ESLint won't lint \*.md files. So:
- If you use ESLint from CLI, use `--ext` parameter (e.g. `eslint . --ext js,md`)
- If you use VSCode with ESLint plugin, add `"eslint.validate": ["markdown"]` in your VSCode preferences## Usage with eslint-plugin-prettier
[Prettier](https://prettier.io/) is an amazing code formatter that supports many languages, including markdown. It is
common to use prettier as a rule in ESLint via amazing
[eslint-plugin-prettier](https://github.com/prettier/eslint-plugin-prettier).This plugin can play nicely together with `eslint-plugin-prettier` (meaning that first code will be formatted via
prettier, and then remark rules will be applied). Typical eslint configuration will look like this:```bash
yarn add -D eslint eslint-plugin-prettier eslint-plugin-md
``````js
// .eslintrc.js
module.exports = {
extends: ['plugin:prettier/recommended', 'plugin:md/recommended'],
overrides: [
{
files: ['*.md'],
parser: 'markdown-eslint-parser',
rules: {
'prettier/prettier': [
'error',
// Important to force prettier to use "markdown" parser - otherwise it wouldn't be able to parse *.md files.
// You also can configure other options supported by prettier here - "prose-wrap" is
// particularly useful for *.md files
{ parser: 'markdown' },
],
},
},
],
}
```## Modifying eslint setup for js code inside \*.md files
By default, code inside fenced code block marked as js language (` ```js `) will be linted against your default eslint
configuration for js files. However, that may be undesirable - usually you will want less strict rules for JS code in
\*.md files.To modify setup, you can use "overrides" section in your eslintrc in this way:
```js
// .eslintrc.js
module.exports = {
extends: ['plugin:md/recommended'],
overrides: [
{
files: ['*.md'],
parser: 'markdown-eslint-parser',
},
{
files: ['*.md.js'], // Will match js code inside *.md files
rules: {
// Example - disable 2 core eslint rules 'no-unused-vars' and 'no-undef'
'no-unused-vars': 'off',
'no-undef': 'off',
},
},
],
}
```## Supported Rules
This plugin exposes only one eslint rule - `md/remark`. However, you can customize remark configuration however you
wish.```js
// .eslintrc.js
module.exports = {
extends: ['plugin:md/recommended'],
rules: {
'md/remark': [
'error',
{
// This object corresponds to object you would export in .remarkrc file
plugins: ['preset-lint-markdown-style-guide', 'frontmatter', ['lint-maximum-line-length', false]],
},
],
},
overrides: [
{
files: ['*.md'],
parser: 'markdown-eslint-parser',
},
],
}
```"Plugin" in remark can mean many things, but for our purposes it can be either remark rule or remark preset. See list of
available rules [here](https://github.com/remarkjs/remark-lint/blob/master/doc/rules.md), and list of available presets
(=set of rules) [here](https://github.com/remarkjs/remark-lint#list-of-presets).Remark also supports [External rules](https://github.com/remarkjs/remark-lint#list-of-external-rules). You can use those
as well, just make sure to install corresponding package first. For example, if you want to use
[alphabetize-lists](https://github.com/vhf/remark-lint-alphabetize-lists) external rule:```bash
yarn add -D remark-lint-alphabetize-lists
``````js
// .eslintrc.js
module.exports = {
extends: ['plugin:md/recommended'],
rules: {
'md/remark': [
'error',
{
// This object corresponds to object you would export in .remarkrc file
plugins: ['preset-lint-markdown-style-guide', 'frontmatter', 'remark-lint-alphabetize-lists'],
},
],
},
overrides: [
{
files: ['*.md'],
parser: 'markdown-eslint-parser',
},
],
}
```