github.com/vipcoin-gold/reviewdog@v1.0.2/parser/rdjsonl.go (about) 1 package parser 2 3 import ( 4 "bufio" 5 "fmt" 6 "io" 7 8 "google.golang.org/protobuf/encoding/protojson" 9 10 "github.com/vipcoin-gold/reviewdog/proto/rdf" 11 ) 12 13 var _ Parser = &RDJSONLParser{} 14 15 // RDJSONLParser is parser for rdjsonl format. 16 type RDJSONLParser struct{} 17 18 // NewRDJSONLParser returns a new RDJSONParser. 19 func NewRDJSONLParser() *RDJSONLParser { 20 return &RDJSONLParser{} 21 } 22 23 // Parse parses rdjson (JSONL of Diagnostic). 24 func (p *RDJSONLParser) Parse(r io.Reader) ([]*rdf.Diagnostic, error) { 25 var results []*rdf.Diagnostic 26 s := bufio.NewScanner(r) 27 for s.Scan() { 28 d := new(rdf.Diagnostic) 29 if err := protojson.Unmarshal(s.Bytes(), d); err != nil { 30 return nil, fmt.Errorf("failed to unmarshal rdjsonl (Diagnostic): %w", err) 31 } 32 if d.GetOriginalOutput() == "" { 33 // TODO(haya14busa): Refactor not to fill in original output. 34 d.OriginalOutput = s.Text() 35 } 36 results = append(results, d) 37 } 38 return results, nil 39 }