textlint v14.0.0をリリースしました!

textlint v14.0.0は、Node.js v18.14.0以降が必要になります。

Node.js 16は既にEOLなので、Node.js 16のサポートを終了しました。 古いNode.jsを使っている場合は、LTS(Long Term Support)版のNode.jsにアップグレードする必要があります。

ユーザー向けの変更点

基本的にはNode.jsのバージョンが18以降なら、特に影響がある変更はありません。

Node.js 16のサポートを終了

textlint v14はNode.js v18.14.0+が必要です。 Node.js 18か20にアップグレードする必要があります。

また、ルールを開発する人向けのパッケージであるtextlint-scriptsはNode.js v18.19.0+を必要としています(最新のNode.js 18 LTSバージョン)。

gulp-textlintをmonorepoから分離

gulp-textlintをmonorepoから分離しました。

gulp-textlint はtextlintコアチームによってメンテナンスされていません。 リポジトリとして分けたので、興味がある人は以下のIssueをチェックしてください。

--parallel--maxConcurrency フラグを削除

textlint v14では、実験的であった--parallel--maxConcurrency フラグを削除しました。これらのフラグは並列処理をするためのものでしたが、あまり使われていなかったためです。

# これらのフラグは削除されました
textlint --experimental --parallel --maxConcurrency 4 "**/*.md"
# 代わりに以下のように書き換えてください
textlint "**/*.md"

今後パフォーマンスを本格的に見直す際には再度検討するかもしれませんが、一度削除しました。

@textlint/linter-formatter CLIを削除

@textlint/linter-formatter はCLIを含んでいましたが、ほぼ使われないものだったので削除しました。

開発者向けの変更点

textlint-scriptsの出力対象を変更

textlint-scriptsがビルドするコードの出力対象をNode.js v18.14.0に変更しました(textlintがサポートする最小のNode.jsバージョンと同じです)。

以前は、ES2015互換のJavaScriptを出力していましたが、textlint v14ではES2022互換のJavaScriptを出力するようになりました。 これによって、asyncなどの構文がtranspileされずにそのまま出力されるため、パフォーマンスやコードサイズが改善されます。

⚠️ Warning: textlint-scripts v14へアップデートしてビルドしたルールは、出力内容が変わっているため、基本的にはBREAKING CHANGEとして扱ってください。

古いAPIにdeprecation warningを追加

textlint v14では、古いAPIにdeprecation warningを追加しました。 古いAPIとは、textlintパッケージに含まれていたtextlint, TextLintCore, TextLintEngine, TextFixEngineのAPIです。

これらのAPIはtextlint v13.0.0で導入された新しいAPIであるcreateLinterloadTextlintrc, loadLinerFormatterに置き換えられます。

また、TextLintCoreという手続き的なAPIに対しては、マイグレーションを簡単にするために互換性のある@textlint/legacy-textlint-coreというパッケージを提供しています。

非推奨のAPI

textlint パッケージに含まれていた4つのAPIを非推奨にしました。

Old API New API
textlint use @textlint/legacy-textlint-core or @textlint/kernel
TextLintCore use @textlint/legacy-textlint-core or @textlint/kernel
TextLintEngine use createLinter and loadTextlintrc
TextFixEngine use createLinter and loadTextlintrc

deprecation warningの制御方法

デフォルトでは、これらの非推奨APIを使うと、コンソールに非推奨の警告が表示されます。 次のNode.jsの環境変数(フラグ)を使うことで、非推奨の警告の動作を制御できます。

  • NODE_OPTIONS=--throw-deprecation を使うと、非推奨の警告が例外としてスローされます。
  • NODE_OPTIONS=--no-deprecation を使うと、非推奨の警告が抑制されます。
  • NODE_OPTIONS=--trace-deprecation を使うと、非推奨の警告がstderrに出力され、スタックトレースが表示されます。

非推奨のAPIを使っているかどうかを見つけたい場合は、NODE_OPTIONS=--throw-deprecationを使って実行してください。

# 例: 非推奨のAPIを使ってる場合に例外としてスローする
NODE_OPTIONS=--throw-deprecation node your-script.js

詳しくは、次のページを参照してください。

新しいAPIのドキュメント

マイグレーションガイド

textlint v14.0.0 · textlintを参照してください。

TextLintEngineTextFixEngineは自力で書き換える必要がありますが、textlintTextLintCore@textlint/legacy-textlint-coreに置き換えられます。

まとめ

textlint v14は、Node.js v18.14.0+が必要です。 ユーザーは基本的にアップデートするだけで特に問題なく使えるはずです。

ルールの開発者は、textlint-scriptsの出力が変わっているため、アップデート後にビルドを確認してください。 基本的には、Node.js v18.14.0+で動作するコード(ES2022)に変わっているので、BREAKING CHANGEとして扱ってください。

また、古いtextlintのAPIを使っている場合は、非推奨の警告が表示されるので、新しいAPIに置き換えるようにしてください。 textlint v15では、非推奨のAPIを削除する予定です。

textlint v14は下準備的なリリースなので、次はキャッシュ周りを作り直したりしたいです。

textlintでは、Contributionを歓迎しています。

また、GitHub Sponsorsでのサポートも歓迎しています。