cppcheck parser #28
							
								
								
									
										9
									
								
								internal/parsers/cppcheck/meta.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								internal/parsers/cppcheck/meta.go
									
									
									
									
									
										Normal file
									
								
							|  | @ -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{}) | ||||||
|  | } | ||||||
							
								
								
									
										48
									
								
								internal/parsers/cppcheck/parser.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								internal/parsers/cppcheck/parser.go
									
									
									
									
									
										Normal file
									
								
							|  | @ -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 | ||||||
|  | } | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user