github.com/mistwind/reviewdog@v0.0.0-20230322024206-9cfa11856d58/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/mistwind/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  }