Giant blob of minor changes
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / golang.org / x / tools@v0.0.0-20201105173854-bc9fc8d8c4bc / internal / apidiff / report.go
1 package apidiff
2
3 import (
4         "bytes"
5         "fmt"
6         "io"
7 )
8
9 // Report describes the changes detected by Changes.
10 type Report struct {
11         Changes []Change
12 }
13
14 // A Change describes a single API change.
15 type Change struct {
16         Message    string
17         Compatible bool
18 }
19
20 func (r Report) messages(compatible bool) []string {
21         var msgs []string
22         for _, c := range r.Changes {
23                 if c.Compatible == compatible {
24                         msgs = append(msgs, c.Message)
25                 }
26         }
27         return msgs
28 }
29
30 func (r Report) String() string {
31         var buf bytes.Buffer
32         if err := r.Text(&buf); err != nil {
33                 return fmt.Sprintf("!!%v", err)
34         }
35         return buf.String()
36 }
37
38 func (r Report) Text(w io.Writer) error {
39         if err := r.TextIncompatible(w, true); err != nil {
40                 return err
41         }
42         return r.TextCompatible(w)
43 }
44
45 func (r Report) TextIncompatible(w io.Writer, withHeader bool) error {
46         if withHeader {
47                 return r.writeMessages(w, "Incompatible changes:", r.messages(false))
48         }
49         return r.writeMessages(w, "", r.messages(false))
50 }
51
52 func (r Report) TextCompatible(w io.Writer) error {
53         return r.writeMessages(w, "Compatible changes:", r.messages(true))
54 }
55
56 func (r Report) writeMessages(w io.Writer, header string, msgs []string) error {
57         if len(msgs) == 0 {
58                 return nil
59         }
60         if header != "" {
61                 if _, err := fmt.Fprintf(w, "%s\n", header); err != nil {
62                         return err
63                 }
64         }
65         for _, m := range msgs {
66                 if _, err := fmt.Fprintf(w, "- %s\n", m); err != nil {
67                         return err
68                 }
69         }
70         return nil
71 }