| // 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 |
| 0 /* ERROR "0 \(untyped int 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 |
| |
| // variables |
| x /* ERROR "x \(variable of type int\) is not used" */ |
| |
| // values |
| 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 /* ERROR "0 .* is not used" */ |
| 0 /* ERROR 0 .* is not used */ |
| 0 // ERROR "0 .* is not used" |
| 0 // ERROR 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 undeclared */ (); 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 undeclared name: missing */ ) { |
| x.m() // there shouldn't be an error here referring to *invalid type |
| } |