| This test verifies that the inliner does not insert unnecessary parentheses when | |
| forming the type arguments of a call, nor in composite literal expressions | |
| where parentheses are not allowed. | |
| -- go.mod -- | |
| module example.com | |
| go 1.18 | |
| -- e/e.go -- | |
| //go:build go1.26 | |
| package e | |
| import "errors" | |
| //go:fix inline | |
| func As[T error](err error) (T, bool) { // want As:"goFixInline e.As" | |
| return errors.AsType[T](err) | |
| } | |
| -- f/f.go -- | |
| //go:build go1.26 | |
| package f | |
| import ( | |
| "io/fs" | |
| "example.com/e" | |
| ) | |
| func AsPathError(err error) (*fs.PathError, bool) { | |
| return e.As[*fs.PathError](err) // want "Call of e.As should be inlined" | |
| } | |
| -- f/f.go.golden -- | |
| //go:build go1.26 | |
| package f | |
| import ( | |
| "errors" | |
| "io/fs" | |
| ) | |
| func AsPathError(err error) (*fs.PathError, bool) { | |
| return errors.AsType[*fs.PathError](err) // want "Call of e.As should be inlined" | |
| } | |
| -- g/g.go -- | |
| package g | |
| //go:fix inline | |
| func MapLiteral[T ~map[string]int]() T { // want MapLiteral:"goFixInline g.MapLiteral" | |
| return T{"k": 1} | |
| } | |
| //go:fix inline | |
| func SliceLiteral[T ~[]int]() T { // want SliceLiteral:"goFixInline g.SliceLiteral" | |
| return T{1, 2, 3} | |
| } | |
| -- h/h.go -- | |
| package h | |
| import "example.com/g" | |
| func CallLiterals() { | |
| _ = g.MapLiteral[map[string]int]() // want "Call of g.MapLiteral should be inlined" | |
| _ = g.SliceLiteral[[]int]() // want "Call of g.SliceLiteral should be inlined" | |
| } | |
| -- h/h.go.golden -- | |
| package h | |
| func CallLiterals() { | |
| _ = map[string]int{"k": 1} // want "Call of g.MapLiteral should be inlined" | |
| _ = []int{1, 2, 3} // want "Call of g.SliceLiteral should be inlined" | |
| } |