From 910754c24a6faa7e70e2728184f308801ba82b53 Mon Sep 17 00:00:00 2001 From: David Muir Sharnoff Date: Wed, 1 Feb 2023 22:20:43 -0800 Subject: [PATCH 1/2] use reflectutils.TypeName() for versioned type names --- go.mod | 2 +- go.sum | 4 ++-- internal/foo/foo.go | 3 --- internal/foo/v2/foo.go | 3 --- type_codes.go | 20 +++----------------- type_codes_test.go | 28 ---------------------------- 6 files changed, 6 insertions(+), 54 deletions(-) delete mode 100644 internal/foo/foo.go delete mode 100644 internal/foo/v2/foo.go delete mode 100644 type_codes_test.go diff --git a/go.mod b/go.mod index 82b7854..9574ff6 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.16 require ( github.com/kr/pretty v0.2.0 // indirect - github.com/muir/reflectutils v0.6.0 + github.com/muir/reflectutils v0.7.0 github.com/stretchr/testify v1.8.1 gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 // indirect ) diff --git a/go.sum b/go.sum index fa40d85..116f6d0 100644 --- a/go.sum +++ b/go.sum @@ -6,8 +6,8 @@ github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfn github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/muir/reflectutils v0.6.0 h1:jXfbW60Nx+STn78vwUWVCUwInXkqAC5kWS5oeY/xPgM= -github.com/muir/reflectutils v0.6.0/go.mod h1:l8W7iTj6zMdmsWcPfsdnaAYLEuipJ7baVROqpfuonIc= +github.com/muir/reflectutils v0.7.0 h1:7ez7OLYTThDQ5kpEpxtOgFvJgtE4E11D6PVTVw+Lwl0= +github.com/muir/reflectutils v0.7.0/go.mod h1:l8W7iTj6zMdmsWcPfsdnaAYLEuipJ7baVROqpfuonIc= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= diff --git a/internal/foo/foo.go b/internal/foo/foo.go deleted file mode 100644 index 221b1da..0000000 --- a/internal/foo/foo.go +++ /dev/null @@ -1,3 +0,0 @@ -package foo - -type Bar struct {} diff --git a/internal/foo/v2/foo.go b/internal/foo/v2/foo.go deleted file mode 100644 index 221b1da..0000000 --- a/internal/foo/v2/foo.go +++ /dev/null @@ -1,3 +0,0 @@ -package foo - -type Bar struct {} diff --git a/type_codes.go b/type_codes.go index fffd9fc..9e7078f 100644 --- a/type_codes.go +++ b/type_codes.go @@ -3,11 +3,10 @@ package nject // TODO: switch from typeCode to reflect.Type -- duplicate detection would be lost import ( - "path" "reflect" - "regexp" - "strings" "sync" + + "github.com/muir/reflectutils" ) type typeCode int @@ -76,22 +75,9 @@ func (tc typeCode) Type() reflect.Type { return reverseMap[tc] } -var versionRE = regexp.MustCompile(`/v(\d+)$`) - // Type returns the reflect.Type for this typeCode func (tc typeCode) String() string { - ts := tc.Type().String() - if versionRE.MatchString(tc.Type().PkgPath()) { - pp := tc.Type().PkgPath() - version := path.Base(pp) - pn := path.Base(path.Dir(pp)) - revised := strings.Replace(ts, pn, pn+"/"+version, 1) - if revised != ts { - return revised - } - return "(" + version + ")" + ts - } - return ts + return reflectutils.TypeName(tc.Type()) } func (tcs typeCodes) Types() []reflect.Type { diff --git a/type_codes_test.go b/type_codes_test.go deleted file mode 100644 index 079770b..0000000 --- a/type_codes_test.go +++ /dev/null @@ -1,28 +0,0 @@ -package nject - -import ( - "reflect" - "testing" - - v1 "github.com/muir/nject/internal/foo" - v2 "github.com/muir/nject/internal/foo/v2" - - "github.com/stretchr/testify/assert" -) - -func TestVersionedNames(t *testing.T) { - x1 := getTypeCode(v1.Bar{}) - assert.Equal(t, "foo.Bar", x1.String()) - t.Log("base type", reflect.TypeOf(v2.Bar{}).PkgPath()) - assert.Equal(t, "foo/v2.Bar", getTypeCode(v2.Bar{}).String()) - t.Log("pointer", reflect.TypeOf(&v2.Bar{}).PkgPath()) - assert.Equal(t, "*foo.Bar", getTypeCode(&v2.Bar{}).String()) // :( - assert.Equal(t, "*foo.Bar", getTypeCode(&v1.Bar{}).String()) // :( - t.Log("slice", reflect.TypeOf([]v2.Bar{}).PkgPath()) - assert.Equal(t, "[]foo.Bar", getTypeCode([]v2.Bar{}).String()) // :( - assert.Equal(t, "[]foo.Bar", getTypeCode([]v1.Bar{}).String()) // :( - dups := duplicateTypes() - assert.Contains(t, dups, "[]foo.Bar") - assert.Contains(t, dups, "*foo.Bar") - t.Log("duplicates", dups) -} From 5760fb6be56a7c24e6636fcb950ec440bcc0aeb3 Mon Sep 17 00:00:00 2001 From: David Muir Sharnoff Date: Wed, 1 Feb 2023 22:27:46 -0800 Subject: [PATCH 2/2] fix race --- error.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/error.go b/error.go index 1d31cfc..4cd500e 100644 --- a/error.go +++ b/error.go @@ -49,7 +49,7 @@ func duplicateTypes() string { return duplicates } names := make(map[string]struct{}) - for i := 1; i <= typeCounter; i++ { + for i := 1; i <= max; i++ { n := typeCode(i).String() if _, ok := names[n]; ok { if _, ok := duplicatesFound[n]; !ok {