Missing package in generated fakes using go 1.23.1
luc-gocaspi opened this issue · 3 comments
In some cases the the generated fake functions are missing the needed package info for Types when using go 1.23.1. If go 1.22.7 is used everything is working fine.
See the following example:
package service
import (
"context"
"go.mongodb.org/mongo-driver/bson"
)
//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6 -generate
//counterfeiter:generate . Example
type Example interface {
FindExample(ctx context.Context, filter bson.M) ([]string, error)
}
Resulting output using go 1.23.1:
(...)
type FakeExample struct {
FindExampleStub func(context.Context, M) ([]string, error)
findExampleMutex sync.RWMutex
findExampleArgsForCall []struct {
arg1 context.Context
arg2 M
}
findExampleReturns struct {
result1 []string
result2 error
}
findExampleReturnsOnCall map[int]struct {
result1 []string
result2 error
}
invocations map[string][][]interface{}
invocationsMutex sync.RWMutex
}
(...)
Resulting output using go 1.22.7:
(...)
type FakeExample struct {
FindExampleStub func(context.Context, primitive.M) ([]string, error)
findExampleMutex sync.RWMutex
findExampleArgsForCall []struct {
arg1 context.Context
arg2 primitive.M
}
findExampleReturns struct {
result1 []string
result2 error
}
findExampleReturnsOnCall map[int]struct {
result1 []string
result2 error
}
invocations map[string][][]interface{}
invocationsMutex sync.RWMutex
}
(...)
We are also seeing this with go1.23.1
:
import (
"sync"
"github.com/aws/aws-sdk-go/aws/request"
"github.com/aws/aws-sdk-go/service/s3"
"github.com/aws/aws-sdk-go/service/s3/s3iface"
)
type FakeS3API struct {
(...)
// Note the missing "context." in stub below and missing import for "context" above
AbortMultipartUploadWithContextStub func(Context, *s3.AbortMultipartUploadInput, ...request.Option) (*s3.AbortMultipartUploadOutput, error)
abortMultipartUploadWithContextMutex sync.RWMutex
abortMultipartUploadWithContextArgsForCall []struct {
arg1 Context
arg2 *s3.AbortMultipartUploadInput
arg3 []request.Option
}
(...)
I just tagged v6.9.0
of the package. I was able to reproduce the issue with v6.8.1
, and the issue is resolved in v.6.9.0
because it includes a newer version of golang.org/x/tools
.
I don't think this bug is resolved by v6.9.0 - @joefitzgerald are you sure you were using go1.23 when you tested it? Using go1.23 and counterfeiter v6.9.0, I still get exactly the same result as described in the bug report above using the input given by the bug reporter.
The root cause seems to have been a breaking change in the stdlib - the AST that's exposed by go/types
has changed how it represents alias types, and golang.org/x/tools
doesn't contain any change that seems like it would address this. This is from the go 1.23 changelog:
By default, go/types now produces Alias type nodes for type aliases. This behavior can be controlled by the GODEBUG gotypesalias flag. Its default has changed from 0 in Go 1.22 to 1 in Go 1.23.