using CodePlay.Core.Interfaces; using CodePlay.Core.Models; using CodePlay.Core.Common; namespace CodePlay.Core.Validators; /// /// 验证流水线服务 /// public class ValidationPipeline { private readonly CSharpCompilerValidator _validator; private readonly AutoFixEngine _fixEngine; public ValidationPipeline() { _validator = new CSharpCompilerValidator(); _fixEngine = new AutoFixEngine(); } /// /// 执行验证流水线 /// public async Task ValidateAsync( string code, LanguageType language, int maxRounds = 3, CancellationToken cancellationToken = default) { var summary = new ValidationSummary { Passed = false, RoundsExecuted = 0, NeedsManualReview = false, CompilationErrors = new List(), ValidationLog = new List() }; summary.ValidationLog.Add($"Starting validation at {DateTime.UtcNow:HH:mm:ss.fff}"); for (int round = 1; round <= maxRounds; round++) { summary.RoundsExecuted = round; summary.ValidationLog.Add($"Round {round} starting"); // 编译验证 var compileResult = await _validator.ValidateAsync(code, language, cancellationToken); if (compileResult.Success) { summary.Passed = true; summary.ValidationLog.Add($"Round {round}: Compilation succeeded"); break; } summary.CompilationErrors = compileResult.Errors; summary.ValidationLog.Add($"Round {round}: Compilation failed with {compileResult.Errors.Count} errors"); // 尝试自动修复 var fixResult = await _fixEngine.FixAsync(code, compileResult.Errors, round, cancellationToken); if (fixResult.CanFix) { code = fixResult.FixedCode!; summary.ValidationLog.Add($"Round {round}: Auto-fix applied - {fixResult.FixDescription}"); } else { summary.NeedsManualReview = true; summary.ValidationLog.Add($"Round {round}: Cannot auto-fix, needs manual review"); break; } } if (!summary.Passed) { summary.ValidationLog.Add($"Validation completed - Needs manual review"); } return summary; } }