https://github.com/kazenetu/csharpanalyze
C#のコード解析:ConvertCStoTSの再設計版
https://github.com/kazenetu/csharpanalyze
codeanalysis csharp dotnet-core
Last synced: 7 months ago
JSON representation
C#のコード解析:ConvertCStoTSの再設計版
- Host: GitHub
- URL: https://github.com/kazenetu/csharpanalyze
- Owner: kazenetu
- License: mit
- Created: 2018-12-05T13:19:59.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2019-10-30T11:14:08.000Z (over 6 years ago)
- Last Synced: 2025-02-14T04:23:30.306Z (about 1 year ago)
- Topics: codeanalysis, csharp, dotnet-core
- Language: C#
- Size: 846 KB
- Stars: 0
- Watchers: 3
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# CSharpAnalyze
C#のコード解析ライブラリ
# 実行環境
* .NET Core SDK 2.1以上
# 本ライブラリの利用例
* 他プログラム言語に変換
[C#からTypeScriptへの変換ツール(CStoTS)](https://github.com/kazenetu/CStoTS)
* ドキュメント作成
* C#のソース解析の足掛かり
# 前提
* submoduleなどで他のリポジトリから参照する。
# 実装方法
下記手順で実装する。
1. AnalyzeApplicationのインスタンス作成
1. 解析完了イベントの登録
1. 解析開始
## 実装例
```csharp
try
{
// 1. AnalyzeApplicationのインスタンス作成
var csAnalyze = new AnalyzeApplication();
// 2. 解析完了イベントの登録(C#ソースファイル単位で発行)
csAnalyze.Register(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)の詳細
```csharp
///
/// ファイルルート インターフェース
///
public interface IFileRoot
{
///
/// ファイルパス
///
string FilePath { get; }
///
/// 外部参照のクラス名とファイルパスのリスト
///
Dictionary OtherFiles { get; }
///
/// 子メンバ
///
List 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コマンドを利用する場合
```sh
#CSharpAnalyzeTest/CSharpAnalyzeTest.csprojのテストを実施
dotnet test ./CSharpAnalyzeTest/CSharpAnalyzeTest.csproj
```
# ライセンス
[MIT ライセンス](LICENSE)
# 使用パッケージ
* [Microsoft.CodeAnalysis.CSharp](https://www.nuget.org/packages/Microsoft.CodeAnalysis.CSharp/) ([Apache-2.0](https://github.com/dotnet/roslyn/blob/master/License.txt))
* [Microsoft.NetCore.Analyzers](https://www.nuget.org/packages/Microsoft.NetCore.Analyzers/) ([Apache-2.0](https://github.com/dotnet/roslyn-analyzers/blob/master/License.txt))