From 3c6751fed4b323ce0d01afb05e1250d4bd1ed4bd Mon Sep 17 00:00:00 2001 From: Mat Ryer Date: Fri, 7 Jul 2017 14:42:53 +0100 Subject: [PATCH] de-duped imports --- package/moq/moq.go | 9 ++++++--- package/moq/moq_test.go | 3 +++ package/moq/testdata/imports/two/two.go | 1 + 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/package/moq/moq.go b/package/moq/moq.go index 34ac95b..26be280 100644 --- a/package/moq/moq.go +++ b/package/moq/moq.go @@ -22,7 +22,7 @@ type Mocker struct { pkgs map[string]*ast.Package pkgName string - imports []string + imports map[string]bool } // New makes a new Mocker for the specified package directory. @@ -57,6 +57,7 @@ func New(src, packageName string) (*Mocker, error) { fset: fset, pkgs: pkgs, pkgName: packageName, + imports: make(map[string]bool), }, nil } @@ -106,7 +107,9 @@ func (m *Mocker) Mock(w io.Writer, name ...string) error { doc.Objects = append(doc.Objects, obj) } } - doc.Imports = append(doc.Imports, m.imports...) + for pkgToImport := range m.imports { + doc.Imports = append(doc.Imports, pkgToImport) + } err := m.tmpl.Execute(w, doc) if err != nil { return err @@ -118,7 +121,7 @@ func (m *Mocker) packageQualifier(pkg *types.Package) string { if m.pkgName == pkg.Name() { return "" } - m.imports = append(m.imports, pkg.Path()) + m.imports[pkg.Path()] = true return pkg.Name() } diff --git a/package/moq/moq_test.go b/package/moq/moq_test.go index 2c86670..b53b689 100644 --- a/package/moq/moq_test.go +++ b/package/moq/moq_test.go @@ -160,5 +160,8 @@ func TestImports(t *testing.T) { if !strings.Contains(s, str) { t.Errorf("expected by missing: \"%s\"", str) } + if len(strings.Split(s, str)) > 2 { + t.Errorf("more than one: \"%s\"", str) + } } } diff --git a/package/moq/testdata/imports/two/two.go b/package/moq/testdata/imports/two/two.go index 66d5ca2..a7635a6 100644 --- a/package/moq/testdata/imports/two/two.go +++ b/package/moq/testdata/imports/two/two.go @@ -7,4 +7,5 @@ import ( // DoSomething does something. type DoSomething interface { Do(thing one.Thing) error + Another(thing one.Thing) error }