textlint 7.0をリリースしました。

前回: textlint 6.0リリース。--fixでの自動修正に対応 | Web Scratch

追加した機能

Filter rule

フィルタールールが追加されました。 フィルタールールはルールエラーを無視するためのルールを定義できるものです。

たとえば、textlint-filter-rule-commentsではESLintなどで見かける、この部分は無視して!ということを文章中に書くことができます。

MarkdownだとコメントがHTMLコメントを使い <!-- textlint-disable --><!-- textlint-enable --> で囲みます。 (Re:Viewなどはコメント記法があるのでそちらを利用できます)

<!-- textlint-disable -->

この部分はtextlintのチェックでエラーがあっても無視される

<!-- textlint-enable -->

このtextlint-filter-rule-commentsを有効にするには、他のルールと同じくnpmでインストールします。

npm install -D textlint-filter-rule-comments
# or
npm install -g textlint-filter-rule-comments

そして、.textlintrcfiltersフィールドを作ってそこへ追加します。

textlint-filter-rule-commentstextlint-filter-rule-は省略できるのでcommentsだけで問題ありません。

{
  "filters": {
    "comments": true
  }
}

もう一つの例として、特定のNodeを全部無視するtextlint-filter-rule-node-typesというフィルタールールがあります。

npm install -D textlint-filter-rule-node-types

のようにインストールしておき、次のように設定を書いて有効にします。 そうすると、"nodeTypes"で指定したNode typeのエラーが全て無視されます。 この例ではBlockQuote nodeは全てtextlintのチェック対象から除外されます。

{
  "filters": {
    "node-types": {
      "nodeTypes": ["BlockQuote"]
    }
  },
  "rules": {
    "very-nice-rule": true
  }
}

指定できるnodeTypeshttps://github.com/textlint/textlint/blob/master/docs/txtnode.md#type を参照してください。

フィルタールールも自分で作る事ができます。 フィルタールールの作り方について詳しくはドキュメントを参照してください。 既存のルールにAPIが一つ増えたぐらいの違いしかありません。

Sharable Config

これはtextlintの設定をnpmにあげて使い回す | Web Scratchで紹介した機能です。

npm i -D @azu/textlint-config-readme textlint
$(npm bin)/textlint --config @azu/textlint-config-readme README.md

で、.textlintrcの設定をnpmパッケージとして配布されているものを利用できます。

AST explorer for textlint

主にルール開発者向けですが、textlintの扱うASTをみたり、その場でルールを書いてためせるplaygroundサイトを追加しました。

ast-explorer for textlint

JavaScript ASTで有名なAST explorerのtextlint版です。 ルールを書いてみたい人は、これを使って文章がどのようなASTになるかを眺めてみるといいと思います。

Breaking Change

textlint 7.0 ではいくつか破壊的な変更はありますが、ユーザーには影響ないと思います。 ルールを書いている人はRelease 7.0.0 · textlint/textlintをみてください。 メッセージの出力順を変更しているのでテストが落ちている可能性があります。

Drop Node.js 0.12 support

またtexltint 7.0からはNode.0.12のサポートを終了し、Node.js 4.0.0 >=がサポート環境となります。(0.12でも動くけどいつの間にか動かなくなる事があります)