From 862693bf1f436a6ef86ab840e7fa47efab9c26b8 Mon Sep 17 00:00:00 2001 From: Boming Zhang Date: Fri, 29 Nov 2024 01:53:30 -0500 Subject: [PATCH] feat(parser/file): show file content --- internal/parser/all.go | 1 + internal/parser/file/meta.go | 9 +++++++++ internal/parser/file/parser.go | 31 +++++++++++++++++++++++++++++++ 3 files changed, 41 insertions(+) create mode 100644 internal/parser/file/meta.go create mode 100644 internal/parser/file/parser.go diff --git a/internal/parser/all.go b/internal/parser/all.go index 0f9e445..7d10379 100644 --- a/internal/parser/all.go +++ b/internal/parser/all.go @@ -6,6 +6,7 @@ import ( _ "github.com/joint-online-judge/JOJ3/internal/parser/cpplint" _ "github.com/joint-online-judge/JOJ3/internal/parser/diff" _ "github.com/joint-online-judge/JOJ3/internal/parser/dummy" + _ "github.com/joint-online-judge/JOJ3/internal/parser/file" _ "github.com/joint-online-judge/JOJ3/internal/parser/healthcheck" _ "github.com/joint-online-judge/JOJ3/internal/parser/keyword" _ "github.com/joint-online-judge/JOJ3/internal/parser/resultdetail" diff --git a/internal/parser/file/meta.go b/internal/parser/file/meta.go new file mode 100644 index 0000000..092348f --- /dev/null +++ b/internal/parser/file/meta.go @@ -0,0 +1,9 @@ +package file + +import "github.com/joint-online-judge/JOJ3/internal/stage" + +var name = "file" + +func init() { + stage.RegisterParser(name, &File{}) +} diff --git a/internal/parser/file/parser.go b/internal/parser/file/parser.go new file mode 100644 index 0000000..f225a70 --- /dev/null +++ b/internal/parser/file/parser.go @@ -0,0 +1,31 @@ +package file + +import ( + "strings" + + "github.com/joint-online-judge/JOJ3/internal/stage" +) + +type Conf struct { + Name string +} + +type File struct{} + +func (*File) 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 { + content := result.Files[conf.Name] + if !strings.HasSuffix(content, "\n") { + content += "\n" + } + res = append(res, stage.ParserResult{Score: 0, Comment: content}) + } + return res, false, nil +}