feat: cpplint parser #22
|  | @ -1,6 +1,7 @@ | |||
| package parsers | ||||
| 
 | ||||
| import ( | ||||
| 	_ "focs.ji.sjtu.edu.cn/git/FOCS-dev/JOJ3/internal/parsers/cpplint" | ||||
| 	_ "focs.ji.sjtu.edu.cn/git/FOCS-dev/JOJ3/internal/parsers/diff" | ||||
| 	_ "focs.ji.sjtu.edu.cn/git/FOCS-dev/JOJ3/internal/parsers/dummy" | ||||
| 	_ "focs.ji.sjtu.edu.cn/git/FOCS-dev/JOJ3/internal/parsers/resultstatus" | ||||
|  |  | |||
							
								
								
									
										9
									
								
								internal/parsers/cpplint/meta.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								internal/parsers/cpplint/meta.go
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,9 @@ | |||
| package cpplint | ||||
| 
 | ||||
| import "focs.ji.sjtu.edu.cn/git/FOCS-dev/JOJ3/internal/stage" | ||||
| 
 | ||||
| var name = "cpplint" | ||||
| 
 | ||||
| func init() { | ||||
| 	stage.RegisterParser(name, &Cpplint{}) | ||||
| } | ||||
							
								
								
									
										53
									
								
								internal/parsers/cpplint/parser.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								internal/parsers/cpplint/parser.go
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,53 @@ | |||
| package cpplint | ||||
| 
 | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"regexp" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"focs.ji.sjtu.edu.cn/git/FOCS-dev/JOJ3/internal/stage" | ||||
| ) | ||||
| 
 | ||||
| type Conf struct { | ||||
| 	Score int | ||||
| } | ||||
| 
 | ||||
| type Cpplint struct{} | ||||
| 
 | ||||
| func Parse(executorResult stage.ExecutorResult, conf Conf) stage.ParserResult { | ||||
| 	stderr := executorResult.Files["stderr"] | ||||
| 	pattern := `(.+):(\d+):  (.+)  \[(.+)\] \[(\d)]\n` | ||||
| 	re := regexp.MustCompile(pattern) | ||||
| 	matches := re.FindAllStringSubmatch(stderr, -1) | ||||
| 	score := 0 | ||||
| 	comment := "" | ||||
| 	for _, match := range matches { | ||||
| 		fileName := match[1] | ||||
| 		lineNum, _ := strconv.Atoi(match[2]) | ||||
| 		message := match[3] | ||||
| 		category := match[4] | ||||
| 		confidence, _ := strconv.Atoi(match[5]) | ||||
| 		score -= confidence | ||||
| 		// TODO: add more detailed comment, just re-assemble for now
 | ||||
| 		comment += fmt.Sprintf("%s:%d:  %s  [%s] [%d]\n", | ||||
| 			fileName, lineNum, message, category, confidence) | ||||
| 	} | ||||
| 	return stage.ParserResult{ | ||||
| 		Score:   score, | ||||
| 		Comment: comment, | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (*Cpplint) 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