Upload
ozaki-yoshihisa
View
1.662
Download
1
Embed Size (px)
DESCRIPTION
VSUG Leaders Summit 2008 で使用したスライドです。 Microsoft Source Analysis for C# でカスタムルールを作る方法について解説しています。
Citation preview
Microsoft Source
Analysis for C#
ご紹介
ご講演者名:尾崎 義尚
VSUG Leaders Summit 2008
VSUG Leaders Summit 2008
Source Analysis for C# とは
• 乱立する C# の記述方法を解決するために開発– C++スタイルやハンガリアンを撃墜
• MS 社内のベストプラクティスをもとに200のルールを提供
• コメント、ドキュメントなどわかりやすさを重視
• 社内標準ツールではないが、広く使われている– あえてスルーするーチームもある
– すでにバージョン 4.2• つまり、社内で長く使われてきた
• 静的コード分析 (FxCop) が IL を解析するのに対して、ソース コードを解析
VSUG Leaders Summit 2008
チェック内容
• エレメント、ステートメント、式、クエリ構文のレイアウト
• {}、()、[] などの配置
• キーワード、演算子のスペース
• 行のスペース
• メソッド パラメータの定義、メソッドの呼び出し位置
• クラス エレメントの標準オーダー
• エレメントヘッダとファイルヘッダのドキュメント書式
• エレメント、フィールド、変数の名前
• 組み込み方を使用しているか
などなど
VSUG Leaders Summit 2008
カスタム ルールを作るには (1/3)
1. クラス ライブラリ プロジェクトを作成
2. ライブラリの参照を追加– Microsoft.SourceAnalysis
– Microsoft.SourceAnalysis.Csharp
3. ルールをチェックするクラスを作成する– SourceAnalyzer クラスを継承
– [SourceAnalyzer(typeof(CsParser))] 属性を設定
4. ルールを説明する XML を作成する– 「埋め込まれたリソース」として設定
VSUG Leaders Summit 2008
[SourceAnalyzer(typeof(CsParser))]
public class OmCustomRule1 : SourceAnalyzer
{
public override void AnalyzeDocument(CodeDocument document)
{
Param.RequireNotNull(document, "document");
CsDocument csDocument = (CsDocument)document;
foreach(CsElement element in csDocument.RootElement)
{
// エラーの場合、
AddViolation(element, "OmCustomRule1", new object[0]);
}
}
}
カスタムルールを作るには (2/3)
VSUG Leaders Summit 2008
カスタムルールを作るには (3/3)
<?xml version="1.0" encoding="utf-8" ?>
<SourceAnalyzer Name="Custom Rules">
<Description>カスタムルールです。</Description>
<Rules>
<RuleGroup Name="Custom Rules Group">
<Rule Name="OmCustomRule1" CheckId="OM0001">
<Context>カスタムルールです。</Context>
<Description>カスタムルールの解説です。</Description>
</Rule>
</RuleGroup>
</Rules>
</SourceAnalyzer>
VSUG Leaders Summit 2008
オブジェクト モデル
Document
(CsDocument)
Element
(CsElement)
Element
(CsElement)
Element
(CsElement)
namespace Aaa.Bbbb
public class Cccc
using System;
using System.Data
・・・
VSUG Leaders Summit 2008
ElementType
• Accessor
• Class
• Constructor
• ConstructorInitializer
• Delegate
• Destructor
• EmptyElement
• Enum
• EnumItem
• Event
• ExternAliasDirective
• Field
• File
• Indexer
• Interface
• Method
• Namespace
• Property
• Root
• Struct
• UsingDirective
VSUG Leaders Summit 2008
ルールをデバッグするには (1/2)
ビルド後にアセンブリをコピーするように設定
xcopy "$(TargetDir)Souce*.*" "C:¥Program
Files¥Microsoft Source Analysis Tool for C#" /y
VSUG Leaders Summit 2008
ルールをデバッグするには (2/2)
デバッグで Visual Studio とソリューションを開くように構成
C:¥Program Files¥Microsoft Visual Studio 8¥
Common7¥IDE¥devenv.exe
"C:¥Users¥yoshihisa.ozaki¥Documents¥Visual Studio
2005¥Projects¥ClassLibrary4¥ClassLibrary4.sln"
VSUG Leaders Summit 2008
結局使える?
• カスタマイズとルールを選択することで使える部分もある
– ドキュメントがないので、作るのが大変
• 使えない部分
– コメント、ドキュメント系が英語を前提に作られている
–プロジェクトごとに設定できない
– TableAdapter などのデザイナのコードもチェックしてしまう
VSUG Leaders Summit 2008
Resources
• ダウンロード
https://code.msdn.microsoft.com/Release/ProjectReleases.aspx?ProjectName=sourceanalysis
• Blog
http://blogs.msdn.com/sourceanalysis/