type属性にNDependの方法クエリを制限する方法
質問
私はNDependのは、標準的な「メソッドが大きすぎる」クエリの修正版を使用して、長い方法を識別するために取得しようとしています。
私は、開発者がをほとんど制御を持っていることを、私はDebuggerNonUserCode
属性とInitializeComponent()
を使用して生成されたコードをフィルタリングして、長い方法を報告する必要はありません。
残念ながら、私はまだいくつかの偽陽性を取得します。問題は、型自体がDebuggerNonUserCode
属性を持っていながら、方法は、そう彼らはそれらが生成されているという事実にもかかわらず、出力に含まれていないということです。
私は、型およびメソッド間の結合のようなものを探しています:私DebuggerNonUserCode
属性を持っており、それらの上でクエリを実行しますが、私はCQLでこれを表現する方法を見つけ出すことはできませんしていないすべてのタイプを与えます。
アセンブリのいくつかのために、私は完全な名前で単純にフィルタリングすることができますが、残念ながら私たちのアセンブリのいくつかは、開発者作られ、生成された型を混ぜます。残念ながらIsGeneratedByCompiler
は、この場合のいずれかで使用することはできません。
私のクエリ
WARN IF Count > 0 IN SELECT METHODS WHERE
NbLinesOfCode > 30 AND
!HasAttribute "System.Diagnostics.DebuggerNonUserCodeAttribute" AND
!NameIs "InitializeComponent()"
ORDER BY NbLinesOfCode DESC
解決
ブライアン、LINQクエリ(CQLinq)を超えるコードルールのおかげでソースコードするあなたが求めているコード規則は次のとおりです。
warnif count > 0
from m in Application.Methods where
m.NbLinesOfCode > 30 &&
!m.ParentType.HasAttribute( "System.Diagnostics.DebuggerNonUserCodeAttribute") &&
m.Name != "InitializeComponent()"
orderby m.NbLinesOfCode descending
select new { m, m.NbLinesOfCode }
CQLinq構文ものジャスト・マイ・コードのあるものを定義するための方法を提供します。この機能は、ここを記述しています。基本的には、のnotmycodeので始まるクエリを使用して設定ををJustMyCode を定義する必要があります。そして、あなたが求めているのルールを簡単に書き換えることができます:
warnif count > 0
from m in JustMyCode.Methods where
m.NbLinesOfCode > 30
orderby m.NbLinesOfCode descending
select new { m, m.NbLinesOfCode }
組のJustMyCode のいずれかの符号則上、再利用可能なすべてのために一度定義。 Additionalyあなたはの notmycode のデフォルトのクエリ廃棄生成を見ることができますそしてJustMyCodeからデザイナーの方法の
他のヒント
私はかなりNDependのように、それはまだ、名前空間/タイプ/メソッド情報は、単一のクエリに結合することができないことを最大の単一の欠点です。その機能は、CQL本当に強力なものになるだろう。
は別にチェックが ' IsGeneratedByCompiler ' はとから ' IsInFrameworkAssembly ' 有用であり得ます。 することもできますクエリから除去特定の名前空間(名前空間をのOUT "..." )