From 33242654eadb9ff847b501b023f4d8bfc733c010 Mon Sep 17 00:00:00 2001 From: zjc_he Date: Fri, 24 May 2024 11:04:14 +0800 Subject: [PATCH] init(internal/parsers/cppcheck/) cppcheck --- internal/parsers/cppcheck/meta.go | 9 ++++++ internal/parsers/cppcheck/parser.go | 48 +++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100644 internal/parsers/cppcheck/meta.go create mode 100644 internal/parsers/cppcheck/parser.go diff --git a/internal/parsers/cppcheck/meta.go b/internal/parsers/cppcheck/meta.go new file mode 100644 index 0000000..b811ad4 --- /dev/null +++ b/internal/parsers/cppcheck/meta.go @@ -0,0 +1,9 @@ +package cppcheck + +import "focs.ji.sjtu.edu.cn/git/FOCS-dev/JOJ3/internal/stage" + +var name = "cppcheck" + +func init() { + stage.RegisterParser(name, &CppCheck{}) +} diff --git a/internal/parsers/cppcheck/parser.go b/internal/parsers/cppcheck/parser.go new file mode 100644 index 0000000..43fc534 --- /dev/null +++ b/internal/parsers/cppcheck/parser.go @@ -0,0 +1,48 @@ +package cppcheck + +import ( + "fmt" + + "focs.ji.sjtu.edu.cn/git/FOCS-dev/JOJ3/internal/stage" + "github.com/criyle/go-judge/envexec" +) + +type CppCheck struct{} + +type Conf struct { + Score int `default:"100"` + Comment string `default:""` +} + +func Parse(executorResult stage.ExecutorResult, conf Conf) stage.ParserResult { + // stdout := executorResult.Files["stdout"] + stderr := executorResult.Files["stderr"] + + if executorResult.Status != stage.Status(envexec.StatusAccepted) { + return stage.ParserResult{ + Score: 0, + Comment: fmt.Sprintf( + "Unexpected executor status: %s.\nStderr: %s", + executorResult.Status, stderr, + ), + } + } + return stage.ParserResult{ + Score: 0, + Comment: "", + } +} + +func (*CppCheck) Run(results []stage.ExecutorResult, confAny any) ( + []stage.ParserResult, bool, error, +) { + conf, err := stage.DecodeConf[Conf](confAny) + if err != nil { + return nil, true, err + } + var res []stage.ParserResult + for _, result := range results { + res = append(res, Parse(result, *conf)) + } + return res, false, nil +}