|  | // Copyright 2024 The Go Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style | 
|  | // license that can be found in the LICENSE file. | 
|  |  | 
|  | package aliases | 
|  |  | 
|  | import ( | 
|  | "go/token" | 
|  | "go/types" | 
|  | ) | 
|  |  | 
|  | // Package aliases defines backward compatible shims | 
|  | // for the types.Alias type representation added in 1.22. | 
|  | // This defines placeholders for x/tools until 1.26. | 
|  |  | 
|  | // NewAlias creates a new TypeName in Package pkg that | 
|  | // is an alias for the type rhs. | 
|  | // | 
|  | // The enabled parameter determines whether the resulting [TypeName]'s | 
|  | // type is an [types.Alias]. Its value must be the result of a call to | 
|  | // [Enabled], which computes the effective value of | 
|  | // GODEBUG=gotypesalias=... by invoking the type checker. The Enabled | 
|  | // function is expensive and should be called once per task (e.g. | 
|  | // package import), not once per call to NewAlias. | 
|  | // | 
|  | // Precondition: enabled || len(tparams)==0. | 
|  | // If materialized aliases are disabled, there must not be any type parameters. | 
|  | func NewAlias(enabled bool, pos token.Pos, pkg *types.Package, name string, rhs types.Type, tparams []*types.TypeParam) *types.TypeName { | 
|  | if enabled { | 
|  | tname := types.NewTypeName(pos, pkg, name, nil) | 
|  | SetTypeParams(types.NewAlias(tname, rhs), tparams) | 
|  | return tname | 
|  | } | 
|  | if len(tparams) > 0 { | 
|  | panic("cannot create an alias with type parameters when gotypesalias is not enabled") | 
|  | } | 
|  | return types.NewTypeName(pos, pkg, name, rhs) | 
|  | } |