tl;dr
lint-staged@8.x
から、ファイルの変更の一部だけをステージングしてコミット (pre-commit) した際に、変更部分だけを対象に git add
が行えるようになりました。
というのが嬉しかったので周知したくて書きました。
参考:
🎉 Announcing lint-staged with support for partially staged files
lint-staged?
lint-staged
は husky
などと組み合わせる事で、コミット時にファイルを linting できるツールです。
(詳細は 公式のドキュメント または他の Qiita やブログの記事を参照してください)
使い方はこんな感じになります。
{
"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 以降と書いてあり、どっちが何なんでしょう…
The latest versions of lint-staged require Node.js v6 or newer.
どちらにせよ Node.js の v6 は来年4月でサポート切れるので、まだの人は早めにアップデートしておきましょう。
nodejs/Release: Node.js Foundation Release Working Group