From fe54fb35175bb1c0c175e2335e23d7fa90ca987a Mon Sep 17 00:00:00 2001 From: Jonathan Amsterdam Date: Thu, 18 Apr 2019 09:46:22 -0400 Subject: [PATCH] apidiff: represent a Report as a list of Changes Modify the Report representation to be a list of Change values, instead of two string slices. This will enable adding more information to each change, like source location. Change-Id: Ia7389d7bc552479ea5e06efd7fdefe004058e66f Reviewed-on: https://go-review.googlesource.com/c/tools/+/172777 Run-TryBot: Jay Conrod TryBot-Result: Gobot Gobot Reviewed-by: Jay Conrod --- internal/apidiff/apidiff.go | 10 +++++++--- internal/apidiff/apidiff_test.go | 10 ++++++---- internal/apidiff/report.go | 24 ++++++++++++++++++++---- 3 files changed, 33 insertions(+), 11 deletions(-) diff --git a/internal/apidiff/apidiff.go b/internal/apidiff/apidiff.go index dc0f0e7a78..76669d8b05 100644 --- a/internal/apidiff/apidiff.go +++ b/internal/apidiff/apidiff.go @@ -24,10 +24,14 @@ import ( func Changes(old, new *types.Package) Report { d := newDiffer(old, new) d.checkPackage() - return Report{ - Incompatible: d.incompatibles.collect(), - Compatible: d.compatibles.collect(), + r := Report{} + for _, m := range d.incompatibles.collect() { + r.Changes = append(r.Changes, Change{Message: m, Compatible: false}) } + for _, m := range d.compatibles.collect() { + r.Changes = append(r.Changes, Change{Message: m, Compatible: true}) + } + return r } type differ struct { diff --git a/internal/apidiff/apidiff_test.go b/internal/apidiff/apidiff_test.go index 3991a9a9bf..4925509565 100644 --- a/internal/apidiff/apidiff_test.go +++ b/internal/apidiff/apidiff_test.go @@ -37,11 +37,13 @@ func TestChanges(t *testing.T) { report := Changes(oldpkg.Types, newpkg.Types) - if !reflect.DeepEqual(report.Incompatible, wanti) { - t.Errorf("incompatibles: got %v\nwant %v\n", report.Incompatible, wanti) + got := report.messages(false) + if !reflect.DeepEqual(got, wanti) { + t.Errorf("incompatibles: got %v\nwant %v\n", got, wanti) } - if !reflect.DeepEqual(report.Compatible, wantc) { - t.Errorf("compatibles: got %v\nwant %v\n", report.Compatible, wantc) + got = report.messages(true) + if !reflect.DeepEqual(got, wantc) { + t.Errorf("compatibles: got %v\nwant %v\n", got, wantc) } } diff --git a/internal/apidiff/report.go b/internal/apidiff/report.go index fd346b158d..ce79e2790a 100644 --- a/internal/apidiff/report.go +++ b/internal/apidiff/report.go @@ -8,7 +8,23 @@ import ( // Report describes the changes detected by Changes. type Report struct { - Incompatible, Compatible []string + Changes []Change +} + +// A Change describes a single API change. +type Change struct { + Message string + Compatible bool +} + +func (r Report) messages(compatible bool) []string { + var msgs []string + for _, c := range r.Changes { + if c.Compatible == compatible { + msgs = append(msgs, c.Message) + } + } + return msgs } func (r Report) String() string { @@ -28,13 +44,13 @@ func (r Report) Text(w io.Writer) error { func (r Report) TextIncompatible(w io.Writer, withHeader bool) error { if withHeader { - return r.writeMessages(w, "Incompatible changes:", r.Incompatible) + return r.writeMessages(w, "Incompatible changes:", r.messages(false)) } - return r.writeMessages(w, "", r.Incompatible) + return r.writeMessages(w, "", r.messages(false)) } func (r Report) TextCompatible(w io.Writer) error { - return r.writeMessages(w, "Compatible changes:", r.Compatible) + return r.writeMessages(w, "Compatible changes:", r.messages(true)) } func (r Report) writeMessages(w io.Writer, header string, msgs []string) error {