/eslint-plugin-markdown-preferences

ESLint plugin that enforces our markdown preferences.

Primary LanguageTypeScriptMIT LicenseMIT

eslint-plugin-markdown-preferences

A specialized ESLint plugin that helps enforce consistent writing style and formatting conventions in Markdown files. Perfect for documentation projects, blog posts, and any Markdown content where consistency matters.

NPM license NPM version NPM downloads NPM downloads NPM downloads NPM downloads NPM downloads Build Status

πŸ“› Features

  • πŸ“ Comprehensive style enforcement Enforces consistent heading casing, table header casing, inline code/link usage, emoji notation, and more for unified document style.
  • 🧩 Powerful formatting consistency Strongly standardizes Markdown formatting: whitespace, indentation, spacing, line breaks, list markers, code fences, links, references, thematic breaks, tables, and decorative elementsβ€”ensuring documents are clean and uniform.
  • πŸš€ Extended Markdown syntax support Supports custom containers, mathematical expressions, and other extended syntax for high compatibility with VitePress.
  • πŸ”§ Auto-fix support Most rules support ESLint's --fix option for automatic correction.
  • 🌐 Online Demo & Documentation Try it instantly in the Online Demo and see full documentation.

πŸ“– Documentation

For detailed usage instructions, rule configurations, and examples, visit our comprehensive documentation site.

πŸ’Ώ Installation

npm install --save-dev eslint @eslint/markdown eslint-plugin-markdown-preferences

πŸ“– Usage

Configuration

New Config (eslint.config.js)

Use eslint.config.js file to configure rules. See also: https://eslint.org/docs/latest/use/configure/configuration-files-new.

Example eslint.config.js:

import { defineConfig } from "eslint/config";
// import markdown from "@eslint/markdown";
import markdownPreferences from "eslint-plugin-markdown-preferences";
export default defineConfig([
  // add more generic rule sets here, such as:
  // markdown.configs.recommended,
  markdownPreferences.configs.recommended,
  {
    files: ["**/*.md", "*.md"],
    rules: {
      // override/add rules settings here, such as:
      // 'markdown-preferences/prefer-linked-words': 'error'
    },
  },
]);

This plugin provides configs:

  • *.configs.recommended ... Recommended config provided by the plugin.
  • *.configs.standard ... Enforces opinionated stylistic conventions. You can extend this to enforce any stylistic conventions you like.

See the rule list to get the rules that this plugin provides.

Using Extended Syntax

This plugin experimentally supports some extended Markdown syntax.
To use these extended syntaxes, set the markdown-preferences/extended-syntax language option.

import { defineConfig } from "eslint/config";
import markdownPreferences from "eslint-plugin-markdown-preferences";
export default defineConfig([
  {
    extends: [markdownPreferences.configs.recommended],
    language: "markdown-preferences/extended-syntax",
  },
]);

The following syntaxes are supported:

Legacy Config (.eslintrc)

Is not supported.

βœ… Rules

The --fix option on the command line automatically fixes problems reported by rules which have a wrench πŸ”§ below.
The rules with the following ⭐ are included in the recommended config.
The rules with the following πŸ’„ are included in the standard config.

Preference Rules

  • Rules to unify the expression and description style of documents.
Rule ID Description Fixable Config
markdown-preferences/canonical-code-block-language enforce canonical language names in code blocks πŸ”§
markdown-preferences/emoji-notation enforce consistent emoji notation style in Markdown files. πŸ”§
markdown-preferences/heading-casing enforce consistent casing in headings. πŸ”§
markdown-preferences/ordered-list-marker-start enforce that ordered list markers start with 1 or 0 πŸ”§ πŸ’„
markdown-preferences/prefer-inline-code-words enforce the use of inline code for specific words. πŸ”§
markdown-preferences/prefer-linked-words enforce the specified word to be a link. πŸ”§
markdown-preferences/table-header-casing enforce consistent casing in table header cells. πŸ”§

Notation Rules

  • Rules related to notation styles in Markdown.
Rule ID Description Fixable Config
markdown-preferences/bullet-list-marker-style enforce consistent bullet list (unordered list) marker style πŸ”§ πŸ’„
markdown-preferences/code-fence-style enforce a consistent code fence style (backtick or tilde) in Markdown fenced code blocks. πŸ”§ πŸ’„
markdown-preferences/definitions-last require link definitions and footnote definitions to be placed at the end of the document πŸ”§
markdown-preferences/emphasis-delimiters-style enforce a consistent delimiter style for emphasis and strong emphasis πŸ”§ πŸ’„
markdown-preferences/hard-linebreak-style enforce consistent hard linebreak style. πŸ”§ β­πŸ’„
markdown-preferences/level1-heading-style enforce consistent style for level 1 headings πŸ”§ πŸ’„
markdown-preferences/level2-heading-style enforce consistent style for level 2 headings πŸ”§ πŸ’„
markdown-preferences/link-destination-style enforce a consistent style for link destinations πŸ”§ πŸ’„
markdown-preferences/link-title-style enforce a consistent style for link titles πŸ”§ πŸ’„
markdown-preferences/no-implicit-block-closing disallow implicit block closing for fenced code blocks, math blocks, and custom containers πŸ”§ β­πŸ’„
markdown-preferences/no-text-backslash-linebreak disallow text backslash at the end of a line. β­πŸ’„
markdown-preferences/ordered-list-marker-style enforce consistent ordered list marker style πŸ”§ πŸ’„
markdown-preferences/prefer-autolinks enforce the use of autolinks for URLs πŸ”§ β­πŸ’„
markdown-preferences/prefer-fenced-code-blocks enforce the use of fenced code blocks over indented code blocks πŸ”§ β­πŸ’„
markdown-preferences/prefer-link-reference-definitions enforce using link reference definitions instead of inline links πŸ”§
markdown-preferences/strikethrough-delimiters-style enforce a consistent delimiter style for strikethrough πŸ”§ πŸ’„
markdown-preferences/thematic-break-character-style enforce consistent character style for thematic breaks (horizontal rules) in Markdown. πŸ”§ πŸ’„

Whitespace Rules

  • Rules related to whitespace styles in Markdown.
Rule ID Description Fixable Config
markdown-preferences/blockquote-marker-alignment enforce consistent alignment of blockquote markers πŸ”§ β­πŸ’„
markdown-preferences/code-fence-spacing require or disallow spacing between opening code fence and language identifier πŸ”§ πŸ’„
markdown-preferences/custom-container-marker-spacing require or disallow spacing between opening custom container marker and info πŸ”§ πŸ’„
markdown-preferences/indent enforce consistent indentation in Markdown files πŸ”§ πŸ’„
markdown-preferences/link-bracket-newline enforce linebreaks after opening and before closing link brackets πŸ”§ πŸ’„
markdown-preferences/link-bracket-spacing enforce consistent spacing inside link brackets πŸ”§ πŸ’„
markdown-preferences/link-paren-newline enforce linebreaks after opening and before closing link parentheses πŸ”§ πŸ’„
markdown-preferences/link-paren-spacing enforce consistent spacing inside link parentheses πŸ”§ πŸ’„
markdown-preferences/list-marker-alignment enforce consistent alignment of list markers πŸ”§ β­πŸ’„
markdown-preferences/no-multi-spaces disallow multiple spaces πŸ”§ πŸ’„
markdown-preferences/no-multiple-empty-lines disallow multiple empty lines in Markdown files. πŸ”§ πŸ’„
markdown-preferences/no-trailing-spaces disallow trailing whitespace at the end of lines in Markdown files. πŸ”§ πŸ’„
markdown-preferences/padded-custom-containers disallow or require padding inside custom containers πŸ”§ πŸ’„
markdown-preferences/padding-line-between-blocks require or disallow padding lines between blocks πŸ”§ πŸ’„
markdown-preferences/table-pipe-spacing enforce consistent spacing around table pipes πŸ”§ πŸ’„

Decorative Rules

  • Rules related to visual or stylistic decorations in Markdown.
Rule ID Description Fixable Config
markdown-preferences/atx-heading-closing-sequence-length enforce consistent length for the closing sequence (trailing #s) in ATX headings. πŸ”§ πŸ’„
markdown-preferences/atx-heading-closing-sequence enforce consistent use of closing sequence in ATX headings. πŸ”§ πŸ’„
markdown-preferences/code-fence-length enforce consistent code fence length in fenced code blocks. πŸ”§ πŸ’„
markdown-preferences/no-laziness-blockquotes disallow laziness in blockquotes β­πŸ’„
markdown-preferences/ordered-list-marker-sequence enforce that ordered list markers use sequential numbers πŸ”§ πŸ’„
markdown-preferences/setext-heading-underline-length enforce setext heading underline length πŸ”§ πŸ’„
markdown-preferences/sort-definitions enforce a specific order for link definitions and footnote definitions πŸ”§ πŸ’„
markdown-preferences/table-leading-trailing-pipes enforce consistent use of leading and trailing pipes in tables. πŸ”§ πŸ’„
markdown-preferences/table-pipe-alignment enforce consistent alignment of table pipes πŸ”§ πŸ’„
markdown-preferences/thematic-break-length enforce consistent length for thematic breaks (horizontal rules) in Markdown. πŸ”§ πŸ’„
markdown-preferences/thematic-break-sequence-pattern enforce consistent repeating patterns for thematic breaks (horizontal rules) in Markdown. πŸ”§ πŸ’„

πŸ‘« Related Packages

🍻 Contributing

Welcome contributing!

Please use GitHub's Issues/PRs.

Development Tools

  • npm test runs tests and measures coverage.
  • npm run update runs in order to update readme and recommended configuration.

πŸ”’ License

See the LICENSE file for license rights and limitations (MIT).