checker: skip checking `[required]` fields for struct update syntax (#10500)
parent
64f34f6d61
commit
751f2950ea
|
@ -929,7 +929,7 @@ pub fn (mut c Checker) struct_init(mut node ast.StructInit) ast.Type {
|
|||
}
|
||||
*/
|
||||
// Check for `[required]` struct attr
|
||||
if field.attrs.contains('required') && !node.is_short {
|
||||
if field.attrs.contains('required') && !node.is_short && !node.has_update_expr {
|
||||
mut found := false
|
||||
for init_field in node.fields {
|
||||
if field.name == init_field.name {
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
struct Fns {
|
||||
f1 fn () [required]
|
||||
f2 fn () [attr1; required]
|
||||
}
|
||||
|
||||
fn func() {
|
||||
}
|
||||
|
||||
fn test_struct_fields_storing_required_functions() {
|
||||
s := Fns{
|
||||
f1: func
|
||||
f2: func
|
||||
}
|
||||
|
||||
assert s.f1 == func
|
||||
assert s.f2 == func
|
||||
}
|
||||
|
||||
struct Data {
|
||||
v1 int [required]
|
||||
v2 int [required]
|
||||
}
|
||||
|
||||
fn test_required_fields() {
|
||||
data := Data{1, 2}
|
||||
assert data.v1 == 1
|
||||
data2 := Data{
|
||||
...data
|
||||
v1: 10
|
||||
}
|
||||
assert data.v2 == data2.v2
|
||||
}
|
|
@ -1,17 +0,0 @@
|
|||
struct Struct {
|
||||
f1 fn () [required]
|
||||
f2 fn () [attr1; required]
|
||||
}
|
||||
|
||||
fn func() {
|
||||
}
|
||||
|
||||
fn test_struct_fields_storing_required_functions() {
|
||||
s := Struct{
|
||||
f1: func
|
||||
f2: func
|
||||
}
|
||||
|
||||
assert s.f1 == func
|
||||
assert s.f2 == func
|
||||
}
|
Loading…
Reference in New Issue