現在、コード分析がオンになっていないプロジェクトに取り組んでいます。
私がやりたいことは、チェックインする前に作業/タッチするファイルに対して CA を実行することですが、いくつかの制限があります。
- プロジェクトで有効にするオプションがありません。やったとしても…
- プロジェクトは巨大です。CA の実行には時間がかかり、警告は多数あります。触れたファイルをリストから選ぶのは、干し草の山の中の針のようなものです。
誰にもアイデアはありますか?
現在、コード分析がオンになっていないプロジェクトに取り組んでいます。
私がやりたいことは、チェックインする前に作業/タッチするファイルに対して CA を実行することですが、いくつかの制限があります。
誰にもアイデアはありますか?
アイデアは、ツールNDependを介してコードルールを実行することです(免責事項:私はツールの開発者の1人です)。
私がやりたいのは、私が操作/タッチしているファイルに対してCAを実行することです。
この最初の点に関して、NDependはLINQクエリを介してコードルールを記述します。提案された機能の1つは、現在のコードバージョンと以前のバージョンのコード(ベースライン)との間のコード差分をクエリすることです。したがって、ユーザーは、現在からベースラインまでの間に変更された内容のみに焦点を当てたコードルールを記述できます。
約200のデフォルトのコードルールが提案されています。たとえば、複雑なメソッドをさらに複雑にすることは避けてください。このルールのLINQコードを見ると、最初にCodeWasChangedのメソッドのみをフィルタリングしてから、十分に複雑で、さらに複雑になったメソッドを検出していることがわかります。ここでは、メソッドの複雑度は、一般的なコードメトリックである循環的複雑度によって定義されます。
// <Name>Avoid making complex methods even more complex (Source CC)</Name>
warnif count > 0
from m in JustMyCode.Methods where
m.CodeWasChanged() // <-----
let oldCC = m.OlderVersion().CyclomaticComplexity
where oldCC > 6 && m.CyclomaticComplexity > oldCC
select new { m,
oldCC ,
newCC = m.CyclomaticComplexity ,
oldLoc = m.OlderVersion().NbLinesOfCode,
newLoc = m.NbLinesOfCode,
}
すべてのデフォルトまたはカスタムルールは、ベースライン以降にリファクタリングされたコードまたは導入されたコードに制限されるように適合させることができます。コードルールのグループCodeQualityRegressionまたはAPIBreakingChangesには、これらの適合コードルールがすぐに含まれています。
ポイントに関しては、CAの実行には時間がかかり、警告は多数あります。今すぐNDependを試してみてください。そうすれば、待たされることはありません。大規模なコードベースを分析し、200個のデフォルトルールを実行するのに数秒かかります(これらは単なるC#LINQクエリであるため簡単にカスタマイズできます)。