mirror of https://github.com/golang/go.git
cmd/compile: hint on wrong case-field names in composite literals
Improve the error message for wrong
case-field names in composite literals,
by mentioning the correct field name.
Given the program:
package main
type it struct {
ID string
}
func main() {
i1 := &it{id: "Bar"}
}
just like we do for usage of fields, we now
report wrongly cased fields as hints to give:
ts.go:8:14: unknown field 'id' in struct literal of type it (but does have ID)
instead of before:
ts.go:8:14: unknown field 'id' in struct literal of type it
Fixes #22794
Change-Id: I18cd70e75817025cb1df083503cae306e8d659fd
Reviewed-on: https://go-review.googlesource.com/78545
Run-TryBot: Emmanuel Odeke <emm.odeke@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
This commit is contained in:
parent
436f2d8d97
commit
5f29a7a705
|
|
@ -3105,7 +3105,11 @@ func typecheckcomplit(n *Node) *Node {
|
||||||
|
|
||||||
f := lookdot1(nil, l.Sym, t, t.Fields(), 0)
|
f := lookdot1(nil, l.Sym, t, t.Fields(), 0)
|
||||||
if f == nil {
|
if f == nil {
|
||||||
|
if ci := lookdot1(nil, l.Sym, t, t.Fields(), 2); ci != nil { // Case-insensitive lookup.
|
||||||
|
yyerror("unknown field '%v' in struct literal of type %v (but does have %v)", l.Sym, t, ci.Sym)
|
||||||
|
} else {
|
||||||
yyerror("unknown field '%v' in struct literal of type %v", l.Sym, t)
|
yyerror("unknown field '%v' in struct literal of type %v", l.Sym, t)
|
||||||
|
}
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
fielddup(f.Sym.Name, hash)
|
fielddup(f.Sym.Name, hash)
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,20 @@
|
||||||
|
// 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 Floats)"
|
||||||
|
}
|
||||||
|
i2 := &it{floats: false} // ERROR "(but does have Floats)"
|
||||||
|
_ = &it{InneR: "foo"} // ERROR "(but does have inner)"
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue