stusmithさんの回答を完了するために、NDependが探しているようです。 NDependは、LYQクエリのコードクエリとルール(CQLinqと呼ぶ)を書くことができます。 免責事項:私はツールたとえば
の開発者の一人ですが、ここでいくつかのCQLinqクエリです: - 名前がxで
from t in Application.Types.WithNameLike("^x")
where t.IsClass select t
開始>リストクラス -
>リストをすべてXのサブクラス
from t in Application.Types
where t.DeriveFrom("MyNamespace.MyTypeX")
select t
- X
クラスのオブジェクトをインスタンス化>リストメソッド
from m in Application.Methods
where m.CreateA("MyNamespace.MyTypeX")
select m
- >メソッドを呼び出すメソッドリストy - ...
from m in Application.Methods
where m.IsUsing("MyNamespace.MyType.MyMethodY()")
select m
デフォルトでは200 code rules以上が提案されています。既存のルールをカスタマイズする、または独自のルールを作成することは、のよく知られた C#LINQ構文のおかげで簡単です。
は
CQLinqクエリはVisualStudioをライブで編集し、瞬時に結果を提供し、ブラウジング機能を持つことができます。
![enter image description here](https://i.stack.imgur.com/j7v0P.png)
実は、CQLinqはNDepend.APIに基づいており、より具体的には、名前空間NDepend.CodeModel内の型に。 NDepend.APIを使うと、CQLinqのクエリだけでもっと複雑な処理を行うプログラムを書くことができます。たとえば、NDepend.APIでCode Duplicate Finder toolと書いたとします。
ルールはlive in Visual Studio、ビルドプロセス時はgenerated HTML+javascript reportで確認できます。
@monkeygetがソースコードを見ていない限り、そうすれば、おそらくパーサーが必要になるでしょう。 – kenny
またはコンパイラ:)。そうです、私は彼が "ソースコード"と言いました。私はNDependといくつかのIDEプラグインが援助の可能性があると思います。ごめんなさい! – MichaelGG
System.Reflectionは確かに私が調べるオプションですが、限られているように見えます。私がしたいことのために、より強力でシンプルなツールが存在しなければならないと確信しています。 質問でソースコードを述べましたが、ILで作業しているツールもOKです。 – Monkeyget