{"id":13465019,"url":"https://github.com/remarkjs/remark-lint","last_synced_at":"2025-12-12T04:19:48.574Z","repository":{"id":31555358,"uuid":"35120039","full_name":"remarkjs/remark-lint","owner":"remarkjs","description":"plugins to check (lint) markdown code style","archived":false,"fork":false,"pushed_at":"2025-04-10T09:46:00.000Z","size":4921,"stargazers_count":971,"open_issues_count":4,"forks_count":135,"subscribers_count":18,"default_branch":"main","last_synced_at":"2025-05-07T21:03:10.134Z","etag":null,"topics":["check","lint","markdown","remark","remark-lint","remark-plugin","style","style-linter"],"latest_commit_sha":null,"homepage":"https://remark.js.org","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"AospExtended/platform_packages_apps_Contacts","license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/remarkjs.png","metadata":{"files":{"readme":"readme.md","changelog":"changelog.md","contributing":null,"funding":null,"license":"license","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":"unifiedjs","open_collective":"unified"}},"created_at":"2015-05-05T19:38:58.000Z","updated_at":"2025-04-30T19:34:36.000Z","dependencies_parsed_at":"2023-11-09T16:24:42.309Z","dependency_job_id":"a916684d-22a8-45a8-b669-b12e2aba36ce","html_url":"https://github.com/remarkjs/remark-lint","commit_stats":{"total_commits":555,"total_committers":51,"mean_commits":"10.882352941176471","dds":"0.11351351351351346","last_synced_commit":"425cef690d661ae1c5006b18119bcb499ff32b13"},"previous_names":["wooorm/remark-lint","wooorm/mdast-lint"],"tags_count":117,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/remarkjs%2Fremark-lint","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/remarkjs%2Fremark-lint/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/remarkjs%2Fremark-lint/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/remarkjs%2Fremark-lint/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/remarkjs","download_url":"https://codeload.github.com/remarkjs/remark-lint/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252989947,"owners_count":21836667,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["check","lint","markdown","remark","remark-lint","remark-plugin","style","style-linter"],"created_at":"2024-07-31T14:00:55.227Z","updated_at":"2025-12-12T04:19:48.483Z","avatar_url":"https://github.com/remarkjs.png","language":"JavaScript","funding_links":["https://github.com/sponsors/unifiedjs","https://opencollective.com/unified"],"categories":["Spell Checking and Linting","JavaScript","Tools","markdown","Plugins"],"sub_categories":["Linters"],"readme":"# ![remark-lint][file-logo]\n\n[![Build][badge-build-image]][badge-build-url]\n[![Coverage][badge-coverage-image]][badge-coverage-url]\n[![Downloads][badge-downloads-image]][badge-downloads-url]\n[![Size][badge-size-image]][badge-size-url]\n[![Sponsors][badge-sponsors-image]][badge-collective-url]\n[![Backers][badge-backers-image]][badge-collective-url]\n[![Chat][badge-chat-image]][badge-chat-url]\n\n**[remark][github-remark]** plugins to check (lint) markdown code style.\n\n## Contents\n\n* [What is this?](#what-is-this)\n* [When should I use this?](#when-should-i-use-this)\n* [Presets](#presets)\n* [Rules](#rules)\n* [Configure](#configure)\n* [Ignore warnings](#ignore-warnings)\n* [Examples](#examples)\n  * [Example: check markdown on the API](#example-check-markdown-on-the-api)\n  * [Example: check and format markdown on the API](#example-check-and-format-markdown-on-the-api)\n  * [Example: check markdown on the CLI](#example-check-markdown-on-the-cli)\n  * [Example: check and format markdown on the CLI](#example-check-and-format-markdown-on-the-cli)\n* [Integrations](#integrations)\n* [Syntax](#syntax)\n* [Compatibility](#compatibility)\n* [Security](#security)\n* [Contribute](#contribute)\n* [License](#license)\n\n## What is this?\n\n![](screenshot.png)\n\nYou can use this to check markdown.\nSay we have a markdown file `doc/example.md` that contains:\n\n```markdown\n1) Hello, _Jupiter_ and *Neptune*!\n```\n\nThen assuming we installed dependencies and run:\n\n```sh\nnpx remark doc/ --use remark-preset-lint-consistent --use remark-preset-lint-recommended\n```\n\nWe would get a report like this:\n\n```text\ndoc/example.md\n1:2           warning Unexpected ordered list marker `)`, expected `.`                  ordered-list-marker-style remark-lint\n1:25-1:34     warning Unexpected emphasis marker `*`, expected `_`                      emphasis-marker           remark-lint\n  [cause]:\n    1:11-1:20 info    Emphasis marker style `'_'` first defined for `'consistent'` here emphasis-marker           remark-lint\n\n⚠ 2 warnings\n```\n\nThis GitHub repository is a monorepo that contains ±70 plugins (each a rule that\nchecks one specific thing) and 3 presets (combinations of rules configured to\ncheck for certain styles).\n\nThese packages are build on [unified][github-unified]\n([remark][github-remark]).\n**unified** is a project that inspects and transforms content with abstract\nsyntax trees (ASTs).\n**remark** adds support for markdown to unified.\n**mdast** is the markdown AST that remark uses.\nThese lint rules inspect mdast.\n\n## When should I use this?\n\nThis project is useful when developers or technical writers are authoring\ndocumentation in markdown and you want to ensure that the markdown is\nconsistent, free of bugs, and works well across different markdown parsers.\n\nThese packages are quite good at checking markdown.\nThey especially shine when combined with other\n[remark plugins][github-remark-plugin]\nand at letting you make your own rules.\n\n## Presets\n\nPresets are combinations of rules configured to check for certain styles.\nThe following presets only contain lint rules but you can make your own that\ninclude any remark plugins or other presets.\nThe presets that are maintained here:\n\n\u003c!--presets start--\u003e\n\n* [`remark-preset-lint-consistent`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-preset-lint-consistent) — rules that enforce consistency\n* [`remark-preset-lint-markdown-style-guide`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-preset-lint-markdown-style-guide) — rules that enforce the markdown style guide\n* [`remark-preset-lint-recommended`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-preset-lint-recommended) — rules that prevent mistakes or stuff that fails across vendors.\n\n\u003c!--presets end--\u003e\n\n## Rules\n\nThe rules that are maintained here:\n\n\u003c!--\n  👉 **Note**: the following list is automatically generated.\n--\u003e\n\n\u003c!--rules start--\u003e\n\n* [`remark-lint-blockquote-indentation`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-blockquote-indentation) — check whitespace after block quote markers\n* [`remark-lint-checkbox-character-style`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-checkbox-character-style) — check list item checkbox characters\n* [`remark-lint-checkbox-content-indent`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-checkbox-content-indent) — warn when too much whitespace follows list item checkboxes\n* [`remark-lint-code-block-style`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-code-block-style) — warn when code blocks do not adhere to a given style\n* [`remark-lint-correct-media-syntax`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-correct-media-syntax) — check for accidental bracket and paren mixup for images and links\n* [`remark-lint-definition-case`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-definition-case) — warn when definition labels are not lowercase\n* [`remark-lint-definition-sort`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-definition-sort) — check definition order\n* [`remark-lint-definition-spacing`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-definition-spacing) — warn when consecutive whitespace is used in a definition\n* [`remark-lint-directive-attribute-sort`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-directive-attribute-sort) — check directive attribute order\n* [`remark-lint-directive-collapsed-attribute`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-directive-collapsed-attribute) — check that collapsed attributes are used in directives\n* [`remark-lint-directive-quote-style`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-directive-quote-style) — check quotes of directive attributes\n* [`remark-lint-directive-shortcut-attribute`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-directive-shortcut-attribute) — check that shortcut attributes are used in directives\n* [`remark-lint-directive-unique-attribute-name`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-directive-unique-attribute-name) — check that attribute names are unique\n* [`remark-lint-emphasis-marker`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-emphasis-marker) — warn when emphasis markers violate the given style\n* [`remark-lint-fenced-code-flag`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-fenced-code-flag) — warn when fenced code blocks occur without language flag\n* [`remark-lint-fenced-code-marker`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-fenced-code-marker) — warn when fenced code markers violate the given style\n* [`remark-lint-file-extension`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-file-extension) — warn when the file’s extension violates the given style\n* [`remark-lint-final-definition`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-final-definition) — warn when definitions are not placed at the end of the file\n* [`remark-lint-final-newline`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-final-newline) — warn when a newline at the end of a file is missing\n* [`remark-lint-first-heading-level`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-first-heading-level) — warn when the first heading has a level other than a specified value\n* [`remark-lint-hard-break-spaces`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-hard-break-spaces) — warn when too many spaces are used to create a hard break\n* [`remark-lint-heading-increment`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-heading-increment) — warn when headings increment with more than 1 level at a time\n* [`remark-lint-heading-style`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-heading-style) — warn when heading style violates the given style\n* [`remark-lint-linebreak-style`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-linebreak-style) — warn when linebreaks violate a given or detected style\n* [`remark-lint-link-title-style`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-link-title-style) — warn when link and definition titles occur with incorrect quotes\n* [`remark-lint-list-item-bullet-indent`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-list-item-bullet-indent) — warn when list item bullets are indented\n* [`remark-lint-list-item-content-indent`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-list-item-content-indent) — warn when the content of a list item has mixed indentation\n* [`remark-lint-list-item-indent`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-list-item-indent) — check the spacing between list item bullets and content\n* [`remark-lint-list-item-spacing`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-list-item-spacing) — warn when list looseness is incorrect\n* [`remark-lint-maximum-heading-length`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-maximum-heading-length) — warn when headings are too long\n* [`remark-lint-maximum-line-length`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-maximum-line-length) — warn when lines are too long\n* [`remark-lint-mdx-jsx-attribute-sort`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-mdx-jsx-attribute-sort) — check mdx jsx attribute order\n* [`remark-lint-mdx-jsx-no-void-children`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-mdx-jsx-no-void-children) — check mdx jsx quotes\n* [`remark-lint-mdx-jsx-quote-style`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-mdx-jsx-quote-style) — check mdx jsx quotes\n* [`remark-lint-mdx-jsx-self-close`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-mdx-jsx-self-close) — check that self-closing tags are used when possible\n* [`remark-lint-mdx-jsx-shorthand-attribute`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-mdx-jsx-shorthand-attribute) — check that shorthand attributes are used in MDX JSX\n* [`remark-lint-mdx-jsx-unique-attribute-name`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-mdx-jsx-unique-attribute-name) — check that mdx jsx attributes are unique\n* [`remark-lint-media-style`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-media-style) — check whether references or resources are used\n* [`remark-lint-no-blockquote-without-marker`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-no-blockquote-without-marker) — warn when block quotes have blank lines without markers\n* [`remark-lint-no-consecutive-blank-lines`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-no-consecutive-blank-lines) — warn for too many consecutive blank lines\n* [`remark-lint-no-duplicate-defined-urls`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-no-duplicate-defined-urls) — warn on definitions that define the same urls\n* [`remark-lint-no-duplicate-definitions`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-no-duplicate-definitions) — warn on duplicate definitions\n* [`remark-lint-no-duplicate-headings`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-no-duplicate-headings) — warn on duplicate headings\n* [`remark-lint-no-duplicate-headings-in-section`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-no-duplicate-headings-in-section) — warn on duplicate headings in a section\n* [`remark-lint-no-emphasis-as-heading`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-no-emphasis-as-heading) — warn when emphasis or importance is used instead of a heading\n* [`remark-lint-no-empty-url`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-no-empty-url) — warn on empty URLs in links and images\n* [`remark-lint-no-file-name-articles`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-no-file-name-articles) — warn when file name start with an article\n* [`remark-lint-no-file-name-consecutive-dashes`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-no-file-name-consecutive-dashes) — warn when file names contain consecutive dashes\n* [`remark-lint-no-file-name-irregular-characters`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-no-file-name-irregular-characters) — warn when file names contain irregular characters\n* [`remark-lint-no-file-name-mixed-case`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-no-file-name-mixed-case) — warn when file names use mixed case\n* [`remark-lint-no-file-name-outer-dashes`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-no-file-name-outer-dashes) — warn when file names contain initial or final dashes\n* [`remark-lint-no-heading-content-indent`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-no-heading-content-indent) — warn when heading content is indented\n* [`remark-lint-no-heading-indent`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-no-heading-indent) — warn when headings are indented\n* [`remark-lint-no-heading-like-paragraph`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-no-heading-like-paragraph) — for too many hashes (h7+ “headings”)\n* [`remark-lint-no-heading-punctuation`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-no-heading-punctuation) — warn when headings end in illegal characters\n* [`remark-lint-no-hidden-table-cell`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-no-hidden-table-cell) — check superfluous table cells\n* [`remark-lint-no-html`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-no-html) — warn when HTML nodes are used\n* [`remark-lint-no-literal-urls`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-no-literal-urls) — warn when URLs without angle brackets are used\n* [`remark-lint-no-missing-blank-lines`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-no-missing-blank-lines) — warn when missing blank lines\n* [`remark-lint-no-multiple-toplevel-headings`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-no-multiple-toplevel-headings) — warn when multiple top level headings are used\n* [`remark-lint-no-paragraph-content-indent`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-no-paragraph-content-indent) — warn when the content in paragraphs are indented\n* [`remark-lint-no-reference-like-url`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-no-reference-like-url) — warn when URLs are also defined identifiers\n* [`remark-lint-no-shell-dollars`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-no-shell-dollars) — warn when shell code is prefixed by dollars\n* [`remark-lint-no-shortcut-reference-image`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-no-shortcut-reference-image) — warn when shortcut reference images are used\n* [`remark-lint-no-shortcut-reference-link`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-no-shortcut-reference-link) — warn when shortcut reference links are used\n* [`remark-lint-no-table-indentation`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-no-table-indentation) — warn when tables are indented\n* [`remark-lint-no-tabs`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-no-tabs) — warn when hard tabs are used instead of spaces\n* [`remark-lint-no-undefined-references`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-no-undefined-references) — warn when references to undefined definitions are found\n* [`remark-lint-no-unneeded-full-reference-image`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-no-unneeded-full-reference-image) — check that full reference images can be collapsed\n* [`remark-lint-no-unneeded-full-reference-link`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-no-unneeded-full-reference-link) — check that full reference links can be collapsed\n* [`remark-lint-no-unused-definitions`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-no-unused-definitions) — warn when unused definitions are found\n* [`remark-lint-ordered-list-marker-style`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-ordered-list-marker-style) — warn when the markers of ordered lists violate a given style\n* [`remark-lint-ordered-list-marker-value`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-ordered-list-marker-value) — check the marker value of ordered lists\n* [`remark-lint-rule-style`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-rule-style) — warn when horizontal rules violate a given style\n* [`remark-lint-strikethrough-marker`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-strikethrough-marker) — warn when strikethrough markers violate the given style\n* [`remark-lint-strong-marker`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-strong-marker) — warn when importance (strong) markers violate the given style\n* [`remark-lint-table-cell-padding`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-table-cell-padding) — warn when table cells are incorrectly padded\n* [`remark-lint-table-pipe-alignment`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-table-pipe-alignment) — warn when table pipes are not aligned\n* [`remark-lint-table-pipes`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-table-pipes) — warn when table rows are not fenced with pipes\n* [`remark-lint-unordered-list-marker-style`](https://github.com/remarkjs/remark-lint/tree/main/packages/remark-lint-unordered-list-marker-style) — warn when markers of unordered lists violate a given style\n\n\u003c!--rules end--\u003e\n\n\u003c!--Old ID of this section:--\u003e\n\n\u003ca name=\"list-of-external-rules\"\u003e\u003c/a\u003e\n\nYou can make and share your own rules, which can be used just like the rules\nmaintained here.\nThe following rules are maintained by the community:\n\n\u003c!--\n  👉 **Note**: this list is ordered based on the name without prefix, so\n  excluding `remark-lint-`\n--\u003e\n\n* [`remark-lint-alphabetize-lists`](https://github.com/vhf/remark-lint-alphabetize-lists)\n  — ensure list items are in alphabetical order\n* [`remark-lint-appropriate-heading`](https://github.com/RichardLitt/remark-lint-appropriate-heading)\n  — check that the top level heading matches the directory name\n* [`remark-lint-are-links-valid`](https://github.com/wemake-services/remark-lint-are-links-valid)\n  — check if your links are reachable and/or unique\n* [`remark-lint-blank-lines-1-0-2`](https://github.com/vhf/remark-lint-blank-lines-1-0-2)\n  — ensure a specific number of lines between blocks\n* [`remark-lint-books-links`](https://github.com/vhf/remark-lint-books-links)\n  — ensure links in lists of books follow a standard format\n* [`remark-lint-check-toc`](https://github.com/ilyatitovich/remark-lint-check-toc)\n  — ensure TOC is correct\n* [`remark-lint-code`](https://github.com/Qard/remark-lint-code)\n  — lint fenced code blocks by corresponding language tags,\n  currently supporting [ESLint](https://github.com/Qard/remark-lint-code-eslint)\n* [`remark-lint-code-block-split-list`](https://github.com/ilyatitovich/remark-lint-code-block-split-list)\n  — ensure code block inside list doesn't split the list\n* [`remark-lint-double-link`](https://github.com/Scrum/remark-lint-double-link)\n  — ensure the same URL is not linked multiple times.\n* [`remark-lint-emoji-limit`](https://github.com/zerok/remark-lint-emoji-limit)\n  — enforce a limit of emoji per paragraph\n* [`remark-lint-fenced-code-flag-case`](https://github.com/Xunnamius/unified-utils/blob/main/packages/remark-lint-fenced-code-flag-case)\n  — warn when fenced code blocks have improperly cased language flags\n* [`remark-lint-frontmatter-schema`](https://github.com/JulianCataldo/remark-lint-frontmatter-schema)\n  — validate YAML frontmatter against a JSON schema\n* [`remark-lint-heading-capitalization`](https://github.com/ilyatitovich/remark-lint-heading-capitalization)\n  — ensure headings capitalization is correct\n* [`remark-lint-heading-length`](https://github.com/zerok/remark-lint-heading-length)\n  — ensure headings have the appropriate length\n* [`remark-lint-heading-whitespace`](https://github.com/vhf/remark-lint-heading-whitespace)\n  — ensure heading parsing is not broken by weird whitespace\n* [`remark-lint-heading-word-length`](https://github.com/Xunnamius/unified-utils/tree/main/packages/remark-lint-heading-word-length)\n  — warn when headings have too many or too few words with unicode support\n* [`remark-lint-list-item-style`](https://github.com/Xunnamius/unified-utils/blob/main/packages/remark-lint-list-item-style)\n  — warn when list items violate a given capitalization or punctuation style\n* [`remark-lint-match-punctuation`](https://github.com/laysent/remark-lint-plugins/tree/HEAD/packages/remark-lint-match-punctuation)\n  — ensures punctuations are used in pairs if necessary.\n* [`remark-lint-mdash-style`](https://github.com/alexandrtovmach/remark-lint-mdash-style)\n  — ensure em-dash (`—`) style follows a standard format\n* [`remark-lint-no-chinese-punctuation-in-number`](https://github.com/laysent/remark-lint-plugins/tree/HEAD/packages/remark-lint-no-chinese-punctuation-in-number)\n  — ensures that Chinese punctuation’s not used in numbers\n* [`remark-lint-no-dead-urls`](https://github.com/davidtheclark/remark-lint-no-dead-urls)\n  — check that external links are alive\n* [`remark-lint-no-empty-sections`](https://github.com/vhf/remark-lint-no-empty-sections)\n  — ensure every heading is followed by content (forming a section)\n* [`remark-lint-no-long-code`](https://github.com/laysent/remark-lint-plugins/tree/HEAD/packages/remark-lint-no-long-code)\n  — ensures that each line in code block won't be too long.\n* [`remark-lint-no-repeat-punctuation`](https://github.com/laysent/remark-lint-plugins/tree/HEAD/packages/remark-lint-no-repeat-punctuation)\n  — ensures punctuation is not repeated\n* [`remark-lint-no-url-trailing-slash`](https://github.com/vhf/remark-lint-no-url-trailing-slash)\n  — ensure that the `href` of links has no trailing slash\n* [`remark-lint-spaces-around-number`](https://github.com/laysent/remark-lint-plugins/tree/HEAD/packages/remark-lint-spaces-around-number)\n  — ensures there are spaces around number and Chinese.\n* [`remark-lint-spaces-around-word`](https://github.com/laysent/remark-lint-plugins/tree/HEAD/packages/remark-lint-spaces-around-word)\n  — ensures there are spaces around English word and Chinese.\n* [`remark-lint-write-good`](https://github.com/zerok/remark-lint-write-good)\n  — wrapper for `write-good`\n\nFor help creating your own rule, it’s suggested to look at existing rules and to\n[follow this tutorial][file-create-a-custom-rule].\n\n## Configure\n\n\u003c!--Old ID of this section:--\u003e\n\n\u003ca name=\"configuring-remark-lint\"\u003e\u003c/a\u003e\n\nAll rules can be configured in one standard way:\n\n```js\nimport {remark} from 'remark'\nimport remarkLintFinalNewline from 'remark-lint-final-newline'\nimport remarkLintMaximumLineLength from 'remark-lint-maximum-line-length'\nimport remarkLintUnorderedListMarkerStyle from 'remark-lint-unordered-list-marker-style'\n\nremark()\n  // Pass `false` to turn a rule off — the code no longer runs:\n  .use(remarkLintFinalNewline, false)\n  // Pass `true` to turn a rule on again:\n  .use(remarkLintFinalNewline, true)\n  // You can also configure whether messages by the rule should be ignored,\n  // are seen as code style warnings (default), or are seen as exceptions.\n  // Ignore messages with `'off'` or `0` as the first value of an array:\n  .use(remarkLintFinalNewline, ['off'])\n  .use(remarkLintFinalNewline, [0])\n  // Use `'warn'`, `'on'`, or `1` to treat messages as code style warnings:\n  .use(remarkLintFinalNewline, ['warn'])\n  .use(remarkLintFinalNewline, ['on'])\n  .use(remarkLintFinalNewline, [1])\n  // Use `'error'` or `2` to treat messages as exceptions:\n  .use(remarkLintFinalNewline, ['error'])\n  .use(remarkLintFinalNewline, [2])\n  // Some rules accept options, and what they exactly accept is different for\n  // each rule (sometimes a string, a number, or an object).\n  // The following rule accepts a string:\n  .use(remarkLintUnorderedListMarkerStyle, '*')\n  .use(remarkLintUnorderedListMarkerStyle, ['on', '*'])\n  .use(remarkLintUnorderedListMarkerStyle, [1, '*'])\n  // The following rule accepts a number:\n  .use(remarkLintMaximumLineLength, 72)\n  .use(remarkLintMaximumLineLength, ['on', 72])\n  .use(remarkLintMaximumLineLength, [1, 72])\n```\n\nSee [`use()` in `unified`s readme][github-unified-use] for more info on how to use\nplugins.\n\n\u003e 🧑‍🏫 **Info**: messages in `remark-lint` are warnings instead of errors.\n\u003e Other linters (such as ESLint) almost always use errors.\n\u003e Why?\n\u003e Those tools *only* check code style.\n\u003e They don’t generate, transform, and format code, which is what remark and\n\u003e unified focus on, too.\n\u003e Errors in unified mean the same as an exception in your JavaScript code: a\n\u003e crash.\n\u003e That’s why we use warnings instead, because we continue checking more markdown\n\u003e and continue running more plugins.\n\n## Ignore warnings\n\nYou can use HTML comments to hide or show warnings from within markdown.\nTurn off all remark lint messages with `\u003c!--lint disable--\u003e` and turn them on\nagain with `\u003c!--lint enable--\u003e`:\n\n```markdown\n\u003c!--lint disable--\u003e\n\n[Naiad]: https://naiad.neptune\n\n[Thalassa]: https://thalassa.neptune\n\n\u003c!--lint enable--\u003e\n```\n\nYou can toggle specific rules by using their names without `remark-lint-`:\n\n```markdown\n\u003c!--lint disable no-unused-definitions definition-case--\u003e\n\n[Naiad]: https://naiad.neptune\n\n[Thalassa]: https://thalassa.neptune\n\n\u003c!--lint enable no-unused-definitions definition-case--\u003e\n```\n\nYou can ignore a message in the next block with `\u003c!--lint ignore--\u003e`:\n\n```markdown\n\u003c!--lint ignore--\u003e\n\n[Naiad]: https://naiad.neptune\n```\n\n`ignore` also accepts a list of rules:\n\n```markdown\n\u003c!--lint ignore no-unused-definitions definition-case--\u003e\n\n[Naiad]: https://naiad.neptune\n```\n\n\u003e 👉 **Note**: you’ll typically need blank lines between HTML comments and other\n\u003e constructs.\n\u003e More info is available at the package that handles comments,\n\u003e [`remark-message-control`][github-remark-message-control].\n\n\u003e 💡 **Tip**: MDX comments are supported when [`remark-mdx`][mdx-remark-mdx] is\n\u003e used:\n\u003e\n\u003e ```mdx\n\u003e {/* lint ignore no-unused-definitions definition-case */}\n\u003e ```\n\n## Examples\n\n### Example: check markdown on the API\n\nThe following example checks that markdown code style is consistent and follows\nsome best practices.\nIt also reconfigures a rule.\nFirst install dependencies:\n\n```sh\nnpm install vfile-reporter remark remark-preset-lint-consistent remark-preset-lint-recommended remark-lint-list-item-indent --save-dev\n```\n\nThen create a module `example.js` that contains:\n\n```js\nimport {remark} from 'remark'\nimport remarkLintListItemIndent from 'remark-lint-list-item-indent'\nimport remarkPresetLintConsistent from 'remark-preset-lint-consistent'\nimport remarkPresetLintRecommended from 'remark-preset-lint-recommended'\nimport {reporter} from 'vfile-reporter'\n\nconst file = await remark()\n  // Check that markdown is consistent.\n  .use(remarkPresetLintConsistent)\n  // Few recommended rules.\n  .use(remarkPresetLintRecommended)\n  // `remark-lint-list-item-indent` is configured with `one` in the\n  // recommended preset, but if we’d prefer something else, it can be\n  // reconfigured:\n  .use(remarkLintListItemIndent, 'tab')\n  .process('1) Hello, _Jupiter_ and *Neptune*!')\n\nconsole.error(reporter(file))\n```\n\nRunning that with `node example.js` yields:\n\n```text\n1:2           warning Unexpected ordered list marker `)`, expected `.`                                              ordered-list-marker-style remark-lint\n1:4           warning Unexpected `1` space between list item marker and content, expected `2` spaces, add `1` space list-item-indent          remark-lint\n1:25-1:34     warning Unexpected emphasis marker `*`, expected `_`                                                  emphasis-marker           remark-lint\n  [cause]:\n    1:11-1:20 info    Emphasis marker style `'_'` first defined for `'consistent'` here                             emphasis-marker           remark-lint\n1:35          warning Unexpected missing final newline character, expected line feed (`\\n`) at end of file          final-newline             remark-lint\n\n⚠ 4 warnings\n```\n\n### Example: check and format markdown on the API\n\nremark lint rules *check* markdown.\n[`remark-stringify`][github-remark-stringify]\n(used in remark) *formats* markdown.\nWhen you configure lint rules and use remark to format markdown, you must\nmanually synchronize their configuration:\n\n```js\nimport {remark} from 'remark'\nimport remarkLintEmphasisMarker from 'remark-lint-emphasis-marker'\nimport remarkLintStrongMarker from 'remark-lint-strong-marker'\nimport {reporter} from 'vfile-reporter'\n\nconst file = await remark()\n  .use(remarkLintEmphasisMarker, '*')\n  .use(remarkLintStrongMarker, '*')\n  .use({\n    settings: {emphasis: '*', strong: '*'} // `remark-stringify` settings.\n  })\n  .process('_Hello_, __world__!')\n\nconsole.error(reporter(file))\nconsole.log(String(file))\n```\n\nYields:\n\n```text\n    1:1-1:8  warning  Emphasis should use `*` as a marker  emphasis-marker  remark-lint\n  1:10-1:19  warning  Strong should use `*` as a marker    strong-marker    remark-lint\n\n⚠ 2 warnings\n```\n\n```markdown\n*Hello*, **world**!\n```\n\nObserve that the lint rules check the input and afterwards remark formats using\nasterisks.\nIf that output was given the the processor, the lint rules would be satisfied.\n\n### Example: check markdown on the CLI\n\nThis example checks markdown with [`remark-cli`][github-remark-cli].\nIt assumes you’re in a Node.js package.\nFirst install dependencies:\n\n```sh\nnpm install remark-cli remark-preset-lint-consistent remark-preset-lint-recommended remark-lint-list-item-indent --save-dev\n```\n\nThen add an npm script to your `package.json`:\n\n```js\n  /* … */\n  \"scripts\": {\n    /* … */\n    \"check\": \"remark . --quiet --frail\",\n    /* … */\n  },\n  /* … */\n```\n\n\u003e 💡 **Tip**: add ESLint and such in the `check` script too.\n\nObserve that the above change adds a `check` script, which can be run with\n`npm run check`.\nIt runs remark on all markdown files (`.`), shows only warnings and errors\n(`--quiet`), and exits as failed on warnings (`--frail`).\nRun `./node_modules/.bin/remark --help` for more info on the CLI.\n\nNow add a `remarkConfig` to your `package.json` to configure remark:\n\n```js\n  /* … */\n  \"remarkConfig\": {\n    \"plugins\": [\n      \"remark-preset-lint-consistent\", // Check that markdown is consistent.\n      \"remark-preset-lint-recommended\", // Few recommended rules.\n      // `remark-lint-list-item-indent` is configured with `one` in the\n      // recommended preset, but if we’d prefer something else, it can be\n      // reconfigured:\n      [\n        \"remark-lint-list-item-indent\",\n        \"tab\"\n      ]\n    ]\n  },\n  /* … */\n```\n\n\u003e 👉 **Note**: you must remove the comments in the above examples when\n\u003e copy/pasting them, as comments are not supported in `package.json` files.\n\nFinally run the npm script to check markdown files in your project:\n\n```sh\nnpm run check\n```\n\n### Example: check and format markdown on the CLI\n\nremark lint rules *check* markdown.\nThe CLI can *format* markdown.\nYou can combine these features but have to manually synchronize their\nconfiguration.\nPlease first follow the previous example (checking markdown on the CLI) and then\nchange the npm script:\n\n```js\n  /* … */\n  \"scripts\": {\n    /* … */\n    \"format\": \"remark . --frail --output --quiet\",\n    /* … */\n  },\n  /* … */\n```\n\nThe script is now called `format` to reflect what it does.\nIt now includes an `--output` flag, which means it will overwrite existing files\nwith changes.\n\nUpdate `remarkConfig`:\n\n```js\n  /* … */\n  \"remarkConfig\": {\n    \"settings\": {\n      \"emphasis\": \"*\",\n      \"strong\": \"*\"\n    },\n    \"plugins\": [\n      \"remark-preset-lint-consistent\",\n      \"remark-preset-lint-recommended\",\n      [\"remark-lint-list-item-indent\", \"tab\"]\n      [\"remark-lint-emphasis-marker\", \"*\"],\n      [\"remark-lint-strong-marker\", \"*\"]\n    ]\n  },\n  /* … */\n```\n\nThis now includes `settings`, which configures\n[`remark-stringify`][github-remark-stringify], and explicitly prefers asterisks\nfor emphasis and strong.\nInstall the new dependencies:\n\n```sh\nnpm install remark-lint-emphasis-marker remark-lint-strong-marker --save-dev\n```\n\nFinally run the npm script to format markdown files in your project:\n\n```sh\nnpm run format\n```\n\n\u003e 👉 **Note**: running `npm run format` now checks *and* formats your files.\n\u003e The first time you run it, assuming you have underscores for emphasis and\n\u003e strong, it would first warn and then format.\n\u003e The second time you run it, no warnings should appear.\n\n## Integrations\n\n* [`vscode-remark-lint`](https://github.com/drewbourne/vscode-remark-lint)\n  ([VS Code](https://code.visualstudio.com))\n  — use `remark-lint` from Visual Studio Code\n* [`SublimeLinter-contrib-remark-lint`](https://packagecontrol.io/packages/SublimeLinter-contrib-remark-lint)\n  ([Sublime](https://www.sublimetext.com))\n  — use `remark-lint` from Sublime Text\n* [`ale`](https://github.com/w0rp/ale)\n  ([Vim](https://www.vim.org))\n  — use `remark-lint` from Vim\n* [`jest-runner-remark`](https://github.com/keplersj/jest-runner-remark)\n  ([Jest](https://jestjs.io))\n  — use remark with Jest\n\n## Syntax\n\nMarkdown is parsed by [`remark-parse`][github-remark-parse]\n(included in `remark`)\naccording to CommonMark.\nYou can combine it with other plugins to add syntax extensions.\nNotable examples that deeply integrate with it are\n[`remark-gfm`][github-remark-gfm],\n[`remark-mdx`][mdx-remark-mdx],\n[`remark-frontmatter`][github-remark-frontmatter],\n[`remark-math`][github-remark-math], and\n[`remark-directive`][github-remark-directive].\n\n## Compatibility\n\nProjects maintained by the unified collective are compatible with maintained\nversions of Node.js.\n\nWhen we cut a new major release, we drop support for unmaintained versions of\nNode.\nThis means we try to keep the current release line, `remark-lint@9`, compatible\nwith Node.js 16.\n\n## Security\n\nUse of `remark-lint` does not change the tree so there are no openings for\n[cross-site scripting (XSS)][wikipedia-xss] attacks.\nMessages from linting rules may be hidden from user content though, causing\nbuilds to fail or pass.\n\n## Contribute\n\nSee [`contributing.md`][health-contributing]\nin [`remarkjs/.github`][health]\nfor ways to get started.\nSee [`support.md`][health-support] for ways to get help.\n\nThis project has a [code of conduct][health-coc].\nBy interacting with this repository, organization, or community you agree to\nabide by its terms.\n\n## License\n\n[MIT][file-license] © [Titus Wormer][wooorm]\n\n\u003c!-- Definitions --\u003e\n\n[badge-backers-image]: https://opencollective.com/unified/backers/badge.svg\n\n[badge-build-image]: https://github.com/remarkjs/remark-lint/actions/workflows/main.yml/badge.svg\n\n[badge-build-url]: https://github.com/remarkjs/remark-lint/actions\n\n[badge-chat-image]: https://img.shields.io/badge/chat-discussions-success.svg\n\n[badge-chat-url]: https://github.com/remarkjs/remark/discussions\n\n[badge-collective-url]: https://opencollective.com/unified\n\n[badge-coverage-image]: https://img.shields.io/codecov/c/github/remarkjs/remark-lint.svg\n\n[badge-coverage-url]: https://codecov.io/github/remarkjs/remark-lint\n\n[badge-downloads-image]: https://img.shields.io/npm/dm/remark-lint.svg\n\n[badge-downloads-url]: https://www.npmjs.com/package/remark-lint\n\n[badge-size-image]: https://img.shields.io/bundlejs/size/remark-lint\n\n[badge-size-url]: https://bundlejs.com/?q=remark-lint\n\n[badge-sponsors-image]: https://opencollective.com/unified/sponsors/badge.svg\n\n[file-create-a-custom-rule]: doc/create-a-custom-rule.md\n\n[file-license]: license\n\n[file-logo]: https://raw.githubusercontent.com/remarkjs/remark-lint/014fca7/logo.svg?sanitize=true\n\n[github-remark]: https://github.com/remarkjs/remark\n\n[github-remark-cli]: https://github.com/remarkjs/remark/tree/main/packages/remark-cli\n\n[github-remark-directive]: https://github.com/remarkjs/remark-directive\n\n[github-remark-frontmatter]: https://github.com/remarkjs/remark-frontmatter\n\n[github-remark-gfm]: https://github.com/remarkjs/remark-gfm\n\n[github-remark-math]: https://github.com/remarkjs/remark-math\n\n[github-remark-message-control]: https://github.com/remarkjs/remark-message-control\n\n[github-remark-parse]: https://github.com/remarkjs/remark/tree/main/packages/remark-parse\n\n[github-remark-plugin]: https://github.com/remarkjs/remark#plugins\n\n[github-remark-stringify]: https://github.com/remarkjs/remark/tree/main/packages/remark-stringify\n\n[github-unified]: https://github.com/unifiedjs/unified\n\n[github-unified-use]: https://github.com/unifiedjs/unified#processoruseplugin-options\n\n[health]: https://github.com/remarkjs/.github\n\n[health-coc]: https://github.com/remarkjs/.github/blob/main/code-of-conduct.md\n\n[health-contributing]: https://github.com/remarkjs/.github/blob/main/contributing.md\n\n[health-support]: https://github.com/remarkjs/.github/blob/main/support.md\n\n[mdx-remark-mdx]: https://mdxjs.com/packages/remark-mdx/\n\n[wikipedia-xss]: https://en.wikipedia.org/wiki/Cross-site_scripting\n\n[wooorm]: https://wooorm.com\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fremarkjs%2Fremark-lint","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fremarkjs%2Fremark-lint","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fremarkjs%2Fremark-lint/lists"}