質問: C#です。 あるプログラムを移植することになって、その前段階としてハードコードした即値を洗い出したいといわれました。 目視で洗い出そうとするとファイル数が400近くあるのでかなり手間ですし、抜け漏れがでそうです。 できればプログラムで自動で洗い出したいです。 最初は正規表現のパターンマッチでやろうとしたのですが、 かなり複雑な条件になりそうで根本的に無理筋な気がしてきています。 できればC#の構文解析を行い、リテラルをピンポイントで抜き出したいです。 そのような目的に利用できるツールやライブラリはないでしょうか。 よろしくお願いします。
回答: C#のコンパイラーは近年オープンソース化されており(**.NET Compiler Platform** = **Roslyn**)、コード分析や自動修正のルールもSDKのクラスを使用すれば比較的容易に作成できるようになりました。 ですので定数の抽出程度であれば 1. .NET Compiler Platform SDKをインストールする 2. Analyzer With Code Fixプロジェクトを作成する 3. `DiagnosticAnalyzer`の`Initialize`メソッドで`RegisterSyntaxNodeAction`を呼びだしてコールバックを登録する 4. コールバック関数内で引数のノードが対象かどうかを判定し、対象であれば`ReportDiagnostic`メソッドを実行する。 という手順で簡単にVisual Studioのエラーリストに情報を表示することができます。 また`CodeFixProvider`でコードの自動修正を定義することもできます。