checker: fix "unnecessary `()`" error position
parent
cc4090cc74
commit
fa4739794f
|
@ -163,23 +163,23 @@ pub fn (c mut Checker) struct_decl(decl ast.StructDecl) {
|
|||
}
|
||||
c.error('struct name must begin with capital letter', pos)
|
||||
}
|
||||
|
||||
|
||||
for fi, _ in decl.fields {
|
||||
if decl.fields[fi].has_default_expr {
|
||||
c.expected_type = decl.fields[fi].typ
|
||||
field_expr_type := c.expr(decl.fields[fi].default_expr)
|
||||
if !c.table.check( field_expr_type, decl.fields[fi].typ ) {
|
||||
if !c.table.check( field_expr_type, decl.fields[fi].typ ) {
|
||||
field_expr_type_sym := c.table.get_type_symbol( field_expr_type )
|
||||
field_type_sym := c.table.get_type_symbol( decl.fields[fi].typ )
|
||||
field_name := decl.fields[fi].name
|
||||
fet_name := field_expr_type_sym.name
|
||||
ft_name := field_type_sym.name
|
||||
c.error('default expression for field `${field_name}` '+
|
||||
'has type `${fet_name}`, but should be `${ft_name}`',
|
||||
decl.fields[fi].default_expr.position()
|
||||
'has type `${fet_name}`, but should be `${ft_name}`',
|
||||
decl.fields[fi].default_expr.position()
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// && (p.tok.lit[0].is_capital() || is_c || (p.builtin_mod && Sp.tok.lit in table.builtin_type_names))
|
||||
}
|
||||
|
@ -1630,12 +1630,8 @@ pub fn (c mut Checker) if_expr(node mut ast.IfExpr) table.Type {
|
|||
}
|
||||
node.typ = table.void_type
|
||||
for i, branch in node.branches {
|
||||
match branch.cond {
|
||||
ast.ParExpr {
|
||||
c.error('unnecessary `()` in an if condition. use `if expr {` instead of `if (expr) {`.',
|
||||
node.pos)
|
||||
}
|
||||
else {}
|
||||
if branch.cond is ast.ParExpr {
|
||||
c.error('unnecessary `()` in an if condition. use `if expr {` instead of `if (expr) {`.', branch.pos)
|
||||
}
|
||||
typ := c.expr(branch.cond)
|
||||
if i < node.branches.len - 1 || !node.has_else {
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
vlib/v/checker/tests/inout/unnecessary_parenthesis.v:2:2: error: unnecessary `()` in an if condition. use `if expr {` instead of `if (expr) {`.
|
||||
1| fn main() {
|
||||
2| if (1 == 1) {
|
||||
~~~~~~~~~~~
|
||||
3| println('yeay')
|
||||
4| } else if (1 == 2) {
|
||||
vlib/v/checker/tests/inout/unnecessary_parenthesis.v:4:4: error: unnecessary `()` in an if condition. use `if expr {` instead of `if (expr) {`.
|
||||
2| if (1 == 1) {
|
||||
3| println('yeay')
|
||||
4| } else if (1 == 2) {
|
||||
~~~~~~~~~~~~~~~~
|
||||
5| println("oh no :'(")
|
||||
6| } else if (1 == 3) {
|
||||
vlib/v/checker/tests/inout/unnecessary_parenthesis.v:6:4: error: unnecessary `()` in an if condition. use `if expr {` instead of `if (expr) {`.
|
||||
4| } else if (1 == 2) {
|
||||
5| println("oh no :'(")
|
||||
6| } else if (1 == 3) {
|
||||
~~~~~~~~~~~~~~~~
|
||||
7| println("what's wrong with physics ????")
|
||||
8| }
|
|
@ -0,0 +1,9 @@
|
|||
fn main() {
|
||||
if (1 == 1) {
|
||||
println('yeay')
|
||||
} else if (1 == 2) {
|
||||
println("oh no :'(")
|
||||
} else if (1 == 3) {
|
||||
println("what's wrong with physics ????")
|
||||
}
|
||||
}
|
|
@ -13,7 +13,7 @@ fn (mut p Parser) if_expr() ast.IfExpr {
|
|||
mut has_else := false
|
||||
for p.tok.kind in [.key_if, .key_else] {
|
||||
p.inside_if = true
|
||||
branch_pos := p.tok.position()
|
||||
start_pos := p.tok.position()
|
||||
mut comment := ast.Comment{}
|
||||
if p.tok.kind == .key_if {
|
||||
p.check(.key_if)
|
||||
|
@ -28,9 +28,10 @@ fn (mut p Parser) if_expr() ast.IfExpr {
|
|||
} else {
|
||||
has_else = true
|
||||
p.inside_if = false
|
||||
end_pos := p.prev_tok.position()
|
||||
branches << ast.IfBranch{
|
||||
stmts: p.parse_block()
|
||||
pos: branch_pos
|
||||
pos: start_pos.extend(end_pos)
|
||||
comment: comment
|
||||
}
|
||||
break
|
||||
|
@ -56,6 +57,7 @@ fn (mut p Parser) if_expr() ast.IfExpr {
|
|||
} else {
|
||||
cond = p.expr(0)
|
||||
}
|
||||
end_pos := p.prev_tok.position()
|
||||
p.inside_if = false
|
||||
stmts := p.parse_block()
|
||||
if is_or {
|
||||
|
@ -64,7 +66,7 @@ fn (mut p Parser) if_expr() ast.IfExpr {
|
|||
branches << ast.IfBranch{
|
||||
cond: cond
|
||||
stmts: stmts
|
||||
pos: branch_pos
|
||||
pos: start_pos.extend(end_pos)
|
||||
comment: ast.Comment{}
|
||||
}
|
||||
if p.tok.kind != .key_else {
|
||||
|
|
Loading…
Reference in New Issue