Skip to content

C#のコード解析:ConvertCStoTSの再設計版

License

Notifications You must be signed in to change notification settings

kazenetu/CSharpAnalyze

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CSharpAnalyze

C#のコード解析ライブラリ

実行環境

  • .NET Core SDK 2.1以上

本ライブラリの利用例

前提

  • submoduleなどで他のリポジトリから参照する。

実装方法

下記手順で実装する。

  1. AnalyzeApplicationのインスタンス作成
  2. 解析完了イベントの登録
  3. 解析開始

実装例

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;
}

FileRoot(IFileRoot)の詳細

  /// <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となる。
 詳細は下記参照

C#とInterfaceの対応表

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

ライセンス

MIT ライセンス

使用パッケージ