]> Cypherpunks repositories - gostls13.git/commitdiff
go/types, types2: use "unknown field f in struct literal of type S" in error messages
authorRobert Griesemer <gri@golang.org>
Mon, 26 Sep 2022 19:47:41 +0000 (12:47 -0700)
committerRobert Griesemer <gri@google.com>
Tue, 27 Sep 2022 21:59:09 +0000 (21:59 +0000)
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>
src/cmd/compile/internal/types2/expr.go
src/go/types/expr.go
test/fixedbugs/issue17631.go
test/fixedbugs/issue19482.go
test/fixedbugs/issue24339.go
test/fixedbugs/issue25727.go

index 3e82e4bcca42c08ed26dc18afcbcf29d4f801c23..c700667034917fbf5abf5aceb4ed3dafbfababe3 100644 (file)
@@ -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]
index 12f73947fd6042d682f77fc0ee1959f570307d10..ebb107b8c0e4118e7440b2164056ff08a6119ae2 100644 (file)
@@ -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]
index b820b2d5a7508c83f04c29dad86fa553e818e6fb..742b054b34c36451f0758d8bcf31e7831f099bfe 100644 (file)
@@ -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.*"
        }
 }
index ee0d340aa3c50ac65bd6e0f21d7e505d8255df33..b67dda5a1f8ba433dd119e9cd002b05ec0062e67 100644 (file)
@@ -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"
 }
index 2cca7f8bda053e15c1be57da72785e101cce5b51..4d54e3877f60dc1de83080eea23b086c996a1cdf 100644 (file)
@@ -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"
index 5599a83dd02111d87120058c682f0e988dde0991..06b2e2cac7ddb9f95b379b4dcec9e69fb9cb10ca 100644 (file)
@@ -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"