checker: implement `[required]` struct field attribute (#6276)
parent
bd304f1141
commit
35cbca96e1
|
@ -180,7 +180,7 @@ fn (t TileLine) to_left() TileLine {
|
||||||
fn (b Board) to_left() Board {
|
fn (b Board) to_left() Board {
|
||||||
mut res := b
|
mut res := b
|
||||||
for y := 0; y < 4; y++ {
|
for y := 0; y < 4; y++ {
|
||||||
mut hline := TileLine{y}
|
mut hline := TileLine{ypos: y}
|
||||||
for x := 0; x < 4; x++ {
|
for x := 0; x < 4; x++ {
|
||||||
hline.field[x] = b.field[y][x]
|
hline.field[x] = b.field[y][x]
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,7 +36,7 @@ mut:
|
||||||
fn (mut a App) init() {
|
fn (mut a App) init() {
|
||||||
a.frame = 0
|
a.frame = 0
|
||||||
a.last = time.ticks()
|
a.last = time.ticks()
|
||||||
a.ps = particle.System{a.width, a.height}
|
a.ps = particle.System{width: a.width, height: a.height}
|
||||||
a.ps.init(particle.SystemConfig{
|
a.ps.init(particle.SystemConfig{
|
||||||
pool: 20000
|
pool: 20000
|
||||||
})
|
})
|
||||||
|
|
|
@ -480,6 +480,20 @@ pub fn (mut c Checker) struct_init(mut struct_init ast.StructInit) table.Type {
|
||||||
c.warn('reference field `${type_sym.source_name}.$field.name` must be initialized',
|
c.warn('reference field `${type_sym.source_name}.$field.name` must be initialized',
|
||||||
struct_init.pos)
|
struct_init.pos)
|
||||||
}
|
}
|
||||||
|
// Check for `[required]` struct attr
|
||||||
|
if field.attrs.contains('required') && !struct_init.is_short {
|
||||||
|
mut found := false
|
||||||
|
for init_field in struct_init.fields {
|
||||||
|
if field.name == init_field.name {
|
||||||
|
found = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if !found {
|
||||||
|
c.error('field `${type_sym.source_name}.$field.name` is required',
|
||||||
|
struct_init.pos)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {}
|
else {}
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
vlib/v/checker/tests/struct_required_field.vv:12:6: error: field `Abc.f3` is required
|
||||||
|
10 | f3: 789
|
||||||
|
11 | }
|
||||||
|
12 | _ = Abc{
|
||||||
|
| ~~~~
|
||||||
|
13 | f1: 123
|
||||||
|
14 | f2: 789
|
|
@ -0,0 +1,16 @@
|
||||||
|
struct Abc {
|
||||||
|
f1 int [required]
|
||||||
|
f2 int
|
||||||
|
f3 int [required]
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
_ = Abc{
|
||||||
|
f1: 123
|
||||||
|
f3: 789
|
||||||
|
}
|
||||||
|
_ = Abc{
|
||||||
|
f1: 123
|
||||||
|
f2: 789
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue