Gitの差分行のみautofixするnpmライブラリ「stylelint-diff-fixer」を作った
Stylelintのfixオプションの便利さを知ってしまうと、下記のような欲望が生まれる場合がある。
- Stylelint未導入のプロジェクトにおいて、自分のローカルでのみインストールしてautofixしたい
- 新たにStylelintを導入したプロジェクトにおいて、既存コードに対してはfixによる差分を加えたくない
かくいう筆者も業務・プライベート問わず「既存のCSS・SCSSファイルに新規追加した行だけをautofixできたらな」と思うことが頻繁にあった。
だがStylelintの実行対象はあくまでファイル単位であり、特定の行をlintすることは不可能(fixオプションの有無に関わらず)。
そこでstylelint-diff-fixerというnpmライブラリを作った。これのおかげで作業効率が誇張抜きで爆上がりしたので、概要を少しだけ紹介する(READMEの内容とほぼ重複する)。
使用例
上記のように既存のCSSファイルに変更を加えたとして、stylelint-diff-fixerを実行してみる。
すると上記のように差分行のみautofixが適用される。本来ならfixされるべきDeclaration(margin
とpadding
)には変更が加えられていない。
今回はorder/properties-order
やlength-zero-no-unit
といったRuleを有効にしているので上記のようにfixされているが、この辺りの設定は使用元のプロジェクトのStylelint設定に依存するので新たに設定ファイル(.stylelintrc
など)を編集する必要もない。
そのためもしPluginを独自に実装し拡張Ruleを設定している場合でも、fixオプションの対象であればautofixされる。
ちなみにSCSSファイルにも対応している。
使用方法
特定のファイル
globパターンで指定することも可能。
全てのファイル
<FILE_PATH>
を省略すればgit diff
の出力対象となる全ファイルをfixする。
File Watcherと組み合わせる
エディタのFile Watcher(ファイル監視)機能と組み合わせるとより強力になる。
WebStormであれば上記のように設定する。CSS(SCSS)ファイルが保存される度にstylelint-diff-fixer <FILE_PATH>
を実行する。
これでプロパティの順番や細かいRuleを逐一気にする必要が無くなり、コーディングがより捗るはず。