4c94bdf666
Task 3.2 - Java 编译验证: - JavaCompilerValidator: 使用 javac 进行编译验证 - 支持临时文件编译和清理 - 集成到 ICompilerValidator 接口 - 单元测试 (需要 javac 环境) Task 4.4 - 前端代码编辑器: - CodeEditor.vue: Monaco Editor 集成 - 支持 C#/Java/C++ 语法高亮 - 智能代码补全 (main 方法,System.out.println 等) - 支持主题切换 (vs-dark/vs/hc-black) - 支持只读模式、最小化地图、自动布局 - 暴露 API: setValue, getValue, focus, layout 测试状态: - 总测试数: 42 - 通过: 41 ✅ - 跳过: 1 (Java 编译器测试需要 javac 环境) 前端依赖: - 需安装 monaco-editor: npm install monaco-editor Co-authored-by: monkeycode-ai <monkeycode-ai@chaitin.com>
207 lines
4.9 KiB
Markdown
207 lines
4.9 KiB
Markdown
# 批量转换功能使用指南
|
|
|
|
## 概述
|
|
|
|
CodePlay 现在支持批量文件和目录转换,可以一次性转换整个项目或目录下的所有源代码文件。
|
|
|
|
## 核心功能
|
|
|
|
### 1. 目录转换
|
|
自动递归转换指定目录下的所有符合条件的源文件。
|
|
|
|
### 2. 保持目录结构
|
|
转换后的文件保持原始目录结构,方便项目整体迁移。
|
|
|
|
### 3. 详细报告
|
|
提供批量转换统计信息,包括成功/失败文件列表和详细错误信息。
|
|
|
|
## CLI 命令参考
|
|
|
|
### 基本语法
|
|
```bash
|
|
dotnet run --project CodePlay.CLI -- convert \
|
|
-s <源语言> -t <目标语言> \
|
|
-i <输入目录> \
|
|
-o <输出目录> \
|
|
-b [选项]
|
|
```
|
|
|
|
### 常用参数
|
|
|
|
| 参数 | 简写 | 说明 | 默认值 |
|
|
|------|------|------|--------|
|
|
| `--source-language` | `-s` | 源语言 (CSharp, Java) | 必填 |
|
|
| `--target-language` | `-t` | 目标语言 (CSharp, Java) | 必填 |
|
|
| `--input` | `-i` | 输入目录路径 | 必填 |
|
|
| `--output` | `-o` | 输出目录路径 | 自动生成 |
|
|
| `--batch` | `-b` | 启用批量模式 | false |
|
|
| `--recursive` | `-r` | 递归子目录 | true |
|
|
| `--verbose` | | 显示详细信息 | false |
|
|
| `--validation-rounds` | `-v` | 验证轮次 (1-3) | 2 |
|
|
|
|
## 使用示例
|
|
|
|
### 示例 1: 转换 C# 项目到 Java
|
|
```bash
|
|
# 转换整个 C# 项目目录
|
|
dotnet run --project CodePlay.CLI -- \
|
|
convert -s CSharp -t Java \
|
|
-i ./MyCSharpProject \
|
|
-o ./MyJavaProject \
|
|
-b
|
|
```
|
|
|
|
### 示例 2: 带详细输出的转换
|
|
```bash
|
|
# 显示每个文件的转换详情
|
|
dotnet run --project CodePlay.CLI -- \
|
|
convert -s CSharp -t Java \
|
|
-i ./src \
|
|
-b --verbose
|
|
```
|
|
|
|
### 示例 3: 不递归子目录
|
|
```bash
|
|
# 仅转换当前目录,不处理子目录
|
|
dotnet run --project CodePlay.CLI -- \
|
|
convert -s CSharp -t Java \
|
|
-i ./src \
|
|
-b -r false
|
|
```
|
|
|
|
### 示例 4: 指定输出目录
|
|
```bash
|
|
# 转换到指定输出目录
|
|
dotnet run --project CodePlay.CLI -- \
|
|
convert -s Java -t CSharp \
|
|
-i ./java-src \
|
|
-o ./csharp-output \
|
|
-b
|
|
```
|
|
|
|
### 示例 5: 单文件转换(向后兼容)
|
|
```bash
|
|
# 批量模式和单文件模式自动检测
|
|
dotnet run --project CodePlay.CLI -- \
|
|
convert -s CSharp -t Java \
|
|
-i ./Program.cs \
|
|
-o ./Program.java
|
|
```
|
|
|
|
## 输出示例
|
|
|
|
成功转换时:
|
|
```
|
|
📁 批量转换模式启动
|
|
源目录:./MyCSharpProject
|
|
目标目录:./MyJavaProject
|
|
递归:True
|
|
|
|
==== 批量转换完成 ====
|
|
源目录:./MyCSharpProject
|
|
目标目录:./MyJavaProject
|
|
总文件数:15
|
|
成功:15
|
|
失败:0
|
|
耗时:3.45 秒
|
|
|
|
成功转换的文件:
|
|
✅ UserService.cs → UserService.java
|
|
行数:120, 类:1, 方法:8
|
|
✅ OrderController.cs → OrderController.java
|
|
行数:85, 类:1, 方法:5
|
|
...
|
|
|
|
🎉 所有文件转换成功!
|
|
```
|
|
|
|
部分失败时:
|
|
```
|
|
==== 批量转换完成 ====
|
|
总文件数:15
|
|
成功:13
|
|
失败:2
|
|
耗时:3.45 秒
|
|
|
|
转换失败的文件:
|
|
❌ LegacyCode.cs
|
|
错误:Unsupported syntax pattern detected
|
|
❌ OldStyle.cs
|
|
错误:Compilation validation failed after 3 rounds
|
|
|
|
⚠️ 2 个文件转换失败
|
|
```
|
|
|
|
## 批量转换结果详情
|
|
|
|
### BatchConversionResult
|
|
- `Success`: 是否全部成功
|
|
- `TotalFiles`: 总文件数
|
|
- `SuccessfulFiles`: 成功文件数
|
|
- `FailedFiles`: 失败文件数
|
|
- `Duration`: 转换耗时
|
|
- `ConvertedFiles`: 成功文件详情列表
|
|
- `FailedFileList`: 失败文件详情列表
|
|
|
|
### ConvertedFileInfo
|
|
- `SourceFile`: 源文件路径
|
|
- `TargetFile`: 目标文件路径
|
|
- `LinesConverted`: 转换行数
|
|
- `ClassesConverted`: 转换类数
|
|
- `MethodsConverted`: 转换方法数
|
|
- `Warnings`: 警告数量
|
|
- `Issues`: 问题数量
|
|
|
|
## 报告存储
|
|
|
|
批量转换会自动创建报告并存储:
|
|
- `ProjectId`: 格式为 `batch-YYYYMMDD`
|
|
- 可通过 `list` 命令查看历史转换记录
|
|
- 可通过 `report` API 查询详细报告
|
|
|
|
## 最佳实践
|
|
|
|
1. **先小批量测试**:先用少量文件测试转换效果
|
|
2. **使用详细模式**:首次转换使用 `--verbose` 查看细节
|
|
3. **检查失败文件**:转换后查看失败文件列表
|
|
4. **保留原始代码**:输出目录不要覆盖原始目录
|
|
|
|
## API 集成
|
|
|
|
也可以通过 Web API 调用批量转换:
|
|
|
|
```csharp
|
|
var batchService = new BatchConversionService(
|
|
new ConversionService(),
|
|
new ReportStorageService()
|
|
);
|
|
|
|
var result = await batchService.ConvertDirectoryAsync(
|
|
"./src", "./output",
|
|
LanguageType.CSharp, LanguageType.Java
|
|
);
|
|
```
|
|
|
|
## 故障排查
|
|
|
|
**Q: 找不到某些文件?**
|
|
A: 确保文件扩展名正确(.cs, .java 等),默认只转换对应语言的文件。
|
|
|
|
**Q: 转换失败如何修复?**
|
|
A: 使用 `--verbose` 查看详细错误,手动修复后重新转换单个文件。
|
|
|
|
**Q: 如何跳过某些目录?**
|
|
A: 当前版本不支持目录过滤,可将需要转换的文件复制到其他目录。
|
|
|
|
## 后续计划
|
|
|
|
- [ ] 支持文件白名单/黑名单
|
|
- [ ] 支持并行转换加速
|
|
- [ ] 支持断点续传
|
|
- [ ] 支持自定义转换规则配置
|
|
|
|
---
|
|
|
|
**更新日期**: 2025-06-03
|
|
**测试状态**: 40 个测试全部通过 ✅
|