C#のコード解析ライブラリ
- .NET Core SDK 2.1以上
- 他プログラム言語に変換
C#からTypeScriptへの変換ツール(CStoTS) - ドキュメント作成
- C#のソース解析の足掛かり
- submoduleなどで他のリポジトリから参照する。
下記手順で実装する。
- AnalyzeApplicationのインスタンス作成
- 解析完了イベントの登録
- 解析開始
try
{
// 1. AnalyzeApplicationのインスタンス作成
var csAnalyze = new AnalyzeApplication();
// 2. 解析完了イベントの登録(C#ソースファイル単位で発行)
csAnalyze.Register<IAnalyzed>(csAnalyze, (ev) =>
{
// C#ソースファイル名
Console.WriteLine($"[{ev.FilePath}]");
// C#ソースコードのコンソール出力
Console.WriteLine(ev.FileRoot?.ToString());
});
var srcPath = "解析対象のフォルダ(相対パス可)";
// 3. 解析開始
csAnalyze.Analyze(srcPath);
}
catch (Exception ex)
{
// 例外エラー発生時
Console.WriteLine(ex.Message);
return;
} /// <summary>
/// ファイルルート インターフェース
/// </summary>
public interface IFileRoot
{
/// <summary>
/// ファイルパス
/// </summary>
string FilePath { get; }
/// <summary>
/// 外部参照のクラス名とファイルパスのリスト
/// </summary>
Dictionary<string, string> OtherFiles { get; }
/// <summary>
/// 子メンバ
/// </summary>
List<IAnalyzeItem> Members { get; }
}※Membersの具体的なInterfaceはIAnalyzeItemを継承したAnalyzeItems/IItemXxxxxとなる。
詳細は下記参照
CSharpAnalyze.Domain.PublicInterfaces.AnalyzeItemsで定義
| C# | 対応Interface | Membersに複数IAnalyzeItemあり |
|---|---|---|
| interface | IItemInterface | ○ |
| class | IItemClass | ○ |
| コンストラクタメソッド | IItemConstructor | ○ |
| フィールド | IItemField | × |
| プロパティ | IItemProperty | ○ |
| メソッド | IItemMethod | ○ |
| enum | IItemEnum | × |
| foreach | IItemForEach | ○ |
| for | IItemFor | ○ |
| while | IItemWhile | ○ |
| do-while | IItemDo | ○ |
| if | IItemIf | ○ |
| else/else if | IItemElseClause | ○ |
| switch | IItemSwitch | ○ |
| case | IItemSwitchCase | ○ |
| break | IItemBreak | × |
| continue | ItemContinue | × |
| return | IItemReturn | × |
| ローカルフィールド生成 | IItemStatementLocalDeclaration | × |
| ローカルメソッド | IItemLocalFunction | ○ |
| 式 | IItemStatementExpression | × |
-
VisualStudio(2017以上)を利用する場合
CSharpAnalyze.slnを開いてテストを行う -
dotnetコマンドを利用する場合
#CSharpAnalyzeTest/CSharpAnalyzeTest.csprojのテストを実施 dotnet test ./CSharpAnalyzeTest/CSharpAnalyzeTest.csproj