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