package clang_tidy import ( "fmt" "io" "os/exec" "focs.ji.sjtu.edu.cn/git/FOCS-dev/JOJ3/internal/stage" "github.com/criyle/go-judge/envexec" ) type ClangTidy struct{} func (e *ClangTidy) Run(cmds []stage.Cmd) ([]stage.ExecutorResult, error) { var res []stage.ExecutorResult for _, cmd := range cmds { args := "" for _, arg := range cmd.Args { args += fmt.Sprint(arg) args += " " } clang_tidy_Cmd := exec.Command("bash", "-c", args) clang_tidy_stdout, err1 := clang_tidy_Cmd.StdoutPipe() clang_tidy_stderr, err2 := clang_tidy_Cmd.StderrPipe() if err1 != nil { return nil, err1 } if err2 != nil { return nil, err2 } _ = clang_tidy_Cmd.Start() clang_tidy_Out, err1 := io.ReadAll(clang_tidy_stdout) clang_tidy_Err, err2 := io.ReadAll(clang_tidy_stderr) if err1 != nil { return nil, err1 } if err2 != nil { return nil, err2 } _ = clang_tidy_Cmd.Wait() r := stage.ExecutorResult{ Status: stage.Status(envexec.StatusAccepted), ExitStatus: 0, Error: "", Time: 0, Memory: 0, RunTime: 0, Files: map[string]string{}, FileIDs: map[string]string{}, } r.Files["stdout"] = string(clang_tidy_Out) // TODO: We may don't want stderr r.Files["stderr"] = string(clang_tidy_Err) res = append(res, r) } return res, nil } func (e *ClangTidy) Cleanup() error { return nil }