LoginSignup
1
1

More than 5 years have passed since last update.

CLIでC#のコードを整形するツールを作ってみた

Last updated at Posted at 2019-04-09

前回からの続き

StyleCop.AnalyzersをCLIで動かせるツールを.NET Coreで作った
こちらでコードスタイルをチェックするツールを実装しました
その続きで、コードスタイルに引っかかったコードを整形するまで行えるようにしました

リポジトリ

StyleCop.Analyzers.CLI

使用方法

dotnet StyleCopAnalyzers.CLI.dll fix ./Sandbox 

このような感じで実行できます。
その他の細かいオプションなどについては、コマンドのヘルプに用意してあります

14:25:44 StyleCopAnalyzers.CLI $ dotnet ./tools/bin/style/StyleCopAnalyzers.CLI.dll fix --help
StyleCopAnalyzers.CLI 0.5.0
Copyright (C) 2019 StyleCopAnalyzers.CLI

  -r, --ruleset                                      Ruleset file path.
  -j, --json                                         stylecop.json file path
  -v, --verbose                                      verbose mode. output execution detail log.
  --help                                             Display this help screen.
  --version                                          Display version information.

  sln/csproj file path or directory path (pos. 0)

コード整形を行わずチェックスだけのオプションも用意してあります

dotnet StyleCopAnalyzers.CLI.dll check ./Sandbox 

動作gif

実行するとこのような感じでコードを整形する処理が実行されます
cmd.gif

差分がどうなっているか

コード自体はあまり意味のないものですが、実行すると以下のようにルールに違反しているコードを整形してくれます
実行したのはStyleCop.Analyzersのデフォルトルールですので、コメントの追加までやってくれています
550c21f8d4d18037fe6f5c68d30be7fa.png
a3f1535b0aa8762c2fb7db3bb36edc7c.png
630bdc9942b0ee8f0650b021a5ba506e.png

課題

とにかく実行速度が遅い

遅い理由は、ルール一つを整形する度に対象のコードを再読込する必要があるためです(StyleCop.Analyzersの制限でこうするしかない)
commit-hookなどで実行するには致命的な遅さなので、commitする差分だけをツールに渡せるように改良しようと思ってます

全てのルールの修正できるわけではない

これは、StyleCop.Analyzersにその機能がないものもありますが、全てのルール修正の挙動を追いきれていません
今後対応していきます

今後の追加予定

ルールを一つずつ実行できるようにしたいと思っています
一括で全て修正してしまうと、想定していない修正が入ることになるので、一つずつ確認できるようにしたら便利かなと
Unityプロジェクトの場合は、SerializeField の変数名なんかを変えてしまうと、Prefabなどの参照が全て外れて阿鼻叫喚となる場合も...

余談

ImmutableArrayが素敵なので他のプロジェクトでも活用していきたい
これも後ほどまとめます

ちなみに、Visual StudioやRiderを使えばこれと同じ処理をEditorでやってくれます
作った理由は個人的にCLIでのツールがどうしても欲しかったというのがあります

1
1
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1