66 lines
1.4 KiB
Go
66 lines
1.4 KiB
Go
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
|
|
}
|