| // Copyright 2013 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 errors |
| |
| // Testing precise operand formatting in error messages |
| // (matching messages are regular expressions, hence the \'s). |
| func f(x int, m map[string]int) { |
| // no values |
| _ = f /* ERROR "f(0, m) (no value) used as value" */ (0, m) |
| |
| // built-ins |
| _ = println // ERROR "println (built-in) must be called" |
| |
| // types |
| _ = complex128 // ERROR "complex128 (type) is not an expression" |
| |
| // constants |
| const c1 = 991 |
| const c2 float32 = 0.5 |
| const c3 = "foo" |
| 0 // ERROR "0 (untyped int constant) is not used" |
| 0.5 // ERROR "0.5 (untyped float constant) is not used" |
| "foo" // ERROR `"foo" (untyped string constant) is not used` |
| c1 // ERROR "c1 (untyped int constant 991) is not used" |
| c2 // ERROR "c2 (constant 0.5 of type float32) is not used" |
| c1 /* ERROR "c1 + c2 (constant 991.5 of type float32) is not used" */ + c2 |
| c3 // ERROR `c3 (untyped string constant "foo") is not used` |
| |
| // variables |
| x // ERROR "x (variable of type int) is not used" |
| |
| // values |
| nil // ERROR "nil is not used" |
| ( /* ERROR "(*int)(nil) (value of type *int) is not used" */ *int)(nil) |
| x /* ERROR "x != x (untyped bool value) is not used" */ != x |
| x /* ERROR "x + x (value of type int) is not used" */ + x |
| |
| // value, ok's |
| const s = "foo" |
| m /* ERROR "m[s] (map index expression of type int) is not used" */ [s] |
| } |
| |
| // Valid ERROR comments can have a variety of forms. |
| func _() { |
| 0 /* ERRORx "0 .* is not used" */ |
| 0 /* ERRORx "0 .* is not used" */ |
| 0 // ERRORx "0 .* is not used" |
| 0 // ERRORx "0 .* is not used" |
| } |
| |
| // Don't report spurious errors as a consequence of earlier errors. |
| // Add more tests as needed. |
| func _() { |
| if err := foo /* ERROR "undefined" */ (); err != nil /* "no error here" */ {} |
| } |
| |
| // Use unqualified names for package-local objects. |
| type T struct{} |
| var _ int = T /* ERROR "value of type T" */ {} // use T in error message rather then errors.T |
| |
| // Don't report errors containing "invalid type" (issue #24182). |
| func _(x *missing /* ERROR "undefined: missing" */ ) { |
| x.m() // there shouldn't be an error here referring to *invalid type |
| } |