symflower-fix.go
1 package task 2 3 import ( 4 "context" 5 "time" 6 7 pkgerrors "github.com/pkg/errors" 8 "github.com/symflower/eval-dev-quality/language" 9 "github.com/symflower/eval-dev-quality/log" 10 evaltask "github.com/symflower/eval-dev-quality/task" 11 "github.com/symflower/eval-dev-quality/tools" 12 "github.com/symflower/eval-dev-quality/util" 13 ) 14 15 // symflowerFix runs the "symflower fix" command and returns its execution time in milliseconds. 16 func symflowerFix(logger *log.Logger, repositoryPath string, language language.Language) (duration uint64, err error) { 17 start := time.Now() 18 _, err = util.CommandWithResult(context.Background(), logger, &util.Command{ 19 Command: []string{ 20 tools.SymflowerPath, "fix", 21 "--language", language.ID(), 22 "--workspace", repositoryPath, 23 }, 24 25 Directory: repositoryPath, 26 }) 27 if err != nil { 28 return 0, pkgerrors.WithStack(err) 29 } 30 31 return uint64(time.Since(start).Milliseconds()), nil 32 } 33 34 // ExecuteWithSymflowerFix runs the "symflower fix" command and calculates the new assessments. 35 func ExecuteWithSymflowerFix(ctx evaltask.Context, logger *log.Logger, packagePath string) (testResult *language.TestResult, processingTime uint64, problems []error, err error) { 36 // Run "symflower fix" if the model response fails to execute. 37 logger.Print("model response alone failed execution, attempting to fix with \"symflower fix \"") 38 39 duration, err := symflowerFix(logger, packagePath, ctx.Language) 40 if err != nil { 41 return nil, 0, nil, pkgerrors.WithStack(err) 42 } 43 44 testResult, ps, err := ctx.Language.ExecuteTests(logger, packagePath) 45 problems = append(problems, ps...) 46 if err != nil { 47 return testResult, duration, problems, pkgerrors.WithMessage(err, "symflower fix") 48 } 49 50 return testResult, duration, problems, nil 51 }