| 1234567891011121314151617181920212223242526272829303132333435363738 |
- // 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)
- }
|