Robert Griesemer has uploaded this change for review.
cmd/compile: 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
---
M src/cmd/compile/internal/types2/expr.go
M src/go/types/expr.go
M test/fixedbugs/issue17631.go
M test/fixedbugs/issue19482.go
M test/fixedbugs/issue24339.go
M test/fixedbugs/issue25727.go
6 files changed, 26 insertions(+), 15 deletions(-)
diff --git a/src/cmd/compile/internal/types2/expr.go b/src/cmd/compile/internal/types2/expr.go
index 3e82e4b..c700667 100644
--- a/src/cmd/compile/internal/types2/expr.go
+++ b/src/cmd/compile/internal/types2/expr.go
@@ -1418,11 +1418,7 @@
}
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]
diff --git a/src/go/types/expr.go b/src/go/types/expr.go
index 12f7394..ebb107b 100644
--- a/src/go/types/expr.go
+++ b/src/go/types/expr.go
@@ -1397,7 +1397,7 @@
}
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]
diff --git a/test/fixedbugs/issue17631.go b/test/fixedbugs/issue17631.go
index b820b2d..742b054 100644
--- a/test/fixedbugs/issue17631.go
+++ b/test/fixedbugs/issue17631.go
@@ -17,6 +17,6 @@
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.*"
}
}
diff --git a/test/fixedbugs/issue19482.go b/test/fixedbugs/issue19482.go
index ee0d340..b67dda5 100644
--- a/test/fixedbugs/issue19482.go
+++ b/test/fixedbugs/issue19482.go
@@ -22,13 +22,13 @@
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"
}
diff --git a/test/fixedbugs/issue24339.go b/test/fixedbugs/issue24339.go
index 2cca7f8..4d54e38 100644
--- a/test/fixedbugs/issue24339.go
+++ b/test/fixedbugs/issue24339.go
@@ -17,4 +17,4 @@
-// ERROR "unknown field 'foo'"
+// ERROR "unknown field foo"
diff --git a/test/fixedbugs/issue25727.go b/test/fixedbugs/issue25727.go
index 5599a83..06b2e2c 100644
--- a/test/fixedbugs/issue25727.go
+++ b/test/fixedbugs/issue25727.go
@@ -11,11 +11,11 @@
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"
To view, visit change 434815. To unsubscribe, or for help writing mail filters, visit settings.
Robert Griesemer uploaded patch set #2 to this change.
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
---
M src/cmd/compile/internal/types2/expr.go
M src/go/types/expr.go
M test/fixedbugs/issue17631.go
M test/fixedbugs/issue19482.go
M test/fixedbugs/issue24339.go
M test/fixedbugs/issue25727.go
6 files changed, 26 insertions(+), 15 deletions(-)
To view, visit change 434815. To unsubscribe, or for help writing mail filters, visit settings.
Attention is currently required from: Robert Findley, Robert Griesemer.
Patch set 2:Run-TryBot +1Auto-Submit +1Code-Review +1
Attention is currently required from: Robert Findley, Robert Griesemer.
Patch set 3:Run-TryBot +1Auto-Submit +1Code-Review +1
Attention is currently required from: Robert Griesemer, Robert Griesemer.
1 comment:
File test/fixedbugs/issue17631.go:
Patch Set #4, Line 20: field updates
Hmm, this is making me second guess the decision to remove quotes. In this case, it look like we're complaining about "field updates".
Worth a second thought?
To view, visit change 434815. To unsubscribe, or for help writing mail filters, visit settings.
Attention is currently required from: Robert Findley, Robert Griesemer.
Patch set 4:Code-Review +1
1 comment:
File test/fixedbugs/issue17631.go:
Patch Set #4, Line 20: field updates
Hmm, this is making me second guess the decision to remove quotes. […]
The same was true for "missing method Write" etc. One can always find a word that makes the error message appear odd. I'd suggest we leave this w/o quotes for now because it's consistent with what we do elsewhere. And then we should decide if we want to quote always, and everywhere.
To view, visit change 434815. To unsubscribe, or for help writing mail filters, visit settings.
Attention is currently required from: Robert Findley, Robert Griesemer.
Patch set 5:Run-TryBot +1Auto-Submit +1Code-Review +1
To view, visit change 434815. To unsubscribe, or for help writing mail filters, visit settings.
Attention is currently required from: Robert Griesemer, Robert Griesemer.
Patch set 5:Code-Review +2
1 comment:
File test/fixedbugs/issue17631.go:
Patch Set #4, Line 20: field updates
The same was true for "missing method Write" etc. […]
Sounds good.
To view, visit change 434815. To unsubscribe, or for help writing mail filters, visit settings.
Robert Griesemer submitted this change.
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 <rfin...@google.com>
Auto-Submit: Robert Griesemer <g...@google.com>
Run-TryBot: Robert Griesemer <g...@google.com>
Reviewed-by: Robert Griesemer <g...@google.com>
---
M src/cmd/compile/internal/types2/expr.go
M src/go/types/expr.go
M test/fixedbugs/issue17631.go
M test/fixedbugs/issue19482.go
M test/fixedbugs/issue24339.go
M test/fixedbugs/issue25727.go
6 files changed, 31 insertions(+), 15 deletions(-)
To view, visit change 434815. To unsubscribe, or for help writing mail filters, visit settings.