docs: 生成完整项目文档
创建以下文档: - INDEX.md - 项目索引和概览 - ARCHITECTURE.md - 系统架构设计文档 - INTERFACES.md - 接口和类型定义文档 - DEVELOPER_GUIDE.md - 开发者指南 文档覆盖内容: - 项目结构和模块说明 - 技术栈和依赖 - 核心组件设计 - API 接口定义 - 数据模型 - 开发环境配置 - 代码规范 - 测试指南 - 调试技巧 - Git 工作流 Co-authored-by: monkeycode-ai <monkeycode-ai@chaitin.com>
This commit is contained in:
@@ -0,0 +1,373 @@
|
||||
# CodePlay 系统架构
|
||||
|
||||
## 系统概览
|
||||
|
||||
CodePlay 采用分层架构设计,将解析、转换、生成和验证流程分离,确保系统的可扩展性和可维护性。
|
||||
|
||||
## 架构图
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
subgraph "客户端层"
|
||||
Web[Web 界面]
|
||||
CLI[CLI 工具]
|
||||
API[API 客户端]
|
||||
end
|
||||
|
||||
subgraph "API 层 - CodePlay.Web"
|
||||
Controllers[API 控制器]
|
||||
Middleware[中间件]
|
||||
end
|
||||
|
||||
subgraph "核心层 - CodePlay.Core"
|
||||
ConversionService[转换服务]
|
||||
|
||||
subgraph "解析器"
|
||||
CSharpParser[C# 解析器]
|
||||
JavaParser[Java 解析器]
|
||||
CppParser[C++ 解析器]
|
||||
end
|
||||
|
||||
subgraph "转换器"
|
||||
CSharpJava[C#→Java]
|
||||
JavaCSharp[Java→C#]
|
||||
CSharpCpp[C#→C++]
|
||||
CppCSharp[C++→C#]
|
||||
JavaCpp[Java→C++]
|
||||
CppJava[C++→Java]
|
||||
end
|
||||
|
||||
subgraph "生成器"
|
||||
JavaGen[Java 生成器]
|
||||
CSharpGen[C# 生成器]
|
||||
CppGen[C++ 生成器]
|
||||
end
|
||||
|
||||
subgraph "验证器"
|
||||
CSharpValidator[C# 验证器]
|
||||
JavaValidator[Java 验证器]
|
||||
CppValidator[C++ 验证器]
|
||||
end
|
||||
end
|
||||
|
||||
subgraph "数据层"
|
||||
Models[数据模型]
|
||||
Storage[存储服务]
|
||||
end
|
||||
|
||||
Web --> Controllers
|
||||
CLI --> Controllers
|
||||
API --> Controllers
|
||||
Controllers --> ConversionService
|
||||
ConversionService --> CSharpParser
|
||||
ConversionService --> JavaParser
|
||||
ConversionService --> CppParser
|
||||
ConversionService --> CSharpJava
|
||||
ConversionService --> JavaCSharp
|
||||
ConversionService --> JavaGen
|
||||
ConversionService --> CSharpValidator
|
||||
ConversionService --> JavaValidator
|
||||
```
|
||||
|
||||
## 技术栈
|
||||
|
||||
### 后端框架
|
||||
|
||||
| 组件 | 技术选型 | 说明 |
|
||||
|------|---------|------|
|
||||
| 主要语言 | C# | .NET 8.0 |
|
||||
| Web 框架 | ASP.NET Core | Web API + MVC |
|
||||
| 测试框架 | xUnit | 单元测试和集成测试 |
|
||||
|
||||
### 核心依赖
|
||||
|
||||
| 库 | 版本 | 用途 |
|
||||
|---|------|------|
|
||||
| Microsoft.CodeAnalysis.CSharp (Roslyn) | 4.8.0 | C# 代码解析 |
|
||||
| TreeSitter | 1.0.0 | 多语言解析支持 |
|
||||
|
||||
### 解析器技术
|
||||
|
||||
| 语言 | 解析器 | 状态 |
|
||||
|------|--------|------|
|
||||
| C# | Roslyn | ✅ 已实现 |
|
||||
| Java | TreeSitter/Text Processing | 🔄 计划中 |
|
||||
| C++ | TreeSitter/libclang | 🔄 计划中 |
|
||||
|
||||
## 目录结构
|
||||
|
||||
```
|
||||
/workspace/
|
||||
├── CodePlay.sln # 解决方案文件
|
||||
├── CodePlay.Core/ # 核心类库
|
||||
│ ├── Common/ # 公共类型
|
||||
│ │ └── Enums.cs # 枚举定义
|
||||
│ ├── Models/ # 数据模型
|
||||
│ │ ├── ConversionModels.cs # 转换相关模型
|
||||
│ │ └── ProjectModels.cs # 项目相关模型
|
||||
│ ├── Interfaces/ # 接口定义
|
||||
│ │ └── IInterfaces.cs # 核心接口
|
||||
│ ├── Parsers/ # 解析器
|
||||
│ │ ├── BaseParser.cs # 解析器基类
|
||||
│ │ └── CSharpParser.cs # C# 解析器
|
||||
│ ├── Converters/ # 转换器
|
||||
│ │ ├── CSharpToJavaConverter.cs
|
||||
│ │ ├── CSharpToJavaStrategy.cs
|
||||
│ │ └── JavaCodeGenerator.cs
|
||||
│ └── Services/ # 服务层
|
||||
│ └── ConversionService.cs
|
||||
├── CodePlay.Web/ # Web API 项目
|
||||
│ ├── Controllers/ # API 控制器
|
||||
│ │ ├── ConversionController.cs
|
||||
│ │ └── WeatherForecastController.cs
|
||||
│ └── Program.cs # 入口文件
|
||||
├── CodePlay.CLI/ # CLI 工具
|
||||
│ ├── Commands/ # 命令定义
|
||||
│ └── Program.cs # 入口文件
|
||||
└── CodePlay.Tests/ # 测试项目
|
||||
├── Parsers/ # 解析器测试
|
||||
│ └── CSharpParserTests.cs
|
||||
└── Converters/ # 转换器测试
|
||||
└── CSharpToJavaConverterTests.cs
|
||||
```
|
||||
|
||||
## 核心组件说明
|
||||
|
||||
### 1. 解析器(Parsers)
|
||||
|
||||
负责将源代码解析为抽象语法树(AST)。
|
||||
|
||||
**接口**:`IParser`
|
||||
|
||||
```csharp
|
||||
public interface IParser
|
||||
{
|
||||
Task<SyntaxTree> ParseAsync(string sourceCode, CancellationToken cancellationToken = default);
|
||||
}
|
||||
```
|
||||
|
||||
**实现**:
|
||||
- `CSharpParser` - 基于 Roslyn 实现 C# 代码解析
|
||||
- 支持提取注释、文档字符串、类、方法、属性等
|
||||
|
||||
### 2. 转换器(Converters)
|
||||
|
||||
负责将源语言的 AST 转换为目标语言的 AST。
|
||||
|
||||
**接口**:`IConverter`
|
||||
|
||||
```csharp
|
||||
public interface IConverter
|
||||
{
|
||||
Task<ConversionResult> ConvertAsync(
|
||||
SyntaxTree syntaxTree,
|
||||
LanguageType targetLanguage,
|
||||
ConversionOptions? options = null,
|
||||
CancellationToken cancellationToken = default);
|
||||
}
|
||||
```
|
||||
|
||||
**实现**:
|
||||
- `CSharpToJavaConverter` - C# → Java 转换
|
||||
- 使用策略模式:`CSharpToJavaStrategy`
|
||||
|
||||
### 3. 代码生成器(Generators)
|
||||
|
||||
负责从 AST 生成目标语言的源代码。
|
||||
|
||||
**接口**:`ICodeGenerator`
|
||||
|
||||
```csharp
|
||||
public interface ICodeGenerator
|
||||
{
|
||||
string Generate(SyntaxTree syntaxTree);
|
||||
}
|
||||
```
|
||||
|
||||
**实现**:
|
||||
- `JavaCodeGenerator` - Java 代码生成
|
||||
- 支持格式化、缩进处理、文档生成
|
||||
|
||||
### 4. 转换服务(ConversionService)
|
||||
|
||||
提供统一的转换入口,协调解析、转换、生成和验证流程。
|
||||
|
||||
```csharp
|
||||
public class ConversionService
|
||||
{
|
||||
public async Task<ConversionResult> ConvertAsync(
|
||||
ConversionRequest request,
|
||||
CancellationToken cancellationToken = default);
|
||||
}
|
||||
```
|
||||
|
||||
## 数据流
|
||||
|
||||
### 转换流程
|
||||
|
||||
```
|
||||
1. 接收请求 (ConversionRequest)
|
||||
↓
|
||||
2. 解析源代码 → SyntaxTree
|
||||
↓
|
||||
3. 转换 AST → Converted SyntaxTree
|
||||
↓
|
||||
4. 生成代码 → Target Code
|
||||
↓
|
||||
5. 编译验证 → ValidationResult
|
||||
↓
|
||||
6. 返回结果 (ConversionResult)
|
||||
```
|
||||
|
||||
### 核心数据模型
|
||||
|
||||
**ConversionRequest** - 转换请求
|
||||
```csharp
|
||||
- SourceCode: string
|
||||
- SourceLanguage: LanguageType
|
||||
- TargetLanguage: LanguageType
|
||||
- ValidationRounds: int (1-3)
|
||||
- Options: ConversionOptions
|
||||
```
|
||||
|
||||
**ConversionResult** - 转换结果
|
||||
```csharp
|
||||
- Success: bool
|
||||
- TransformedCode: string
|
||||
- Report: ConversionReport
|
||||
- Warnings: List<ConversionWarning>
|
||||
- ValidationSummary: ValidationSummary
|
||||
```
|
||||
|
||||
**SyntaxTree** - 语法树
|
||||
```csharp
|
||||
- Language: LanguageType
|
||||
- Root: SyntaxNode
|
||||
- Comments: List<SyntaxComment>
|
||||
- Documentation: List<SyntaxDocumentation>
|
||||
```
|
||||
|
||||
## API 设计
|
||||
|
||||
### REST API 端点
|
||||
|
||||
**POST /api/conversion** - 执行代码转换
|
||||
|
||||
请求示例:
|
||||
```json
|
||||
{
|
||||
"sourceCode": "public class Test { }",
|
||||
"sourceLanguage": 1,
|
||||
"targetLanguage": 2,
|
||||
"validationRounds": 2
|
||||
}
|
||||
```
|
||||
|
||||
响应示例:
|
||||
```json
|
||||
{
|
||||
"success": true,
|
||||
"transformedCode": "public class Test { }",
|
||||
"report": {
|
||||
"linesConverted": 1,
|
||||
"classesConverted": 1,
|
||||
"methodsConverted": 0
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**GET /api/conversion/supported** - 获取支持的转换列表
|
||||
|
||||
**GET /api/conversion/supported/{source}/{target}** - 检查是否支持指定转换
|
||||
|
||||
## 扩展性设计
|
||||
|
||||
### 添加新的语言支持
|
||||
|
||||
1. 在 `LanguageType` 枚举中添加新语言
|
||||
2. 实现 `IParser` 接口创建新解析器
|
||||
3. 实现 `ICodeGenerator` 接口创建新生成器
|
||||
4. 实现 `IConversionStrategy` 接口创建转换策略
|
||||
5. 在 `ConversionService` 中注册
|
||||
|
||||
### 添加新的转换对
|
||||
|
||||
1. 创建新的 `IConverter` 实现
|
||||
2. 创建对应的 `IConversionStrategy` 实现
|
||||
3. 在 `ConversionService` 构造函数中注册
|
||||
|
||||
## 验证流程
|
||||
|
||||
### 编译验证器(Compiler Validator)
|
||||
|
||||
**接口**:`ICompilerValidator`
|
||||
|
||||
```csharp
|
||||
public interface ICompilerValidator
|
||||
{
|
||||
Task<ValidationResult> ValidateAsync(
|
||||
string code,
|
||||
LanguageType language,
|
||||
CancellationToken cancellationToken = default);
|
||||
}
|
||||
```
|
||||
|
||||
### 自动修复引擎(Auto Fix Engine)
|
||||
|
||||
**接口**:`IAutoFixEngine`
|
||||
|
||||
```csharp
|
||||
public interface IAutoFixEngine
|
||||
{
|
||||
Task<FixResult> FixAsync(
|
||||
string code,
|
||||
List<CompilationError> errors,
|
||||
int round,
|
||||
CancellationToken cancellationToken = default);
|
||||
}
|
||||
```
|
||||
|
||||
**修复轮次策略**:
|
||||
1. 第 1 轮:修复导入/using 语句
|
||||
2. 第 2 轮:修复类型映射
|
||||
3. 第 3 轮:修复 API 调用
|
||||
|
||||
## 配置管理
|
||||
|
||||
### 转换选项(ConversionOptions)
|
||||
|
||||
```csharp
|
||||
- KeepComments: bool
|
||||
- KeepDocStrings: bool
|
||||
- KeepFormatting: bool
|
||||
- IndentSize: int
|
||||
- UseTabs: bool
|
||||
- EnableAutoFix: bool
|
||||
```
|
||||
|
||||
## 错误处理
|
||||
|
||||
### 错误分类
|
||||
|
||||
| 类型 | 错误码前缀 | 说明 |
|
||||
|------|----------|------|
|
||||
| 解析错误 | ERR_PARSE_* | 源代码语法错误 |
|
||||
| 转换错误 | ERR_CONVERT_* | 转换过程错误 |
|
||||
| 验证错误 | ERR_VALIDATE_* | 编译验证失败 |
|
||||
| 系统错误 | ERR_SYSTEM_* | 内部系统错误 |
|
||||
|
||||
## 日志系统
|
||||
|
||||
使用结构化日志记录关键操作:
|
||||
|
||||
- 转换开始/结束
|
||||
- 验证结果
|
||||
- 错误详情
|
||||
- 性能指标
|
||||
|
||||
## 安全考虑
|
||||
|
||||
- 输入验证:检查源代码长度、语言类型
|
||||
- 资源限制:限制单次转换的最大代码量
|
||||
- 超时控制:设置转换和验证的超时时间
|
||||
- 错误信息:不暴露内部实现细节
|
||||
@@ -0,0 +1,519 @@
|
||||
# CodePlay 开发者指南
|
||||
|
||||
## 开发环境要求
|
||||
|
||||
### 必需工具
|
||||
|
||||
| 工具 | 版本 | 说明 |
|
||||
|------|------|------|
|
||||
| .NET SDK | 8.0+ | 开发和构建工具 |
|
||||
| IDE | 推荐 Visual Studio 2022 / Rider | C# 开发环境 |
|
||||
| Git | 任意版本 | 版本控制 |
|
||||
|
||||
### 可选工具
|
||||
|
||||
| 工具 | 说明 |
|
||||
|------|------|
|
||||
| Swagger UI | 访问 `http://localhost:5000/swagger` 查看 API 文档 |
|
||||
| Postman | API 测试工具 |
|
||||
|
||||
## 快速开始
|
||||
|
||||
### 1. 克隆仓库
|
||||
|
||||
```bash
|
||||
cd /workspace
|
||||
```
|
||||
|
||||
### 2. 还原依赖
|
||||
|
||||
```bash
|
||||
dotnet restore CodePlay.sln
|
||||
```
|
||||
|
||||
### 3. 构建项目
|
||||
|
||||
```bash
|
||||
dotnet build CodePlay.sln
|
||||
```
|
||||
|
||||
### 4. 运行测试
|
||||
|
||||
```bash
|
||||
dotnet test CodePlay.Tests/CodePlay.Tests.csproj --logger "console;verbosity=normal"
|
||||
```
|
||||
|
||||
### 5. 启动 Web API
|
||||
|
||||
```bash
|
||||
dotnet run --project CodePlay.Web/CodePlay.Web.csproj
|
||||
```
|
||||
|
||||
默认监听地址:
|
||||
- HTTP: `http://localhost:5000`
|
||||
- HTTPS: `https://localhost:5001`
|
||||
|
||||
### 6. 启动 CLI(开发中)
|
||||
|
||||
```bash
|
||||
dotnet run --project CodePlay.CLI/CodePlay.CLI.csproj -- --help
|
||||
```
|
||||
|
||||
## 项目结构
|
||||
|
||||
参见 [ARCHITECTURE.md](./ARCHITECTURE.md) 了解详细架构。
|
||||
|
||||
## 代码规范
|
||||
|
||||
### 命名约定
|
||||
|
||||
#### C# 类和接口
|
||||
|
||||
- **类名**: PascalCase
|
||||
- **接口名**: IPascalCase
|
||||
- **方法名**: PascalCase
|
||||
- **属性名**: PascalCase
|
||||
- **私有字段**: _camelCase
|
||||
- **局部变量**: camelCase
|
||||
- **常量**: PASCAL_CASE
|
||||
|
||||
#### 文件和目录
|
||||
|
||||
- **文件名**: PascalCase.cs
|
||||
- **目录名**: PascalCase
|
||||
|
||||
### 注释规范
|
||||
|
||||
#### 文档注释
|
||||
|
||||
所有公共成员必须有 XML 文档注释:
|
||||
|
||||
```csharp
|
||||
/// <summary>
|
||||
/// 方法的功能描述
|
||||
/// </summary>
|
||||
/// <param name="param">参数说明</param>
|
||||
/// <returns>返回值说明</returns>
|
||||
public string Method(string param)
|
||||
```
|
||||
|
||||
#### 行内注释
|
||||
|
||||
```csharp
|
||||
// 使用单行注释解释复杂的逻辑
|
||||
var result = CalculateComplexLogic(); // 这里是为什么需要这样计算
|
||||
|
||||
/*
|
||||
多行注释用于说明代码块的整体逻辑
|
||||
*/
|
||||
```
|
||||
|
||||
### 异常处理
|
||||
|
||||
#### 抛出异常
|
||||
|
||||
```csharp
|
||||
if (string.IsNullOrWhiteSpace(sourceCode))
|
||||
{
|
||||
throw new ArgumentException("Source code is required", nameof(sourceCode));
|
||||
}
|
||||
```
|
||||
|
||||
#### 捕获异常
|
||||
|
||||
```csharp
|
||||
try
|
||||
{
|
||||
// 可能抛出异常的代码
|
||||
}
|
||||
catch (Exception ex) when (!Debugger.IsAttached)
|
||||
{
|
||||
// 记录日志
|
||||
_logger.LogError(ex, "操作失败");
|
||||
throw;
|
||||
}
|
||||
```
|
||||
|
||||
### 异步编程
|
||||
|
||||
#### 异步方法命名
|
||||
|
||||
- 异步方法以 `Async` 结尾
|
||||
- 返回 `Task` 或 `Task<T>`
|
||||
|
||||
```csharp
|
||||
public async Task<ConversionResult> ConvertAsync(
|
||||
ConversionRequest request,
|
||||
CancellationToken cancellationToken)
|
||||
```
|
||||
|
||||
#### 取消令牌
|
||||
|
||||
所有异步操作都应该支持取消:
|
||||
|
||||
```csharp
|
||||
public async Task<Result> ExecuteAsync(CancellationToken cancellationToken = default)
|
||||
{
|
||||
await DoWorkAsync(cancellationToken);
|
||||
}
|
||||
```
|
||||
|
||||
### 依赖注入
|
||||
|
||||
遵循 ASP.NET Core 的依赖注入模式:
|
||||
|
||||
```csharp
|
||||
// 注册服务
|
||||
builder.Services.AddSingleton<ConversionService>();
|
||||
builder.Services.AddScoped<IConverter, CSharpToJavaConverter>();
|
||||
|
||||
// 注入到类
|
||||
public class MyService
|
||||
{
|
||||
private readonly ConversionService _service;
|
||||
|
||||
public MyService(ConversionService service)
|
||||
{
|
||||
_service = service;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## 测试指南
|
||||
|
||||
### 测试项目结构
|
||||
|
||||
```
|
||||
CodePlay.Tests/
|
||||
├── Parsers/
|
||||
│ └── CSharpParserTests.cs
|
||||
└── Converters/
|
||||
└── CSharpToJavaConverterTests.cs
|
||||
```
|
||||
|
||||
### 单元测试最佳实践
|
||||
|
||||
#### 测试类命名
|
||||
|
||||
- `{被测试类}Tests` 格式
|
||||
|
||||
#### 测试方法命名
|
||||
|
||||
- `{方法名}_{场景}_{期望结果}` 格式
|
||||
|
||||
```csharp
|
||||
[Fact]
|
||||
public void ParseAsync_SimpleClass_ShouldParseSuccessfully()
|
||||
```
|
||||
|
||||
#### 使用 Arrange-Act-Assert 模式
|
||||
|
||||
```csharp
|
||||
[Fact]
|
||||
public void Test_Method()
|
||||
{
|
||||
// Arrange(准备)
|
||||
var parser = new CSharpParser();
|
||||
var code = "public class Test { }";
|
||||
|
||||
// Act(执行)
|
||||
var result = await parser.ParseAsync(code);
|
||||
|
||||
// Assert(断言)
|
||||
Assert.NotNull(result);
|
||||
Assert.Equal(LanguageType.CSharp, result.Language);
|
||||
}
|
||||
```
|
||||
|
||||
### 运行测试
|
||||
|
||||
#### 运行所有测试
|
||||
|
||||
```bash
|
||||
dotnet test
|
||||
```
|
||||
|
||||
#### 运行特定测试类
|
||||
|
||||
```bash
|
||||
dotnet test --filter "FullyQualifiedName~CSharpParserTests"
|
||||
```
|
||||
|
||||
#### 查看详细信息
|
||||
|
||||
```bash
|
||||
dotnet test --logger "console;verbosity=detailed"
|
||||
```
|
||||
|
||||
## 调试技巧
|
||||
|
||||
### 日志调试
|
||||
|
||||
使用 `ILogger` 进行调试:
|
||||
|
||||
```csharp
|
||||
_logger.LogDebug("当前状态:{State}", state);
|
||||
_logger.LogInformation("操作成功完成");
|
||||
_logger.LogWarning("潜在问题:{Issue}", issue);
|
||||
_logger.LogError(ex, "操作失败:{Error}", error);
|
||||
```
|
||||
|
||||
### 断点调试
|
||||
|
||||
在 IDE 中设置断点:
|
||||
1. 在代码行号左侧点击设置断点
|
||||
2. 按 F5 启动调试
|
||||
3. 使用 F10/F11 单步执行
|
||||
|
||||
### 调试输出
|
||||
|
||||
使用 `Debug.WriteLine` 输出调试信息:
|
||||
|
||||
```csharp
|
||||
Debug.WriteLine($"当前节点类型:{node.Type}");
|
||||
```
|
||||
|
||||
## 添加新的转换支持
|
||||
|
||||
### 1. 添加语言枚举
|
||||
|
||||
在 `Enums.cs` 中添加:
|
||||
|
||||
```csharp
|
||||
public enum LanguageType
|
||||
{
|
||||
// ...现有语言
|
||||
Python = 4 // 新语言
|
||||
}
|
||||
```
|
||||
|
||||
### 2. 实现解析器
|
||||
|
||||
创建 `{Language}Parser.cs`:
|
||||
|
||||
```csharp
|
||||
public class PythonParser : BaseParser
|
||||
{
|
||||
public override LanguageType SupportedLanguage => LanguageType.Python;
|
||||
|
||||
public override Task<SyntaxTree> ParseAsync(string sourceCode, CancellationToken cancellationToken)
|
||||
{
|
||||
// 实现解析逻辑
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 3. 实现转换器
|
||||
|
||||
创建 `{Source}To{Target}Converter.cs`:
|
||||
|
||||
```csharp
|
||||
public class CSharpToPythonConverter : IConverter
|
||||
{
|
||||
public async Task<ConversionResult> ConvertAsync(
|
||||
SyntaxTree syntaxTree,
|
||||
LanguageType targetLanguage,
|
||||
ConversionOptions? options = null,
|
||||
CancellationToken cancellationToken = default)
|
||||
{
|
||||
// 实现转换逻辑
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 4. 实现生成器
|
||||
|
||||
创建 `{Language}CodeGenerator.cs`:
|
||||
|
||||
```csharp
|
||||
public class PythonCodeGenerator : ICodeGenerator
|
||||
{
|
||||
public string Generate(SyntaxTree syntaxTree)
|
||||
{
|
||||
// 实现代码生成
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 5. 注册服务
|
||||
|
||||
在 `ConversionService` 中注册:
|
||||
|
||||
```csharp
|
||||
public ConversionService()
|
||||
{
|
||||
RegisterConverter(LanguageType.CSharp, LanguageType.Python, new CSharpToPythonConverter());
|
||||
}
|
||||
```
|
||||
|
||||
## 添加新的 API 端点
|
||||
|
||||
### 1. 创建控制器
|
||||
|
||||
```csharp
|
||||
[ApiController]
|
||||
[Route("api/[controller]")]
|
||||
public class ProjectController : ControllerBase
|
||||
{
|
||||
[HttpGet("{id}")]
|
||||
public async Task<ActionResult<Project>> GetProject(string id)
|
||||
{
|
||||
// 实现逻辑
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 2. 配置路由
|
||||
|
||||
在 `Program.cs` 中:
|
||||
|
||||
```csharp
|
||||
app.MapControllers();
|
||||
```
|
||||
|
||||
### 3. 添加 Swagger 文档
|
||||
|
||||
```csharp
|
||||
builder.Services.AddSwaggerGen(c =>
|
||||
{
|
||||
c.SwaggerDoc("v1", new OpenApiInfo
|
||||
{
|
||||
Title = "CodePlay API",
|
||||
Version = "v1"
|
||||
});
|
||||
});
|
||||
```
|
||||
|
||||
## 常见问题
|
||||
|
||||
### Q: 编译失败
|
||||
|
||||
**A**: 检查 .NET SDK 版本:
|
||||
|
||||
```bash
|
||||
dotnet --version
|
||||
```
|
||||
|
||||
应该是 8.0 或更高版本。
|
||||
|
||||
### Q: 测试失败
|
||||
|
||||
**A**: 查看测试输出,确认是否是因为:
|
||||
- 依赖未还原
|
||||
- 代码变更导致测试用例失效
|
||||
- 环境问题
|
||||
|
||||
### Q: Web API 无法启动
|
||||
|
||||
**A**: 检查端口占用情况:
|
||||
|
||||
```bash
|
||||
netstat -ano | findstr :5000
|
||||
```
|
||||
|
||||
### Q: 转换器不支持某语言对
|
||||
|
||||
**A**: 检查 `ConversionService` 中是否已注册该转换对:
|
||||
|
||||
```csharp
|
||||
var supported = service.GetSupportedConversions();
|
||||
```
|
||||
|
||||
## Git 工作流
|
||||
|
||||
### 分支命名
|
||||
|
||||
- 功能分支:`{YYMMDD}-feat-{feature-name}`
|
||||
- 修复分支:`{YYMMDD}-fix-{issue-id}`
|
||||
|
||||
### 提交消息
|
||||
|
||||
使用以下格式:
|
||||
|
||||
```
|
||||
feat: 添加新功能
|
||||
fix: 修复问题
|
||||
docs: 更新文档
|
||||
test: 添加测试
|
||||
refactor: 代码重构
|
||||
chore: 日常维护
|
||||
```
|
||||
|
||||
### 推送代码
|
||||
|
||||
```bash
|
||||
git add .
|
||||
git commit -m "feat: 描述你的更改"
|
||||
git push origin {branch-name}
|
||||
```
|
||||
|
||||
## 发布流程
|
||||
|
||||
### 1. 更新版本号
|
||||
|
||||
在所有 `.csproj` 文件中更新版本号。
|
||||
|
||||
### 2. 生成 NuGet 包
|
||||
|
||||
```bash
|
||||
dotnet pack CodePlay.Core/CodePlay.Core.csproj -c Release
|
||||
```
|
||||
|
||||
### 3. 创建 Docker 镜像(Web 服务)
|
||||
|
||||
```bash
|
||||
docker build -t codeplay-web:latest -f CodePlay.Web/Dockerfile .
|
||||
```
|
||||
|
||||
### 4. 生成发布说明
|
||||
|
||||
在 GitHub Releases 中创建新版本,包含:
|
||||
- 版本号
|
||||
- 更新内容
|
||||
- 已知问题
|
||||
- 升级指南
|
||||
|
||||
## 性能优化建议
|
||||
|
||||
1. **缓存**:缓存已解析的语法树
|
||||
2. **并行处理**:对多个文件使用并行转换
|
||||
3. **内存管理**:及时释放大对象
|
||||
4. **异步 I/O**:使用异步文件读写
|
||||
|
||||
## 安全建议
|
||||
|
||||
1. **输入验证**:检查所有输入参数
|
||||
2. **资源限制**:限制单次转换的代码量
|
||||
3. **超时控制**:设置操作超时时间
|
||||
4. **错误处理**:不暴露敏感信息
|
||||
|
||||
## 资源链接
|
||||
|
||||
- [.NET 文档](https://docs.microsoft.com/en-us/dotnet/)
|
||||
- [ASP.NET Core 文档](https://docs.microsoft.com/en-us/aspnet/core/)
|
||||
- [xUnit 测试框架](https://xunit.net/)
|
||||
- [Swagger 文档](https://swagger.io/docs/)
|
||||
|
||||
## 贡献指南
|
||||
|
||||
### 提交代码前检查清单
|
||||
|
||||
- [ ] 代码通过编译
|
||||
- [ ] 所有测试通过
|
||||
- [ ] 代码格式符合规范
|
||||
- [ ] 添加了必要的注释
|
||||
- [ ] 更新了相关文档
|
||||
- [ ] 提交了任务列表(如适用)
|
||||
|
||||
### 代码审查要点
|
||||
|
||||
1. 功能是否正确实现
|
||||
2. 代码是否可读
|
||||
3. 是否有足够的测试覆盖
|
||||
4. 是否遵循了架构设计
|
||||
5. 是否有性能问题
|
||||
|
||||
## 联系方式
|
||||
|
||||
- 项目仓库:[GitHub](https://github.com/your-org/codeplay)
|
||||
- 问题反馈:[Issues](https://github.com/your-org/codeplay/issues)
|
||||
@@ -0,0 +1,116 @@
|
||||
# CodePlay 项目文档索引
|
||||
|
||||
## 项目概述
|
||||
|
||||
CodePlay 是一个代码转换工具平台,支持 C#、Java、C++ 三种编程语言之间的双向转换。平台提供 Web 界面、CLI 工具和 API 接口三种使用方式。
|
||||
|
||||
## 文档结构
|
||||
|
||||
| 文档名称 | 说明 |
|
||||
|---------|------|
|
||||
| [ARCHITECTURE.md](./ARCHITECTURE.md) | 系统架构设计文档 |
|
||||
| [INTERFACES.md](./INTERFACES.md) | 接口和类型定义文档 |
|
||||
| [DEVELOPER_GUIDE.md](./DEVELOPER_GUIDE.md) | 开发者指南 |
|
||||
|
||||
## 核心模块
|
||||
|
||||
### 1. CodePlay.Core - 核心转换引擎
|
||||
|
||||
[查看 Core 模块文档](./modules/CodePlay.Core.md)
|
||||
|
||||
**主要功能**:
|
||||
- 代码解析(Parser)
|
||||
- 代码转换(Converter)
|
||||
- 代码生成(Generator)
|
||||
- 编译验证(Validator)
|
||||
|
||||
**命名空间**:
|
||||
- `CodePlay.Core.Common` - 公共类型和枚举
|
||||
- `CodePlay.Core.Models` - 数据模型
|
||||
- `CodePlay.Core.Interfaces` - 核心接口定义
|
||||
- `CodePlay.Core.Parsers` - 语言解析器
|
||||
- `CodePlay.Core.Converters` - 代码转换器
|
||||
- `CodePlay.Core.Generators` - 代码生成器
|
||||
- `CodePlay.Core.Services` - 服务层
|
||||
- `CodePlay.Core.Validators` - 验证器
|
||||
|
||||
### 2. CodePlay.Web - Web API 服务
|
||||
|
||||
[查看 Web 模块文档](./modules/CodePlay.Web.md)
|
||||
|
||||
**主要功能**:
|
||||
- REST API 端点
|
||||
- Swagger 文档
|
||||
- 依赖注入配置
|
||||
|
||||
**命名空间**:
|
||||
- `CodePlay.Web.Controllers` - API 控制器
|
||||
|
||||
### 3. CodePlay.CLI - 命令行工具
|
||||
|
||||
[查看 CLI 模块文档](./modules/CodePlay.CLI.md)
|
||||
|
||||
**主要功能**:
|
||||
- 命令行参数解析
|
||||
- 批量文件转换
|
||||
- 配置管理
|
||||
|
||||
**命名空间**:
|
||||
- `CodePlay.CLI.Commands` - 命令定义
|
||||
- `CodePlay.CLI.Services` - CLI 服务
|
||||
|
||||
### 4. CodePlay.Tests - 测试项目
|
||||
|
||||
[查看测试模块文档](./modules/CodePlay.Tests.md)
|
||||
|
||||
**主要功能**:
|
||||
- 单元测试(xUnit)
|
||||
- 集成测试
|
||||
- 测试用例库
|
||||
|
||||
**命名空间**:
|
||||
- `CodePlay.Tests.Parsers` - 解析器测试
|
||||
- `CodePlay.Tests.Converters` - 转换器测试
|
||||
|
||||
## 快速开始
|
||||
|
||||
### 构建项目
|
||||
|
||||
```bash
|
||||
dotnet build CodePlay.sln
|
||||
```
|
||||
|
||||
### 运行测试
|
||||
|
||||
```bash
|
||||
dotnet test CodePlay.Tests/CodePlay.Tests.csproj
|
||||
```
|
||||
|
||||
### 启动 Web API
|
||||
|
||||
```bash
|
||||
dotnet run --project CodePlay.Web/CodePlay.Web.csproj
|
||||
```
|
||||
|
||||
## 支持的转换
|
||||
|
||||
| 源语言 | 目标语言 | 状态 |
|
||||
|-------|---------|------|
|
||||
| C# | Java | ✅ 已实现 |
|
||||
| Java | C# | 🔄 计划中 |
|
||||
| C# | C++ | 🔄 计划中 |
|
||||
| C++ | C# | 🔄 计划中 |
|
||||
| Java | C++ | 🔄 计划中 |
|
||||
| C++ | Java | 🔄 计划中 |
|
||||
|
||||
## 项目状态
|
||||
|
||||
- **当前版本**: 0.1.0-alpha
|
||||
- **开发阶段**: MVP 开发中
|
||||
- **测试覆盖率**: 13 个测试用例,全部通过
|
||||
|
||||
## 相关链接
|
||||
|
||||
- [需求文档](../specs/codeplay-conversion-platform/requirements.md)
|
||||
- [设计文档](../specs/codeplay-conversion-platform/design.md)
|
||||
- [任务列表](../specs/codeplay-conversion-platform/tasklist.md)
|
||||
@@ -0,0 +1,631 @@
|
||||
# CodePlay 接口和类型定义
|
||||
|
||||
## 命名空间概览
|
||||
|
||||
### CodePlay.Core.Common
|
||||
|
||||
包含公共枚举类型。
|
||||
|
||||
### CodePlay.Core.Models
|
||||
|
||||
包含数据模型类。
|
||||
|
||||
### CodePlay.Core.Interfaces
|
||||
|
||||
包含核心接口定义。
|
||||
|
||||
## 枚举类型
|
||||
|
||||
### LanguageType
|
||||
|
||||
定义支持的编程语言。
|
||||
|
||||
```csharp
|
||||
public enum LanguageType
|
||||
{
|
||||
None = 0, // 未指定
|
||||
CSharp = 1, // C#
|
||||
Java = 2, // Java
|
||||
CPlusPlus = 3 // C++
|
||||
}
|
||||
```
|
||||
|
||||
### ConversionStatus
|
||||
|
||||
定义转换任务的状态。
|
||||
|
||||
```csharp
|
||||
public enum ConversionStatus
|
||||
{
|
||||
Pending = 0, // 等待中
|
||||
InProgress = 1, // 进行中
|
||||
Completed = 2, // 已完成
|
||||
PartiallyCompleted = 3, // 部分完成(需要人工检查)
|
||||
Failed = 4, // 失败
|
||||
Cancelled = 5 // 已取消
|
||||
}
|
||||
```
|
||||
|
||||
### ProjectStatus
|
||||
|
||||
定义项目的状态。
|
||||
|
||||
```csharp
|
||||
public enum ProjectStatus
|
||||
{
|
||||
InProgress = 0, // 进行中
|
||||
Completed = 1, // 已完成
|
||||
Verified = 2, // 已验证
|
||||
Archived = 3 // 已归档
|
||||
}
|
||||
```
|
||||
|
||||
### ValidationResult
|
||||
|
||||
定义验证结果的状态。
|
||||
|
||||
```csharp
|
||||
public enum ValidationResult
|
||||
{
|
||||
NotValidated = 0, // 未验证
|
||||
Passed = 1, // 验证通过
|
||||
Failed_NeedsManualReview = 2, // 验证失败 - 需要人工检查
|
||||
Failed_CompilationError = 3, // 验证失败 - 编译错误
|
||||
Failed_TestFailed = 4 // 验证失败 - 测试失败
|
||||
}
|
||||
```
|
||||
|
||||
### SyntaxNodeType
|
||||
|
||||
定义语法节点的类型。
|
||||
|
||||
```csharp
|
||||
public enum SyntaxNodeType
|
||||
{
|
||||
Unknown = 0,
|
||||
CompilationUnit = 1, // 编译单元
|
||||
Namespace = 2, // 命名空间
|
||||
Class = 3, // 类
|
||||
Interface = 4, // 接口
|
||||
Method = 5, // 方法
|
||||
Property = 6, // 属性
|
||||
Field = 7, // 字段
|
||||
Constructor = 8, // 构造函数
|
||||
Statement = 9, // 语句
|
||||
Expression = 10, // 表达式
|
||||
Type = 11, // 类型
|
||||
Parameter = 12, // 参数
|
||||
Comment = 13, // 注释
|
||||
DocumentationComment = 14 // 文档注释
|
||||
}
|
||||
```
|
||||
|
||||
### CommentType
|
||||
|
||||
定义注释的类型。
|
||||
|
||||
```csharp
|
||||
public enum CommentType
|
||||
{
|
||||
SingleLine = 0, // 单行注释 //
|
||||
MultiLine = 1, // 多行注释 /* */
|
||||
XmlDoc = 2, // XML 文档注释 ///
|
||||
JavaDoc = 3, // JavaDoc /** */
|
||||
Doxygen = 4 // Doxygen /// 或 /** */
|
||||
}
|
||||
```
|
||||
|
||||
### DocFormat
|
||||
|
||||
定义文档格式。
|
||||
|
||||
```csharp
|
||||
public enum DocFormat
|
||||
{
|
||||
XmlDoc = 0, // C# XML Doc
|
||||
JavaDoc = 1, // Java JavaDoc
|
||||
Doxygen = 2 // C++ Doxygen
|
||||
}
|
||||
```
|
||||
|
||||
### IssueType
|
||||
|
||||
定义转换问题的类型。
|
||||
|
||||
```csharp
|
||||
public enum IssueType
|
||||
{
|
||||
UnconvertibleSyntax = 0, // 不可转换语法
|
||||
TypeMappingWarning = 1, // 类型映射警告
|
||||
ApiDifference = 2, // API 差异
|
||||
SemanticDifference = 3, // 语义差异
|
||||
PerformanceConsideration = 4 // 性能考虑
|
||||
}
|
||||
```
|
||||
|
||||
### LogLevel
|
||||
|
||||
定义日志级别。
|
||||
|
||||
```csharp
|
||||
public enum LogLevel
|
||||
{
|
||||
Info = 0,
|
||||
Warning = 1,
|
||||
Error = 2,
|
||||
Debug = 3
|
||||
}
|
||||
```
|
||||
|
||||
## 核心模型类
|
||||
|
||||
### ConversionRequest
|
||||
|
||||
转换请求模型。
|
||||
|
||||
```csharp
|
||||
public class ConversionRequest
|
||||
{
|
||||
public string SourceCode { get; set; }
|
||||
public LanguageType SourceLanguage { get; set; }
|
||||
public LanguageType TargetLanguage { get; set; }
|
||||
public string? ProjectId { get; set; }
|
||||
public int ValidationRounds { get; set; } = 2;
|
||||
public ConversionOptions? Options { get; set; }
|
||||
}
|
||||
```
|
||||
|
||||
### ConversionOptions
|
||||
|
||||
转换配置选项。
|
||||
|
||||
```csharp
|
||||
public class ConversionOptions
|
||||
{
|
||||
public bool KeepComments { get; set; } = true;
|
||||
public bool KeepDocStrings { get; set; } = true;
|
||||
public bool KeepFormatting { get; set; } = true;
|
||||
public int IndentSize { get; set; } = 4;
|
||||
public bool UseTabs { get; set; } = false;
|
||||
public bool EnableAutoFix { get; set; } = true;
|
||||
}
|
||||
```
|
||||
|
||||
### ConversionResult
|
||||
|
||||
转换结果模型。
|
||||
|
||||
```csharp
|
||||
public class ConversionResult
|
||||
{
|
||||
public bool Success { get; set; }
|
||||
public string TransformedCode { get; set; }
|
||||
public ConversionReport? Report { get; set; }
|
||||
public List<ConversionWarning> Warnings { get; set; }
|
||||
public ValidationSummary? ValidationSummary { get; set; }
|
||||
public string? ErrorMessage { get; set; }
|
||||
}
|
||||
```
|
||||
|
||||
### ConversionReport
|
||||
|
||||
转换报告。
|
||||
|
||||
```csharp
|
||||
public class ConversionReport
|
||||
{
|
||||
public int LinesConverted { get; set; }
|
||||
public int ClassesConverted { get; set; }
|
||||
public int MethodsConverted { get; set; }
|
||||
public TimeSpan Duration { get; set; }
|
||||
public List<ConversionIssue> Issues { get; set; }
|
||||
public List<TransformationLog> TransformationLog { get; set; }
|
||||
public List<TodoItem> TodoItems { get; set; }
|
||||
}
|
||||
```
|
||||
|
||||
### ConversionWarning
|
||||
|
||||
转换警告。
|
||||
|
||||
```csharp
|
||||
public class ConversionWarning
|
||||
{
|
||||
public string Code { get; set; }
|
||||
public string Message { get; set; }
|
||||
public int LineNumber { get; set; }
|
||||
public int ColumnNumber { get; set; }
|
||||
public string? Suggestion { get; set; }
|
||||
}
|
||||
```
|
||||
|
||||
### ValidationSummary
|
||||
|
||||
验证摘要。
|
||||
|
||||
```csharp
|
||||
public class ValidationSummary
|
||||
{
|
||||
public bool Passed { get; set; }
|
||||
public int RoundsExecuted { get; set; }
|
||||
public bool NeedsManualReview { get; set; }
|
||||
public List<CompilationError> CompilationErrors { get; set; }
|
||||
public List<string> ValidationLog { get; set; }
|
||||
}
|
||||
```
|
||||
|
||||
### ConversionIssue
|
||||
|
||||
转换问题。
|
||||
|
||||
```csharp
|
||||
public class ConversionIssue
|
||||
{
|
||||
public IssueType Type { get; set; }
|
||||
public string Description { get; set; }
|
||||
public int LineNumber { get; set; }
|
||||
public string? OriginalCode { get; set; }
|
||||
public string? Suggestion { get; set; }
|
||||
}
|
||||
```
|
||||
|
||||
### TransformationLog
|
||||
|
||||
转换日志。
|
||||
|
||||
```csharp
|
||||
public class TransformationLog
|
||||
{
|
||||
public DateTime Timestamp { get; set; }
|
||||
public string Operation { get; set; }
|
||||
public string Details { get; set; }
|
||||
public LogLevel Level { get; set; }
|
||||
}
|
||||
```
|
||||
|
||||
### TodoItem
|
||||
|
||||
TODO 项(用于不可转换的语法)。
|
||||
|
||||
```csharp
|
||||
public class TodoItem
|
||||
{
|
||||
public string Description { get; set; }
|
||||
public int LineNumber { get; set; }
|
||||
public string OriginalSyntax { get; set; }
|
||||
public string WhyNotDirect { get; set; }
|
||||
public string RecommendedAlternative { get; set; }
|
||||
public string? ReferenceLocation { get; set; }
|
||||
}
|
||||
```
|
||||
|
||||
### CompilationError
|
||||
|
||||
编译错误。
|
||||
|
||||
```csharp
|
||||
public class CompilationError
|
||||
{
|
||||
public string ErrorId { get; set; }
|
||||
public string Message { get; set; }
|
||||
public int LineNumber { get; set; }
|
||||
public int ColumnNumber { get; set; }
|
||||
public bool IsError { get; set; } = true;
|
||||
}
|
||||
```
|
||||
|
||||
### Project
|
||||
|
||||
项目模型。
|
||||
|
||||
```csharp
|
||||
public class Project
|
||||
{
|
||||
public string Id { get; set; } = Guid.NewGuid().ToString("N");
|
||||
public string Name { get; set; }
|
||||
public LanguageType SourceLanguage { get; set; }
|
||||
public LanguageType TargetLanguage { get; set; }
|
||||
public ProjectStatus Status { get; set; }
|
||||
public DateTime CreatedAt { get; set; }
|
||||
public DateTime UpdatedAt { get; set; }
|
||||
public List<ConversionTask> Tasks { get; set; }
|
||||
public ProjectConfiguration? Configuration { get; set; }
|
||||
}
|
||||
```
|
||||
|
||||
### ConversionTask
|
||||
|
||||
转换任务。
|
||||
|
||||
```csharp
|
||||
public class ConversionTask
|
||||
{
|
||||
public string Id { get; set; } = Guid.NewGuid().ToString("N");
|
||||
public string SourceFilePath { get; set; }
|
||||
public string TargetFilePath { get; set; }
|
||||
public string? SourceCode { get; set; }
|
||||
public string? TransformedCode { get; set; }
|
||||
public ConversionStatus Status { get; set; }
|
||||
public DateTime CreatedAt { get; set; }
|
||||
public DateTime? CompletedAt { get; set; }
|
||||
public ConversionResult? Result { get; set; }
|
||||
}
|
||||
```
|
||||
|
||||
### ProjectConfiguration
|
||||
|
||||
项目配置。
|
||||
|
||||
```csharp
|
||||
public class ProjectConfiguration
|
||||
{
|
||||
public int ValidationRounds { get; set; } = 2;
|
||||
public bool EnableAutoFix { get; set; } = true;
|
||||
public bool KeepComments { get; set; } = true;
|
||||
public bool KeepDocStrings { get; set; } = true;
|
||||
public int IndentSize { get; set; } = 4;
|
||||
public string? OutputDirectory { get; set; }
|
||||
}
|
||||
```
|
||||
|
||||
## 语法树模型
|
||||
|
||||
### SyntaxTree
|
||||
|
||||
语法树模型。
|
||||
|
||||
```csharp
|
||||
public class SyntaxTree
|
||||
{
|
||||
public LanguageType Language { get; set; }
|
||||
public SyntaxNode Root { get; set; }
|
||||
public string? SourceFilePath { get; set; }
|
||||
public string? SourceCode { get; set; }
|
||||
public List<SyntaxComment> Comments { get; set; }
|
||||
public List<SyntaxDocumentation> Documentation { get; set; }
|
||||
}
|
||||
```
|
||||
|
||||
### SyntaxNode
|
||||
|
||||
语法节点。
|
||||
|
||||
```csharp
|
||||
public class SyntaxNode
|
||||
{
|
||||
public SyntaxNodeType Type { get; set; }
|
||||
public string Text { get; set; }
|
||||
public List<SyntaxNode> Children { get; set; }
|
||||
public Dictionary<string, object?> Metadata { get; set; }
|
||||
public SyntaxNode? Parent { get; set; }
|
||||
public bool IsUnconvertible { get; set; }
|
||||
public string? TodoDescription { get; set; }
|
||||
}
|
||||
```
|
||||
|
||||
### SyntaxComment
|
||||
|
||||
语法注释。
|
||||
|
||||
```csharp
|
||||
public class SyntaxComment
|
||||
{
|
||||
public CommentType Type { get; set; }
|
||||
public string Text { get; set; }
|
||||
public int LineNumber { get; set; }
|
||||
}
|
||||
```
|
||||
|
||||
### SyntaxDocumentation
|
||||
|
||||
语法文档。
|
||||
|
||||
```csharp
|
||||
public class SyntaxDocumentation
|
||||
{
|
||||
public string ElementName { get; set; }
|
||||
public string Content { get; set; }
|
||||
public DocFormat Format { get; set; }
|
||||
}
|
||||
```
|
||||
|
||||
## 核心接口
|
||||
|
||||
### IParser
|
||||
|
||||
语言解析器接口。
|
||||
|
||||
```csharp
|
||||
public interface IParser
|
||||
{
|
||||
Task<SyntaxTree> ParseAsync(string sourceCode, CancellationToken cancellationToken = default);
|
||||
}
|
||||
```
|
||||
|
||||
**实现**:
|
||||
- `BaseParser` - 抽象基类
|
||||
- `CSharpParser` - C# 解析器
|
||||
|
||||
### IConverter
|
||||
|
||||
代码转换器接口。
|
||||
|
||||
```csharp
|
||||
public interface IConverter
|
||||
{
|
||||
Task<ConversionResult> ConvertAsync(
|
||||
SyntaxTree syntaxTree,
|
||||
LanguageType targetLanguage,
|
||||
ConversionOptions? options = null,
|
||||
CancellationToken cancellationToken = default);
|
||||
}
|
||||
```
|
||||
|
||||
**实现**:
|
||||
- `CSharpToJavaConverter` - C# → Java 转换器
|
||||
|
||||
### ICodeGenerator
|
||||
|
||||
代码生成器接口。
|
||||
|
||||
```csharp
|
||||
public interface ICodeGenerator
|
||||
{
|
||||
string Generate(SyntaxTree syntaxTree);
|
||||
}
|
||||
```
|
||||
|
||||
**实现**:
|
||||
- `JavaCodeGenerator` - Java 代码生成器
|
||||
|
||||
### IConversionStrategy
|
||||
|
||||
转换策略接口。
|
||||
|
||||
```csharp
|
||||
public interface IConversionStrategy
|
||||
{
|
||||
LanguageType SourceLanguage { get; }
|
||||
LanguageType TargetLanguage { get; }
|
||||
SyntaxNode ConvertNode(SyntaxNode node, ConversionContext context);
|
||||
string MapType(string sourceType);
|
||||
}
|
||||
```
|
||||
|
||||
**实现**:
|
||||
- `CSharpToJavaStrategy` - C# → Java 转换策略
|
||||
|
||||
### ICompilerValidator
|
||||
|
||||
编译验证器接口。
|
||||
|
||||
```csharp
|
||||
public interface ICompilerValidator
|
||||
{
|
||||
Task<ValidationResult> ValidateAsync(string code, LanguageType language, CancellationToken cancellationToken = default);
|
||||
}
|
||||
```
|
||||
|
||||
### IAutoFixEngine
|
||||
|
||||
自动修复引擎接口。
|
||||
|
||||
```csharp
|
||||
public interface IAutoFixEngine
|
||||
{
|
||||
Task<FixResult> FixAsync(string code, List<CompilationError> errors, int round, CancellationToken cancellationToken = default);
|
||||
}
|
||||
```
|
||||
|
||||
## 辅助类
|
||||
|
||||
### TypeMapping
|
||||
|
||||
类型映射。
|
||||
|
||||
```csharp
|
||||
public class TypeMapping
|
||||
{
|
||||
public string SourceType { get; set; }
|
||||
public string TargetType { get; set; }
|
||||
}
|
||||
```
|
||||
|
||||
### ConversionContext
|
||||
|
||||
转换上下文。
|
||||
|
||||
```csharp
|
||||
public class ConversionContext
|
||||
{
|
||||
public LanguageType SourceLanguage { get; set; }
|
||||
public LanguageType TargetLanguage { get; set; }
|
||||
public ConversionOptions? Options { get; set; }
|
||||
public List<ConversionIssue> Issues { get; set; }
|
||||
public List<TodoItem> TodoItems { get; set; }
|
||||
public List<TransformationLog> Logs { get; set; }
|
||||
}
|
||||
```
|
||||
|
||||
### FixResult
|
||||
|
||||
修复结果。
|
||||
|
||||
```csharp
|
||||
public class FixResult
|
||||
{
|
||||
public bool CanFix { get; set; }
|
||||
public string? FixedCode { get; set; }
|
||||
public string? FixDescription { get; set; }
|
||||
public List<CompilationError> RemainingErrors { get; set; }
|
||||
}
|
||||
```
|
||||
|
||||
### CompilationResult
|
||||
|
||||
编译结果。
|
||||
|
||||
```csharp
|
||||
public class CompilationResult
|
||||
{
|
||||
public bool Success { get; set; }
|
||||
public string Output { get; set; }
|
||||
public List<CompilationError> Errors { get; set; }
|
||||
public List<CompilationError> Warnings { get; set; }
|
||||
}
|
||||
```
|
||||
|
||||
## API DTO 类
|
||||
|
||||
### LanguagePairDto
|
||||
|
||||
语言对数据传输对象。
|
||||
|
||||
```csharp
|
||||
public class LanguagePairDto
|
||||
{
|
||||
public string SourceLanguage { get; set; }
|
||||
public string TargetLanguage { get; set; }
|
||||
public bool Supported { get; set; }
|
||||
}
|
||||
```
|
||||
|
||||
## 使用示例
|
||||
|
||||
### 创建转换请求
|
||||
|
||||
```csharp
|
||||
var request = new ConversionRequest
|
||||
{
|
||||
SourceCode = "public class Test { }",
|
||||
SourceLanguage = LanguageType.CSharp,
|
||||
TargetLanguage = LanguageType.Java,
|
||||
ValidationRounds = 2,
|
||||
Options = new ConversionOptions
|
||||
{
|
||||
KeepComments = true,
|
||||
KeepDocStrings = true
|
||||
}
|
||||
};
|
||||
```
|
||||
|
||||
### 使用转换服务
|
||||
|
||||
```csharp
|
||||
var service = new ConversionService();
|
||||
var result = await service.ConvertAsync(request);
|
||||
|
||||
if (result.Success)
|
||||
{
|
||||
Console.WriteLine(result.TransformedCode);
|
||||
}
|
||||
```
|
||||
|
||||
### 检查转换支持
|
||||
|
||||
```csharp
|
||||
if (service.IsConversionSupported(LanguageType.CSharp, LanguageType.Java))
|
||||
{
|
||||
Console.WriteLine("C# to Java conversion is supported");
|
||||
}
|
||||
```
|
||||
Reference in New Issue
Block a user