Edited at

lint-staged で部分ステージングのみを対象に git add されるようになった


tl;dr

lint-staged@8.x から、ファイルの変更の一部だけをステージングしてコミット (pre-commit) した際に、変更部分だけを対象に git add が行えるようになりました。

というのが嬉しかったので周知したくて書きました。

参考:

🎉 Announcing lint-staged with support for partially staged files


lint-staged?

lint-stagedhusky などと組み合わせる事で、コミット時にファイルを linting できるツールです。

(詳細は 公式のドキュメント または他の Qiita やブログの記事を参照してください)

使い方はこんな感じになります。


package.json

{

"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
},
"lint-staged": {
"linters": {
"*.js": [
"prettier --write",
"eslint --fix",
"git add"
]
},
"ignore": [
"public/**/*"
]
}
}


lint-staged の git add

lint-staged はフォーマット処理等を加えたファイルに対し、 pre-commit が終了する前に git add で再度ステージに追加することが出来ます。

husky, lint-staged のコードを追っていないのでこの理解は正確ではないかもしれません。)

ただ、この時にステージングされるのはステージングしていた差分ではなく ファイル全体の変更差分 なので、

ステージングしていたのが変更の一部だけだった場合に余計な部分までステージに入り、そのまま処理されてしまうため、意図しないコミットになってしまいます。

list-staged のバージョン 8 からこの問題が修正されており、

部分ステージングに対して lint-staged で指定の処理を実行し、その一部のみを再ステージングするということが可能になりました。

うれしい!


破壊的変更

設定等に変更は無いのですが、 Node.js のバージョンが指定されています。


Node >= 8.6 is required


ブログ記事と リリース には上記のように書いてありますが、

README.md を見ると v6 以降と書いてあり、どっちが何なんでしょう… :thinking:


The latest versions of lint-staged require Node.js v6 or newer.


どちらにせよ Node.js の v6 は来年4月でサポート切れるので、まだの人は早めにアップデートしておきましょう。

nodejs/Release: Node.js Foundation Release Working Group