зеркало из https://github.com/golang/tools.git
Revert "internal/aliases: add a function to conditionally enable aliases"
This reverts commit f8f3c13ff3
.
Reason for revert: https://go.dev/cl/619395 appears to be a better solution for the same problem.
Change-Id: Ie3f290fca74b2cc2627484504b6db780f89b3bb4
Reviewed-on: https://go-review.googlesource.com/c/tools/+/619415
Reviewed-by: Robert Findley <rfindley@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Commit-Queue: Tim King <taking@google.com>
This commit is contained in:
Родитель
4f6e118e23
Коммит
50179f2225
|
@ -5,13 +5,8 @@
|
|||
package aliases
|
||||
|
||||
import (
|
||||
"go/build"
|
||||
"go/token"
|
||||
"go/types"
|
||||
"os"
|
||||
"slices"
|
||||
"strings"
|
||||
"sync"
|
||||
)
|
||||
|
||||
// Package aliases defines backward compatible shims
|
||||
|
@ -41,52 +36,3 @@ func NewAlias(enabled bool, pos token.Pos, pkg *types.Package, name string, rhs
|
|||
}
|
||||
return types.NewTypeName(pos, pkg, name, rhs)
|
||||
}
|
||||
|
||||
// ConditionallyEnableGoTypesAlias enables the gotypesalias GODEBUG setting if
|
||||
// * the version of go used to compile the program is between 1.23 and 1.26,
|
||||
// * gotypesalias are not already enabled, and
|
||||
// * gotypesalias is not set in GODEBUG already
|
||||
// exactly once. Otherwise it does nothing.
|
||||
//
|
||||
// Recommended usage is to do the following within a main package:
|
||||
//
|
||||
// func init() { ConditionallyEnableGoTypesAlias() }
|
||||
//
|
||||
// within a module with go version 1.22 or in GOPATH mode.
|
||||
func ConditionallyEnableGoTypesAlias() { conditionallyEnableGoTypesAliasOnce() }
|
||||
|
||||
var conditionallyEnableGoTypesAliasOnce = sync.OnceFunc(conditionallyEnableGoTypesAlias)
|
||||
|
||||
func conditionallyEnableGoTypesAlias() {
|
||||
// Let R be the version of go the program was compiled with. Then
|
||||
// if R < 1.22, do nothing as gotypesalias is meaningless,
|
||||
// if R == 1.22, do not turn on gotypesalias (latent bugs),
|
||||
// if 1.23 <= R && R <= 1.26, turn on gotypesalias, and
|
||||
// if R >= 1.27, this is a guaranteed no-op.
|
||||
|
||||
if !slices.Contains(build.Default.ReleaseTags, "go1.23") {
|
||||
return // R < 1.23 (do nothing)
|
||||
}
|
||||
if slices.Contains(build.Default.ReleaseTags, "go1.27") {
|
||||
return // R >= 1.27 (do nothing)
|
||||
}
|
||||
// 1.23 <= R <= 1.26
|
||||
_, anyIsAlias := types.Universe.Lookup("any").Type().(*types.Alias)
|
||||
if anyIsAlias {
|
||||
return // gotypesalias are already enabled.
|
||||
}
|
||||
|
||||
// Does GODEBUG have gotypesalias set already?
|
||||
godebugs := strings.Split(os.Getenv("GODEBUG"), ",")
|
||||
for _, p := range godebugs {
|
||||
if strings.HasPrefix(strings.TrimSpace(p), "gotypesalias=") {
|
||||
// gotypesalias is set in GODEBUG already.
|
||||
// Do not override this setting.
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
// Enable gotypesalias.
|
||||
godebugs = append(godebugs, "gotypesalias=1")
|
||||
os.Setenv("GODEBUG", strings.Join(godebugs, ","))
|
||||
}
|
||||
|
|
|
@ -1,76 +0,0 @@
|
|||
// 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_test
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
"os/exec"
|
||||
"runtime"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"golang.org/x/tools/internal/aliases"
|
||||
"golang.org/x/tools/internal/testenv"
|
||||
)
|
||||
|
||||
func init() {
|
||||
if os.Getenv("ConditionallyEnableGoTypesAlias_CHILD") == "1" {
|
||||
go aliases.ConditionallyEnableGoTypesAlias() // Throw in an extra call. Should be fine.
|
||||
aliases.ConditionallyEnableGoTypesAlias()
|
||||
}
|
||||
}
|
||||
|
||||
func TestConditionallyEnableGoTypesAlias(t *testing.T) {
|
||||
if !(runtime.GOOS == "linux" || runtime.GOOS == "darwin") {
|
||||
t.Skipf("skipping fork/exec test on this platform")
|
||||
}
|
||||
|
||||
if os.Getenv("ConditionallyEnableGoTypesAlias_CHILD") == "1" {
|
||||
// child process
|
||||
enabled := aliases.Enabled()
|
||||
fmt.Printf("gotypesalias is enabled %v", enabled)
|
||||
return
|
||||
}
|
||||
|
||||
testenv.NeedsTool(t, "go")
|
||||
|
||||
var wants map[string]string
|
||||
const (
|
||||
enabled = "gotypesalias is enabled true"
|
||||
disabled = "gotypesalias is enabled false"
|
||||
)
|
||||
goversion := testenv.Go1Point()
|
||||
if goversion <= 22 {
|
||||
wants = map[string]string{
|
||||
"": disabled,
|
||||
"0": disabled,
|
||||
"1": enabled,
|
||||
}
|
||||
} else {
|
||||
wants = map[string]string{
|
||||
"": enabled,
|
||||
"0": disabled,
|
||||
"1": enabled,
|
||||
}
|
||||
}
|
||||
|
||||
for _, test := range []string{"", "0", "1"} {
|
||||
cmd := exec.Command(os.Args[0], "-test.run=TestConditionallyEnableGoTypesAlias")
|
||||
cmd.Env = append(os.Environ(), "ConditionallyEnableGoTypesAlias_CHILD=1")
|
||||
if test != "" {
|
||||
cmd.Env = append(cmd.Env, fmt.Sprintf("GODEBUG=gotypesalias=%s", test))
|
||||
}
|
||||
out, err := cmd.CombinedOutput()
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
want := wants[test]
|
||||
if !strings.Contains(string(out), want) {
|
||||
t.Errorf("gotypesalias=%q: want %s", test, want)
|
||||
t.Logf("(go 1.%d) %q: out=<<%s>>", goversion, test, out)
|
||||
}
|
||||
}
|
||||
}
|
Загрузка…
Ссылка в новой задаче