質問

私は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 "..."

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top