mirror of
https://github.com/golang/go
synced 2024-11-25 15:17:58 -07:00
f81e498673
This CL improves the error messages reported when a field or method name is used that doesn't exist. It brings the error messges on par (or better) with the respective errors reported before Go 1.18 (i.e. before switching to the new type checker): Make case distinctions based on whether a field/method is exported and how it is spelled. Factor out that logic into a new function (lookupError) in a new file (errsupport.go), which is generated for go/types. Use lookupError when reporting selector lookup errors and missing struct field keys. Add a comprehensive set of tests (lookup2.go) and spot tests for the two cases brought up by the issue at hand. Adjusted existing tests as needed. Fixes #49736. Change-Id: I2f439948dcd12f9bd1a258367862d8ff96e32305 Reviewed-on: https://go-review.googlesource.com/c/go/+/560055 Run-TryBot: Robert Griesemer <gri@google.com> TryBot-Result: Gopher Robot <gobot@golang.org> Reviewed-by: Robert Findley <rfindley@google.com> Reviewed-by: Robert Griesemer <gri@google.com>
22 lines
615 B
Go
22 lines
615 B
Go
// errorcheck
|
|
|
|
// Copyright 2017 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 main
|
|
|
|
type it struct {
|
|
Floats bool
|
|
inner string
|
|
}
|
|
|
|
func main() {
|
|
i1 := it{Floats: true}
|
|
if i1.floats { // ERROR "(type it .* field or method floats, but does have field Floats)|undefined field or method"
|
|
}
|
|
i2 := &it{floats: false} // ERROR "cannot refer to unexported field floats in struct literal|unknown field|declared and not used"
|
|
_ = &it{InneR: "foo"} // ERROR "(but does have field inner)|unknown field"
|
|
_ = i2
|
|
}
|