なんか挙動的にも別にAnalyzerで動いても良さそうな雰囲気を醸し出してる。時代のすっきりしたAnalyzerのcsprojの書き方を解説されています。この2つを合体させればシンプルにAnalyzerを開発できますね......?というわけでやっていきましょう。中身は本当に上記2つの記事そのものなので、そちらのほうも参照してください。16.10はついこないだ正式版になったばかりなので、バージョンを確認して16.10未満の場合はアップデートしておきましょう。Analyzerはnetstarndard2.0、Analyzerを参照するテスト用のConsoleAppプロジェクトをnet5.0で作成します。最終的には以下のようなソリューション構造にします。SuperSimpleAnalyzerのほうのcsprojをコピペ的に以下のものにしましょう。</Target></Project>基本的に【C#】アナライザー・ソースジェネレーター開発のポイントから丸コピペさせてもらっちゃっているので、それぞれの詳しい説明は参照先記事に譲ります......!幾つか重要な点を出すと、Microsoft.CodeAnalysis.CSharpのバージョンは新しすぎると詰みます。現在の最新は3.9.0ですが、3.9.0だと、今の正式版VS2019(16.9)だと動かない(動かなかったです、私の環境では、どうなんですかね?)ので、ちょっと古めの3.8.0にしておきます。次にConsoleApp.csprojのほうに行きましょう。</ItemGroup></Project>こちらは別に特段変わったことなく、Analyzerのcsprojを参照するだけです。<OutputItemType>Analyzer</OutputItemType>を欠かさずに。Componentに変更すると以下のような形にできます。Studioを再起動しましょう)これで、SuperSimpleAnalyzerをF5するとAnalyzerがConsoleAppで動いてる状態でデバッガがアタッチされます!のですが、最後にじゃあそのAnalyzerの実体をコピペできるように置いておきます。解析起動させたい部分を選ぶ。あとRegisterなんとかかんとかの種類は他にもいっぱいある。Diagnosticを作ってReportDiagnosticに詰める。}}Resourcesとか別に使う必要ないと思うので、ハイパーベタ書きの.csファイル一個に収めてあります。これでF5をすると......もちろんConsoleAppのほうでは、実際に動いて警告出している様が確認できます。普通のデバッグの感覚で実行できるので、めちゃくちゃ楽です。最高に書きやすい、これが2021年......!ユニットテストもするユニットテストのいいところは、テストをデバッグ実行すればコードの中身をダイレクトにステップ実行できるところにもあります。ある程度、上のように実コードでデバッグ実行して雰囲気を作れた後は、ユニットテスト上で再現コードを作っていくと、より捗るでしょう。Frameworkのものの参照が入って警告されたりで鬱陶しいことになったので、とりあえず以下のが警告の出ないパターン(?)で作ったものになります。netcoreapp3.1で。</ItemGroup></Project>このプロジェクトに作ったAnalyzerの参照を足して、以下のようなテストコードを書きます。}やることはVerifyAnalyzerAsyncに、それによって発生するエラー部分をDianogsticResultで指定する、という感じです。シンプルなケースはそれでいいのですが、テストコードにNuGetで外部ライブラリ参照があったり、プロジェクト参照があったりすると、これだけだとテストできません。xUnitのシンプルなケースに特化してラップしただけのものです)。MessagePipeでは以下のようなユーティリティを用意してテストしました。}のようにテストが書けました。まとめというわけでAnalyzer書いていきましょう。CodeとかRiderでも出来るようになるんじゃないでしょうか、どうだろうね、そのへんはわかりません。2020.2からAnalyzerが使えると言いましたが、そのサポート状況はなんだかヘンテコで、ぶっちゃけあんま使えないんじゃ疑惑があります。Editor側では有効になっているけどIDE側で有効にならない場合が割とあります。これはUnityの生成したcsprojに、カスタムで追加したAnalyzerの参照が適切に入ってなかったりするせいなのですが、それだと使いづらいですよね、というかAnalyzerってコード書いてる最中にリアルタイムに警告あるのがイケてるポイントなので。そこでCysharpでCsprojModifierというUnity用の拡張をオープンソースで公開しました。