| // Copyright 2021 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 ast. |
| |
| package types2_test |
| |
| import ( |
| "cmd/compile/internal/syntax" |
| "testing" |
| ) |
| |
| // TestErrorCalls makes sure that check.errorf calls have at |
| // least 3 arguments (otherwise we should be using check.error). |
| func TestErrorCalls(t *testing.T) { |
| files, err := pkgFiles(".") |
| if err != nil { |
| t.Fatal(err) |
| } |
| |
| for _, file := range files { |
| syntax.Crawl(file, func(n syntax.Node) bool { |
| call, _ := n.(*syntax.CallExpr) |
| if call == nil { |
| return false |
| } |
| selx, _ := call.Fun.(*syntax.SelectorExpr) |
| if selx == nil { |
| return false |
| } |
| if !(isName(selx.X, "check") && isName(selx.Sel, "errorf")) { |
| return false |
| } |
| // check.errorf calls should have more than 2 arguments: |
| // position, format string, and arguments to format |
| if n := len(call.ArgList); n <= 2 { |
| t.Errorf("%s: got %d arguments, want > 2", call.Pos(), n) |
| return true |
| } |
| return false |
| }) |
| } |
| } |
| |
| func isName(n syntax.Node, name string) bool { |
| if n, ok := n.(*syntax.Name); ok { |
| return n.Value == name |
| } |
| return false |
| } |