1
2
3
4
5 package aliases
6
7 import (
8 "go/ast"
9 "go/parser"
10 "go/token"
11 "go/types"
12 )
13
14
15 func Rhs(alias *types.Alias) types.Type {
16 if alias, ok := any(alias).(interface{ Rhs() types.Type }); ok {
17 return alias.Rhs()
18 }
19
20
21
22 return types.Unalias(alias)
23 }
24
25
26 func TypeParams(alias *types.Alias) *types.TypeParamList {
27 if alias, ok := any(alias).(interface{ TypeParams() *types.TypeParamList }); ok {
28 return alias.TypeParams()
29 }
30 return nil
31 }
32
33
34 func SetTypeParams(alias *types.Alias, tparams []*types.TypeParam) {
35 if alias, ok := any(alias).(interface {
36 SetTypeParams(tparams []*types.TypeParam)
37 }); ok {
38 alias.SetTypeParams(tparams)
39 } else if len(tparams) > 0 {
40 panic("cannot set type parameters of an Alias type in go1.22")
41 }
42 }
43
44
45 func TypeArgs(alias *types.Alias) *types.TypeList {
46 if alias, ok := any(alias).(interface{ TypeArgs() *types.TypeList }); ok {
47 return alias.TypeArgs()
48 }
49 return nil
50 }
51
52
53
54 func Origin(alias *types.Alias) *types.Alias {
55 if alias, ok := any(alias).(interface{ Origin() *types.Alias }); ok {
56 return alias.Origin()
57 }
58 return alias
59 }
60
61
62
63
64 func Enabled() bool {
65
66
67
68
69
70
71
72
73
74
75 fset := token.NewFileSet()
76 f, _ := parser.ParseFile(fset, "a.go", "package p; type A = int", parser.SkipObjectResolution)
77 pkg, _ := new(types.Config).Check("p", fset, []*ast.File{f}, nil)
78 _, enabled := pkg.Scope().Lookup("A").Type().(*types.Alias)
79 return enabled
80 }
81
View as plain text