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

textlintはMarkdownなどの文章に対するESLintのようなLintツールですが、詳しくは以下の記事を参照してください。

textlint 4.0

textlint 4.0では以下のような変更が含まれています。

Breaking Change

  • TextLintMessageのcolumnsが1-basedに変更されました #38

この破壊的変更はtextlintをライブラリとして利用しているユーザに関係します(use-as-modules.md)。

Features

  • TextLintEngine#executeOnTexttextlint#lintText が第二引数 ext をサポートしました
    • engine.executeOnText(text, ".md") というようにtextの種類を指定できます。
  • TextLintCoreを参照できるように #41
  • Add "json" formatter #5
    • textlint -f json で利用できます。

Fixed

pretty-error


変更詳細

TextLintMessageのcolumnsは元々0,1,2,3と0からスタートしていましたが、 4.0からは1,2,3,4と1からスタートされるように変更しました

なぜ元々columnsが0スタートだったのは、Esprimaなどのパーサーがcolumnsが0スタート担っているのに合わせていたからでした。

これはブラウザのErrorのスタックトレースに合わせていたため0スタートとなっていたようです。

しかし、textlint場合は表示先がブラウザではなくエディタで、エディタはline:1、column:1からスタートしているものが殆どです。

textlintをライブラリとして使ってるlinter-textlintなど自分が知ってるものは合わせて修正したので、ツールとして使うユーザーへの影響はないと思います。

linter-textlint

プラグイン

3.7.0でプラグインをサポートしたので合わせて紹介します。 プラグインは今のところルールとルールの設定をまとめただけのモジュールです。

今のところ自分が作成したtextlint-plugin-JTF-styleしかないと思います。

このtextlint-plugin-JTF-styleJTF日本語標準スタイルガイド(翻訳用)で定義されているルールを40弱ほど実装してまとめたものです。

npm install -D textlint textlint-plugin-jtf-style

でインストールして、.textlintrcに以下のように書くだけで利用できます。 (それぞれ個別にルールの有効、無効も設定できるので、不要なルールを無効化するといいです)

{
    "plugins": [
        "jtf-style"
    ]
}

プラグインの今後

プラグインは今後ただのルールセットだけではなくて、Processor Pluginという形でパーサなどの処理も拡張できるようにする予定です。

内部的には既にMarkdownやtextと言った拡張子ごとの処理がProcessor Pluginでプラグインとして実装されています。

追記: v4.3.0で入りました

これが入れば、任意の拡張子(.rstとか.jsとか)に対してtextlintの処理ができるプラグインを書くことができるようになると思います。 以下のIssueでやっているので、まだAPIとかどうすればいいのか曖昧なのでご意見がある人は下さい。