GithubHelp home page GithubHelp logo

remark-lint's Introduction

remark-lint

Build Status Coverage Status Chat

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 there are sensible presets.

remark-lint is built on remark, a powerful markdown processor powered by plugins (such as this one).

Table of Contents

Installation

npm:

npm install remark-lint

Command line

Example of how remark-lint looks on screen

Use remark-lint together with remark-cli, and a preset.

npm install --save remark-cli remark-lint remark-preset-lint-recommended

Then, configure remark in your package.json:

  // ...
  "scripts": {
    "lint-md": "remark ."
  },
  // ...
  "remarkConfig": {
    "presets": ["lint-recommended"]
  }
  // ...

Let’s say there’s an example.md, which looks as follows:

* Hello

[World][]

Now, running our lint-md script with npm, npm run lint-md, yields:

example.md
       1:3  warning  Incorrect list-item indent: add 2 spaces  list-item-indent
  3:1-3:10  warning  Found reference to undefined definition   no-undefined-references
⚠ 2 warnings

See doc/rules.md for what those warnings are (and how to turn them off).

Programmatic

Use remark-lint together with remark:

npm install remark remark-lint

Let’s say example.js looks as follows:

var report = require('vfile-reporter');
var remark = require('remark');
var lint = require('remark-lint');

var file = remark().use(lint, {firstHeadingLevel: true}).process('## Hello world!');

console.log(report(file));

Now, running node example.js yields:

  1:1-1:16  warning  First heading level should be `1`  first-heading-level

⚠ 1 warning

remark.use(lint[, options])

Adds warnings for style violations to the processed virtual file.

When processing a file, these warnings are available at file.messages, and look as follows:

{ [1:1-1:16: First heading level should be `1`]
  message: 'First heading level should be `1`',
  name: '1:1-1:16',
  file: '',
  reason: 'First heading level should be `1`',
  line: 1,
  column: 1,
  location: {
    start: { line: 1, column: 1, offset: 0 },
    end: { line: 1, column: 16, offset: 15 } },
  fatal: false,
  ruleId: 'first-heading-level',
  source: 'remark-lint' }

See VFileMessage for more information.

Rules

doc/rules.md describes all available rules, what they check for, examples of markdown they warn for, and how to fix their warnings.

Configuring remark-lint

remark-lint is a remark plug-in and supports configuration through its configuration files.

An example .remarkrc file could look as follows:

{
  "presets": ["lint-recommended"],
  "plugins": {
    "lint": {
      "list-item-indent": false
    }
  }
}

Where the object at plugins.lint is a map of ruleIds and their values, which precede over presets.

Using our example.md from before:

* Hello

[World][]

Now, running npm run lint-md yields:

example.md
   3:1-3:10  warning  Found reference to undefined definition   no-undefined-references

⚠ 2 warnings

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, just whether they are shown or not. 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

Note: You’ll need the blank lines between comments and other nodes!

Using remark to fix your markdown

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 👍

Editor Integrations

Currently, remark-lint is integrated with Atom through linter-markdown.

If you want to run all of remark from Atom, use linter-remark.

To run remark, optionally with remark-lint from Gulp, use gulp-remark.

I’m very interested in more integrations. Let me know if I can help.

List of Presets

Presets can be loaded through the preset setting.

List of External Rules

External rules can be loaded through the external setting.

Learn how to create and use external rules in doc/external.md.

Related

License

MIT © Titus Wormer

remark-lint's People

Contributors

benbalter avatar byk avatar chalker avatar despairblue avatar greenkeeperio-bot avatar jayvdb avatar michaelmior avatar pcgilday avatar rhysd avatar richardlitt avatar uzitech avatar wooorm avatar yoshuawuyts avatar zcei avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.