What is remark-lint?
remark-lint is a plugin for remark, a Markdown processor powered by plugins. It provides a framework for analyzing and reporting on Markdown code quality issues, ensuring consistency and adherence to specified style guidelines.
What are remark-lint's main functionalities?
Linting Markdown Files
This feature allows you to lint Markdown files to ensure they adhere to specified style guidelines. The code sample demonstrates how to use remark-lint to process a simple Markdown string and report any issues.
const remark = require('remark');
const lint = require('remark-lint');
remark()
.use(lint)
.process('# Hello world!', function (err, file) {
console.error(report(err || file));
});
Custom Rules
remark-lint supports custom rules, allowing you to enforce specific style guidelines. The code sample shows how to use a custom rule (remark-lint-no-emphasis-as-heading) to lint a Markdown string.
const remark = require('remark');
const lint = require('remark-lint');
const noEmphasisAsHeading = require('remark-lint-no-emphasis-as-heading');
remark()
.use(lint)
.use(noEmphasisAsHeading)
.process('# Hello *world*!', function (err, file) {
console.error(report(err || file));
});
Configurable Presets
remark-lint provides configurable presets that bundle multiple rules together for convenience. The code sample demonstrates how to use the 'remark-preset-lint-recommended' preset to lint a Markdown string.
const remark = require('remark');
const lint = require('remark-lint');
const presetLintRecommended = require('remark-preset-lint-recommended');
remark()
.use(lint)
.use(presetLintRecommended)
.process('# Hello world!', function (err, file) {
console.error(report(err || file));
});
Other packages similar to remark-lint
markdownlint
markdownlint is a Node.js style checker and lint tool for Markdown files. It provides a set of rules to enforce consistent Markdown style and can be customized with configuration files. Compared to remark-lint, markdownlint is more focused on providing a comprehensive set of built-in rules and is often used as a standalone tool.
markdown-it
markdown-it is a Markdown parser that can be extended with plugins to add custom functionality, including linting. While markdown-it is primarily a parser, it can be combined with plugins to achieve similar linting capabilities as remark-lint. However, it is more flexible and less opinionated about style rules.
textlint
textlint is a text linting framework that supports multiple file formats, including Markdown. It allows users to define custom rules and plugins to enforce style guidelines. textlint is more versatile than remark-lint, as it can be used to lint various types of text files, not just Markdown.
remark-lint is a markdown code style linter. Another linter? Yes.
Ensuring the markdown you (and contributors) write is of great quality will
provide better rendering in all the different markdown parsers, and makes
sure less refactoring is needed afterwards. What is quality? That’s up to you,
but the defaults are sensible :ok_hand:.
remark-lint has lots of tests. Supports Node, io.js, and the browser.
100% coverage. 50+ rules. It’s built on remark,
a powerful markdown processor powered by plugins
(such as this one).
Table of Contents
Installation
npm:
npm install remark-lint
remark-lint is also available for duo,
and as an AMD, CommonJS, and globals module, uncompressed and
compressed.
Command line
Use remark-lint together with remark:
npm install --global remark remark-lint
Let’s say example.md
looks as follows:
* Hello
[World][]
Then, to run remark-lint on example.md
:
remark example.md -u remark-lint
See doc/rules.md
for what those warnings are (and how to
turn them off).
Programmatic
doc/api.md
describes how to use remark-lint’s
programatic interface in JavaScript.
Rules
doc/rules.md
describes all available rules, what they check
for, examples of markdown they warn for, and how to fix their warnings.
remark-lint is just a remark plug-in. Meaning, you can opt to
configure using configuration files. Read more about these files
(.remarkrc
or package.json
) in remark’s docs.
An example .remarkrc
file could look as follows:
{
"plugins": {
"lint": {
"no-multiple-toplevel-headings": false,
"maximum-line-length": 79,
"emphasis-marker": "_",
"strong-marker": "*"
}
},
"settings": {
"commonmark": true
}
}
Where the object at plugins.lint
is a map of ruleId
s and their values.
The object at settings
determines how remark parses (and compiles)
markdown code. Read more about the latter on remark’s
readme.
In addition, you can also provide configuration comments to turn a rule
on or off inside a file. Note that you cannot change what a setting,
such as maximum-line-length
, checks for, as you’re either enabling
or disabling warnings). Read more about configuration comments in
remark-message-controls documentation.
The following file will warn twice for the duplicate headings:
# Hello
## Hello
### Hello
The following file will warn once (the second heading is ignored,
but the third is re-enabled):
# Hello
<!--lint disable no-duplicate-headings-->
## Hello
<!--lint enable no-duplicate-headings-->
### Hello
One of remark’s cool parts is that it compiles to very clean, and highly
cross-vendor supported markdown. It’ll ensure list items use a single bullet,
emphasis and strong use a standard marker, and that your table fences are
aligned.
remark should be able to fix most of your styling issues automatically,
and I strongly suggest checking out how it can make your life easier :+1:
Editor Integrations
Currently, remark-lint is integrated with Atom through
linter-markdown.
I’m very interested in more integrations. Let me know if I can help.
List of External Rules
Related
License
MIT © Titus Wormer