feat: 完成 CodePlay 项目初始化和核心解析器实现

- 创建 CodePlay 解决方案和 4 个项目 (Core, Web, CLI, Tests)
- 实现核心数据模型 (ConversionRequest, ConversionResult, Project 等)
- 实现核心接口 (IParser, IConverter, ICodeGenerator 等)
- 实现基础抽象类 BaseParser
- 实现 CSharpParser 解析器 (基于 Roslyn)
- 添加 Microsoft.CodeAnalysis.CSharp NuGet 包
- 所有代码编译通过
Co-authored-by: monkeycode-ai <monkeycode-ai@chaitin.com>
This commit is contained in:
monkeycode-ai
2026-06-03 02:57:13 +00:00
parent d260763e7a
commit a0971cf974
21 changed files with 1553 additions and 16 deletions
+395
View File
@@ -0,0 +1,395 @@
using CodePlay.Core.Common;
namespace CodePlay.Core.Models;
/// <summary>
/// 转换请求模型
/// </summary>
public class ConversionRequest
{
/// <summary>
/// 源代码
/// </summary>
public string SourceCode { get; set; } = string.Empty;
/// <summary>
/// 源语言
/// </summary>
public LanguageType SourceLanguage { get; set; }
/// <summary>
/// 目标语言
/// </summary>
public LanguageType TargetLanguage { get; set; }
/// <summary>
/// 项目 ID(可选)
/// </summary>
public string? ProjectId { get; set; }
/// <summary>
/// 验证轮次(1-3
/// </summary>
public int ValidationRounds { get; set; } = 2;
/// <summary>
/// 转换选项
/// </summary>
public ConversionOptions? Options { get; set; }
}
/// <summary>
/// 转换选项
/// </summary>
public class ConversionOptions
{
/// <summary>
/// 保留注释
/// </summary>
public bool KeepComments { get; set; } = true;
/// <summary>
/// 保留文档字符串
/// </summary>
public bool KeepDocStrings { get; set; } = true;
/// <summary>
/// 保留代码格式
/// </summary>
public bool KeepFormatting { get; set; } = true;
/// <summary>
/// 缩进大小
/// </summary>
public int IndentSize { get; set; } = 4;
/// <summary>
/// 使用制表符缩进
/// </summary>
public bool UseTabs { get; set; } = false;
/// <summary>
/// 自动修复启用
/// </summary>
public bool EnableAutoFix { get; set; } = true;
}
/// <summary>
/// 转换结果模型
/// </summary>
public class ConversionResult
{
/// <summary>
/// 是否成功
/// </summary>
public bool Success { get; set; }
/// <summary>
/// 转换后的代码
/// </summary>
public string TransformedCode { get; set; } = string.Empty;
/// <summary>
/// 转换报告
/// </summary>
public ConversionReport? Report { get; set; }
/// <summary>
/// 警告列表
/// </summary>
public List<ConversionWarning> Warnings { get; set; } = new();
/// <summary>
/// 验证摘要
/// </summary>
public ValidationSummary? ValidationSummary { get; set; }
/// <summary>
/// 错误信息
/// </summary>
public string? ErrorMessage { get; set; }
}
/// <summary>
/// 转换报告
/// </summary>
public class ConversionReport
{
/// <summary>
/// 转换的行数
/// </summary>
public int LinesConverted { get; set; }
/// <summary>
/// 转换的类数量
/// </summary>
public int ClassesConverted { get; set; }
/// <summary>
/// 转换的方法数量
/// </summary>
public int MethodsConverted { get; set; }
/// <summary>
/// 转换耗时
/// </summary>
public TimeSpan Duration { get; set; }
/// <summary>
/// 问题列表
/// </summary>
public List<ConversionIssue> Issues { get; set; } = new();
/// <summary>
/// 转换日志
/// </summary>
public List<TransformationLog> TransformationLog { get; set; } = new();
/// <summary>
/// TODO 列表
/// </summary>
public List<TodoItem> TodoItems { get; set; } = new();
}
/// <summary>
/// 转换警告
/// </summary>
public class ConversionWarning
{
/// <summary>
/// 警告代码
/// </summary>
public string Code { get; set; } = string.Empty;
/// <summary>
/// 警告消息
/// </summary>
public string Message { get; set; } = string.Empty;
/// <summary>
/// 行号
/// </summary>
public int LineNumber { get; set; }
/// <summary>
/// 列号
/// </summary>
public int ColumnNumber { get; set; }
/// <summary>
/// 建议
/// </summary>
public string? Suggestion { get; set; }
}
/// <summary>
/// 验证摘要
/// </summary>
public class ValidationSummary
{
/// <summary>
/// 是否通过验证
/// </summary>
public bool Passed { get; set; }
/// <summary>
/// 验证轮次
/// </summary>
public int RoundsExecuted { get; set; }
/// <summary>
/// 是否需要人工审查
/// </summary>
public bool NeedsManualReview { get; set; }
/// <summary>
/// 编译错误列表
/// </summary>
public List<CompilationError> CompilationErrors { get; set; } = new();
/// <summary>
/// 验证日志
/// </summary>
public List<string> ValidationLog { get; set; } = new();
}
/// <summary>
/// 转换问题
/// </summary>
public class ConversionIssue
{
/// <summary>
/// 问题类型
/// </summary>
public IssueType Type { get; set; }
/// <summary>
/// 问题描述
/// </summary>
public string Description { get; set; } = string.Empty;
/// <summary>
/// 位置(行号)
/// </summary>
public int LineNumber { get; set; }
/// <summary>
/// 原始代码片段
/// </summary>
public string? OriginalCode { get; set; }
/// <summary>
/// 建议操作
/// </summary>
public string? Suggestion { get; set; }
}
/// <summary>
/// 问题类型
/// </summary>
public enum IssueType
{
/// <summary>
/// 不可转换语法
/// </summary>
UnconvertibleSyntax = 0,
/// <summary>
/// 类型映射警告
/// </summary>
TypeMappingWarning = 1,
/// <summary>
/// API 差异
/// </summary>
ApiDifference = 2,
/// <summary>
/// 语义差异
/// </summary>
SemanticDifference = 3,
/// <summary>
/// 性能考虑
/// </summary>
PerformanceConsideration = 4
}
/// <summary>
/// 转换日志
/// </summary>
public class TransformationLog
{
/// <summary>
/// 时间戳
/// </summary>
public DateTime Timestamp { get; set; }
/// <summary>
/// 操作类型
/// </summary>
public string Operation { get; set; } = string.Empty;
/// <summary>
/// 详情
/// </summary>
public string Details { get; set; } = string.Empty;
/// <summary>
/// 日志级别
/// </summary>
public LogLevel Level { get; set; }
}
/// <summary>
/// 日志级别
/// </summary>
public enum LogLevel
{
/// <summary>
/// 信息
/// </summary>
Info = 0,
/// <summary>
/// 警告
/// </summary>
Warning = 1,
/// <summary>
/// 错误
/// </summary>
Error = 2,
/// <summary>
/// 调试
/// </summary>
Debug = 3
}
/// <summary>
/// TODO 项
/// </summary>
public class TodoItem
{
/// <summary>
/// TODO 描述
/// </summary>
public string Description { get; set; } = string.Empty;
/// <summary>
/// 位置(行号)
/// </summary>
public int LineNumber { get; set; }
/// <summary>
/// 原始语法说明
/// </summary>
public string OriginalSyntax { get; set; } = string.Empty;
/// <summary>
/// 为什么无法直接转换
/// </summary>
public string WhyNotDirect { get; set; } = string.Empty;
/// <summary>
/// 推荐的替代方案
/// </summary>
public string RecommendedAlternative { get; set; } = string.Empty;
/// <summary>
/// 参考代码位置
/// </summary>
public string? ReferenceLocation { get; set; }
}
/// <summary>
/// 编译错误
/// </summary>
public class CompilationError
{
/// <summary>
/// 错误 ID
/// </summary>
public string ErrorId { get; set; } = string.Empty;
/// <summary>
/// 错误消息
/// </summary>
public string Message { get; set; } = string.Empty;
/// <summary>
/// 行号
/// </summary>
public int LineNumber { get; set; }
/// <summary>
/// 列号
/// </summary>
public int ColumnNumber { get; set; }
/// <summary>
/// 错误级别(错误或警告)
/// </summary>
public bool IsError { get; set; } = true;
}