Skip to content

Commit f5423ed

Browse files
authored
checker: fix warning of unnnecessary default none value for option struct fields (#17305)
1 parent 039c9b2 commit f5423ed

File tree

3 files changed

+61
-34
lines changed

3 files changed

+61
-34
lines changed

vlib/v/checker/struct.v

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -161,20 +161,35 @@ fn (mut c Checker) struct_decl(mut node ast.StructDecl) {
161161
}
162162
}
163163
}
164-
if field.default_expr is ast.IntegerLiteral {
165-
if field.default_expr.val == '0' {
166-
c.warn('unnecessary default value of `0`: struct fields are zeroed by default',
167-
field.default_expr.pos)
168-
}
169-
} else if field.default_expr is ast.StringLiteral {
170-
if field.default_expr.val == '' {
171-
c.warn("unnecessary default value of '': struct fields are zeroed by default",
164+
165+
if field.typ.has_flag(.option) {
166+
if field.default_expr is ast.None {
167+
c.warn('unnecessary default value of `none`: struct fields are zeroed by default',
172168
field.default_expr.pos)
173169
}
174-
} else if field.default_expr is ast.BoolLiteral {
175-
if field.default_expr.val == false {
176-
c.warn('unnecessary default value `false`: struct fields are zeroed by default',
177-
field.default_expr.pos)
170+
} else if field.typ.has_flag(.result) {
171+
// struct field does not support result. Nothing to do
172+
} else {
173+
match field.default_expr {
174+
ast.IntegerLiteral {
175+
if field.default_expr.val == '0' {
176+
c.warn('unnecessary default value of `0`: struct fields are zeroed by default',
177+
field.default_expr.pos)
178+
}
179+
}
180+
ast.StringLiteral {
181+
if field.default_expr.val == '' {
182+
c.warn("unnecessary default value of '': struct fields are zeroed by default",
183+
field.default_expr.pos)
184+
}
185+
}
186+
ast.BoolLiteral {
187+
if field.default_expr.val == false {
188+
c.warn('unnecessary default value `false`: struct fields are zeroed by default',
189+
field.default_expr.pos)
190+
}
191+
}
192+
else {}
178193
}
179194
}
180195
}
Lines changed: 26 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,27 @@
1-
vlib/v/checker/tests/struct_unneeded_default.vv:2:10: warning: unnecessary default value of `0`: struct fields are zeroed by default
1+
vlib/v/checker/tests/struct_unneeded_default.vv:2:18: warning: unnecessary default value of `0`: struct fields are zeroed by default
22
1 | struct Test {
3-
2 | n int = 0
4-
| ^
5-
3 | s string = ''
6-
4 | b bool = false
7-
vlib/v/checker/tests/struct_unneeded_default.vv:3:13: warning: unnecessary default value of '': struct fields are zeroed by default
8-
1 | struct Test {
9-
2 | n int = 0
10-
3 | s string = ''
11-
| ~~
12-
4 | b bool = false
13-
5 | }
14-
vlib/v/checker/tests/struct_unneeded_default.vv:4:11: warning: unnecessary default value `false`: struct fields are zeroed by default
15-
2 | n int = 0
16-
3 | s string = ''
17-
4 | b bool = false
18-
| ~~~~~
19-
5 | }
20-
6 |
3+
2 | n int = 0
4+
| ^
5+
3 | n_ok int = 1
6+
4 | s string = ''
7+
vlib/v/checker/tests/struct_unneeded_default.vv:4:18: warning: unnecessary default value of '': struct fields are zeroed by default
8+
2 | n int = 0
9+
3 | n_ok int = 1
10+
4 | s string = ''
11+
| ~~
12+
5 | s_ok string = 's'
13+
6 | b bool = false
14+
vlib/v/checker/tests/struct_unneeded_default.vv:6:18: warning: unnecessary default value `false`: struct fields are zeroed by default
15+
4 | s string = ''
16+
5 | s_ok string = 's'
17+
6 | b bool = false
18+
| ~~~~~
19+
7 | b_ok bool = true
20+
8 | opt ?int = none
21+
vlib/v/checker/tests/struct_unneeded_default.vv:8:18: warning: unnecessary default value of `none`: struct fields are zeroed by default
22+
6 | b bool = false
23+
7 | b_ok bool = true
24+
8 | opt ?int = none
25+
| ~~~~
26+
9 | opt_ok ?int = 1
27+
10 | }

vlib/v/checker/tests/struct_unneeded_default.vv

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
struct Test {
2-
n int = 0
3-
s string = ''
4-
b bool = false
2+
n int = 0
3+
n_ok int = 1
4+
s string = ''
5+
s_ok string = 's'
6+
b bool = false
7+
b_ok bool = true
8+
opt ?int = none
9+
opt_ok ?int = 1
510
}
611

712
fn main() {

0 commit comments

Comments
 (0)