Add govet parsing
This commit is contained in:
parent
4627bbbcb9
commit
aad8c6b884
5 changed files with 126 additions and 52 deletions
85
parsers/parsers.go
Normal file
85
parsers/parsers.go
Normal file
|
@ -0,0 +1,85 @@
|
|||
package parsers
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"fmt"
|
||||
"os"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"git.ctrlz.es/mgdelacroix/campaigner/model"
|
||||
)
|
||||
|
||||
const (
|
||||
GREP = "grep"
|
||||
GOVET = "govet"
|
||||
)
|
||||
|
||||
func parseGrepLine(line string) (*model.Ticket, error) {
|
||||
// ToDo: it would be great to be able to relate a line with its
|
||||
// parent method, at least for JS and Golang
|
||||
parts := strings.Split(line, ":")
|
||||
if len(parts) < 3 {
|
||||
return nil, fmt.Errorf("cannot parse line: %s", line)
|
||||
}
|
||||
|
||||
filename := parts[0]
|
||||
lineNo, err := strconv.Atoi(parts[1])
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
text := strings.Join(parts[2:], "")
|
||||
|
||||
return &model.Ticket{
|
||||
Data: map[string]interface{}{
|
||||
"filename": filename,
|
||||
"lineNo": lineNo,
|
||||
"text": strings.TrimSpace(text),
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
|
||||
func parseGovetLine(line string) (*model.Ticket, error) {
|
||||
parts := strings.Split(line, ":")
|
||||
if len(parts) < 4 {
|
||||
return nil, fmt.Errorf("cannot parse line: %s", line)
|
||||
}
|
||||
|
||||
filename := parts[0]
|
||||
lineNo, err := strconv.Atoi(parts[1])
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
text := strings.Join(parts[3:], "")
|
||||
|
||||
return &model.Ticket{
|
||||
Data: map[string]interface{}{
|
||||
"filename": filename,
|
||||
"lineNo": lineNo,
|
||||
"text": strings.TrimSpace(text),
|
||||
},
|
||||
}, nil
|
||||
}
|
||||
|
||||
func ParseWith(parser string) []*model.Ticket {
|
||||
var parseFn func(string) (*model.Ticket, error)
|
||||
switch parser {
|
||||
case GREP:
|
||||
parseFn = parseGrepLine
|
||||
case GOVET:
|
||||
parseFn = parseGovetLine
|
||||
default:
|
||||
fmt.Fprintf(os.Stderr, "Unknown parser %s", parser)
|
||||
return nil
|
||||
}
|
||||
|
||||
tickets := []*model.Ticket{}
|
||||
scanner := bufio.NewScanner(os.Stdin)
|
||||
for scanner.Scan() {
|
||||
ticket, _ := parseFn(scanner.Text())
|
||||
if ticket != nil {
|
||||
tickets = append(tickets, ticket)
|
||||
}
|
||||
}
|
||||
return tickets
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue