VS2017 の EditorConfig の .NET コーディング規則/名前付け規則が中途半端・・・。
この内容で使っている環境は以下のとおり。 - Visual Studio 2017 15.7.1 - VS Code 1.24.0-insider (windows) - Visual Studio 2017 for Mac 7.5 - JetBrains Rider 2018.1 (mac)
TL;DR
- .NET コーディング規則/名前付け規則が指定できるようになっている
- 規則には重要度を指定できて、違反したときに警告やエラーを出すことができる
- ただ、重要度にエラーを指定している規則に違反しても、ビルドは失敗しない
- Visual Studio Code / JetBrains Rider は .NET コーディング規則/名前付け規則に対応していない
- Visual Studio 2017 for Mac は対応しているけどエラーパッドに表示されない
- つまるところ使えるのは Visual Studio 2017 での開発中だけ
- 規則系は StyleCop Analyzer とかでやった方がよい
EditorConfig での .NET コーディング規則/名前付け規則の指定
Visual Studio 2017 から EditorConfig ファイルに標準で対応してて、さらに dotnet 用とか C# 用とかの .NET コーディング規則/名前付け規則が指定できるようになってます。 詳細は以下を参照。
Visual Studio での EditorConfig の .NET コーディング規則の設定 | Microsoft Docs
EditorConfig ファイルでの .NET の名前付け規則 | Microsoft Docs
Visual Studio のオプションの設定にある、C# と VB のコードスタイルで設定できる内容が、ソリューションとかプロジェクトごとにファイルで指定できるようになっている感じですね。
いままでしっかり見てなかったんですが、規則には適用するしないだけじゃなくって、重要度として違反しているときにワーニングを出すのか、エラーとするのかなどを指定できるようです。 で、ふと思ったのです。重要度でエラーに指定しておいたら、ビルド時にチェックしてくれて、ビルド失敗にできるんじゃないの??と、いうことで試してみました。
試してみた EditorConfig とコード
試してみた EditorConfig は以下。インデントサイズと、フィールドに this をつけて参照していないとエラーになるように設定しています。
root = true # All files [*] indent_style = space # Code files [*.cs] indent_size = 2 dotnet_style_qualification_for_field = true:error
コードは以下の通り。シンプルなもんです。
using System; namespace EditorConfigTest { class Program { static void Main(string[] args) { Console.WriteLine("Hello World!"); } private readonly string temp; public Program() { this.temp = "Foo"; } public string Temp => this.temp; } }
Visual Studio 2017 15.7.1 での動き
アニメ GIF にしてみました。
フォーマットも指定通りに動くし、エディタ上に this がついてないよって波線が出てますし、エラー一覧にも表示されてます。
が、しかし、ビルドするとビルドが通ってしまう。VS上ではエラーになっているのに。ここは本当はビルドエラーになって欲しいところです。
VS Code 1.24.0-insider (windows) での動き
インデントを変更したら、インデントガイドは変更されるのですが、フォーマットしたときのサイズは変わらない。。this が付いてないよって波線もエラーも出ないし、もちろんビルドエラーにはならない。
EditorConfig そのものがどこまで有効かがちょっとわかんないですね。。
Visual Studio 2017 for Mac 7.5での動き
Windows のほうの Visual Studio と同様にフォーマットも指定通りに動いて、 this がないよって破線がでますね。ただ、エラー一覧には出ません。 こちらもやはりビルドは通ります。
JetBrains Rider 2018.1 (mac)
インデントは指定通りに動きますね。しかも細かいところですが、 EditorConfig の変更がファイルを閉じずにでもすぐに適用できたのはこれだけでした。規則は予想はしてましたが適用されませんでした。もちろんビルドも通ります。
ということで、、、
プルリクエストもらったときに自動的にチェックして、却下するとかには使えなさそうですね。ここら辺は Visual Studio のアナライザー使った方が良さそうです。ビルドもちゃんと落ちてくれるんで。Rider も 2018.1 からはアナライザーに対応したみたいです。