Skip to content

Commit

Permalink
support types.Alias
Browse files Browse the repository at this point in the history
  • Loading branch information
RangelReale committed Aug 20, 2024
1 parent 66dba08 commit 42d905a
Show file tree
Hide file tree
Showing 4 changed files with 99 additions and 10 deletions.
11 changes: 1 addition & 10 deletions pkg/generator.go
Original file line number Diff line number Diff line change
Expand Up @@ -509,16 +509,7 @@ func (g *Generator) renderType(ctx context.Context, typ types.Type) string {
}
return fmt.Sprintf("%s[%s]", name, strings.Join(args, ","))
case *types.Alias:
name := g.getPackageScopedType(ctx, t.Obj())
if t.TypeArgs() == nil || t.TypeArgs().Len() == 0 {
return name
}
args := make([]string, 0, t.TypeArgs().Len())
for i := 0; i < t.TypeArgs().Len(); i++ {
arg := t.TypeArgs().At(i)
args = append(args, g.renderType(ctx, arg))
}
return fmt.Sprintf("%s[%s]", name, strings.Join(args, ","))
return g.renderTypeAlias(ctx, t)
case *types.TypeParam:
if t.Constraint() != nil {
name := t.Obj().Name()
Expand Down
12 changes: 12 additions & 0 deletions pkg/generator_alias.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
//go:build !go1.23

package pkg

import (
"context"
"go/types"
)

func (g *Generator) renderTypeAlias(ctx context.Context, t *types.Alias) string {
return g.getPackageScopedType(ctx, t.Obj())
}
23 changes: 23 additions & 0 deletions pkg/generator_alias_go123.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
//go:build go1.23

package pkg

import (
"context"
"fmt"
"go/types"
"strings"
)

func (g *Generator) renderTypeAlias(ctx context.Context, t *types.Alias) string {
name := g.getPackageScopedType(ctx, t.Obj())
if t.TypeArgs() == nil || t.TypeArgs().Len() == 0 {
return name
}
args := make([]string, 0, t.TypeArgs().Len())
for i := 0; i < t.TypeArgs().Len(); i++ {
arg := t.TypeArgs().At(i)
args = append(args, g.renderType(ctx, arg))
}
return fmt.Sprintf("%s[%s]", name, strings.Join(args, ","))
}
63 changes: 63 additions & 0 deletions pkg/generator_go123_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
//go:build go1.23

package pkg

import "regexp"

func (s *GeneratorSuite) TestReplaceTypePackagePrologueGo123() {
expected := `package mocks
import baz "github.com/vektra/mockery/v2/pkg/fixtures/example_project/baz"
import mock "github.com/stretchr/testify/mock"
`
generator := NewGenerator(
s.ctx,
GeneratorConfig{InPackage: false},
s.getInterfaceFromFile("example_project/baz/foo.go", "Foo"),
pkg,
)

s.checkPrologueGeneration(generator, expected)
}

func (s *GeneratorSuite) TestReplaceTypePackageGo123() {
cfg := GeneratorConfig{InPackage: false}

s.checkGenerationRegexWithConfig("example_project/baz/foo.go", "Foo", cfg, []regexpExpected{
// func (_m *Foo) GetBaz() (*baz.Baz, error)
{true, regexp.MustCompile(`func \([^\)]+\) GetBaz\(\) \(\*baz\.Baz`)},
// func (_m *Foo) GetBaz() (*foo.InternalBaz, error)
{false, regexp.MustCompile(`func \([^\)]+\) GetBaz\(\) \(\*foo\.InternalBaz`)},
})
}

func (s *GeneratorSuite) TestReplaceTypePackageMultiplePrologueGo123() {
expected := `package mocks
import mock "github.com/stretchr/testify/mock"
import replace_type "github.com/vektra/mockery/v2/pkg/fixtures/example_project/replace_type"
import rt1 "github.com/vektra/mockery/v2/pkg/fixtures/example_project/replace_type/rti/rt1"
import rt2 "github.com/vektra/mockery/v2/pkg/fixtures/example_project/replace_type/rti/rt2"
`
generator := NewGenerator(
s.ctx,
GeneratorConfig{InPackage: false},
s.getInterfaceFromFile("example_project/replace_type/rt.go", "RType"),
pkg,
)

s.checkPrologueGeneration(generator, expected)
}

func (s *GeneratorSuite) TestReplaceTypePackageMultipleGo123() {
cfg := GeneratorConfig{InPackage: false}

s.checkGenerationRegexWithConfig("example_project/replace_type/rt.go", "RType", cfg, []regexpExpected{
// func (_m *RType) Replace1(f rt1.RType1)
{true, regexp.MustCompile(`func \([^\)]+\) Replace1\(f rt1\.RType1`)},
// func (_m *RType) Replace2(f rt2.RType2)
{true, regexp.MustCompile(`func \([^\)]+\) Replace2\(f rt2\.RType2`)},
})
}

0 comments on commit 42d905a

Please sign in to comment.