mirror of
https://github.com/golang/go.git
synced 2025-05-05 15:43:04 +00:00
go/types, types2: use "unknown field f in struct literal of type S" in error messages
This is a compromise of the error reported by the compiler (quotes around field name removed) and the error reported by the type checkers (added mention of struct type). For #55326. Change-Id: Iac4fb5c717f17c6713e90d327d39e68d3be40074 Reviewed-on: https://go-review.googlesource.com/c/go/+/434815 Reviewed-by: Robert Findley <rfindley@google.com> Auto-Submit: Robert Griesemer <gri@google.com> Run-TryBot: Robert Griesemer <gri@google.com> Reviewed-by: Robert Griesemer <gri@google.com>
This commit is contained in:
parent
3b5188ed2c
commit
b16501c08b
@ -1418,11 +1418,7 @@ func (check *Checker) exprInternal(x *operand, e syntax.Expr, hint Type) exprKin
|
||||
}
|
||||
i := fieldIndex(utyp.fields, check.pkg, key.Value)
|
||||
if i < 0 {
|
||||
if check.conf.CompilerErrorMessages {
|
||||
check.errorf(kv.Key, _MissingLitField, "unknown field '%s' in struct literal of type %s", key.Value, base)
|
||||
} else {
|
||||
check.errorf(kv.Key, _MissingLitField, "unknown field %s in struct literal", key.Value)
|
||||
}
|
||||
check.errorf(kv.Key, _MissingLitField, "unknown field %s in struct literal of type %s", key.Value, base)
|
||||
continue
|
||||
}
|
||||
fld := fields[i]
|
||||
|
@ -1397,7 +1397,7 @@ func (check *Checker) exprInternal(x *operand, e ast.Expr, hint Type) exprKind {
|
||||
}
|
||||
i := fieldIndex(utyp.fields, check.pkg, key.Name)
|
||||
if i < 0 {
|
||||
check.errorf(kv, _MissingLitField, "unknown field %s in struct literal", key.Name)
|
||||
check.errorf(kv, _MissingLitField, "unknown field %s in struct literal of type %s", key.Name, base)
|
||||
continue
|
||||
}
|
||||
fld := fields[i]
|
||||
|
@ -17,6 +17,6 @@ func main() {
|
||||
expect map[string]int
|
||||
}{
|
||||
about: "this one",
|
||||
updates: map[string]int{"gopher": 10}, // ERROR "unknown field 'updates' in struct literal of type|unknown field .*updates.* in .*unnamed struct.*"
|
||||
updates: map[string]int{"gopher": 10}, // ERROR "unknown field updates in struct literal of type|unknown field .*updates.* in .*unnamed struct.*"
|
||||
}
|
||||
}
|
||||
|
@ -22,13 +22,13 @@ func ok() {
|
||||
|
||||
var (
|
||||
y = T{"stare"}
|
||||
w = T{_: "look"} // ERROR "invalid field name _ in struct initializer|expected struct field name|unknown field '_' in struct literal of type T"
|
||||
w = T{_: "look"} // ERROR "invalid field name _ in struct initializer|expected struct field name|unknown field _ in struct literal of type T"
|
||||
_ = T{"page"}
|
||||
_ = T{_: "out"} // ERROR "invalid field name _ in struct initializer|expected struct field name|unknown field '_' in struct literal of type T"
|
||||
_ = T{_: "out"} // ERROR "invalid field name _ in struct initializer|expected struct field name|unknown field _ in struct literal of type T"
|
||||
)
|
||||
|
||||
func bad() {
|
||||
var z = T{_: "verse"} // ERROR "invalid field name _ in struct initializer|expected struct field name|unknown field '_' in struct literal of type T"
|
||||
var z = T{_: "verse"} // ERROR "invalid field name _ in struct initializer|expected struct field name|unknown field _ in struct literal of type T"
|
||||
_ = z
|
||||
_ = T{_: "itinerary"} // ERROR "invalid field name _ in struct initializer|expected struct field name|unknown field '_' in struct literal of type T"
|
||||
_ = T{_: "itinerary"} // ERROR "invalid field name _ in struct initializer|expected struct field name|unknown field _ in struct literal of type T"
|
||||
}
|
||||
|
@ -17,4 +17,4 @@ var _ = struct{}{ /*line :20:1*/foo /*line :21:1*/: /*line :22:1*/0 }
|
||||
|
||||
|
||||
|
||||
// ERROR "unknown field 'foo'"
|
||||
// ERROR "unknown field foo"
|
||||
|
@ -11,11 +11,11 @@ import "net/http"
|
||||
var s = http.Server{}
|
||||
var _ = s.doneChan // ERROR "s.doneChan undefined .cannot refer to unexported field or method doneChan.$|unexported field or method|s.doneChan undefined"
|
||||
var _ = s.DoneChan // ERROR "s.DoneChan undefined .type http.Server has no field or method DoneChan.$|undefined field or method"
|
||||
var _ = http.Server{tlsConfig: nil} // ERROR "unknown field 'tlsConfig' in struct literal.+ .but does have TLSConfig.$|unknown field .?tlsConfig.? in .?http.Server|unknown field"
|
||||
var _ = http.Server{DoneChan: nil} // ERROR "unknown field 'DoneChan' in struct literal of type http.Server$|unknown field .?DoneChan.? in .?http.Server"
|
||||
var _ = http.Server{tlsConfig: nil} // ERROR "unknown field tlsConfig in struct literal.+ .but does have TLSConfig.$|unknown field .?tlsConfig.? in .?http.Server|unknown field"
|
||||
var _ = http.Server{DoneChan: nil} // ERROR "unknown field DoneChan in struct literal of type http.Server$|unknown field .?DoneChan.? in .?http.Server"
|
||||
|
||||
type foo struct {
|
||||
bar int
|
||||
}
|
||||
|
||||
var _ = &foo{bAr: 10} // ERROR "unknown field 'bAr' in struct literal.+ .but does have bar.$|unknown field .?bAr.? in .?foo|unknown field"
|
||||
var _ = &foo{bAr: 10} // ERROR "unknown field bAr in struct literal.+ .but does have bar.$|unknown field .?bAr.? in .?foo|unknown field"
|
||||
|
Loading…
x
Reference in New Issue
Block a user