blob: 96499900b05e65f7d717d9156b6fa97fe46ea716 [file] [log] [blame]
// Copyright 2025 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 typesinternal_test
import (
"go/ast"
"go/parser"
"go/token"
"go/types"
"testing"
"golang.org/x/tools/internal/typesinternal"
)
func TestNoEffects(t *testing.T) {
src := `package p
type T int
type G[P any] int
func _() {
var x int
_ = T(x)
_ = G[int](x)
}
`
fset := token.NewFileSet()
file, err := parser.ParseFile(fset, "p.go", src, 0)
if err != nil {
t.Fatal(err)
}
var conf types.Config
info := &types.Info{
Types: make(map[ast.Expr]types.TypeAndValue),
}
_, err = conf.Check("", fset, []*ast.File{file}, info)
if err != nil {
t.Fatal(err)
}
ast.Inspect(file, func(node ast.Node) bool {
call, ok := node.(*ast.CallExpr)
if !ok {
return true
}
if !typesinternal.NoEffects(info, call) {
t.Errorf("NoEffects(%s) = false", types.ExprString(call))
}
return true
})
}