fmt: don't remove `mut` from `if mut` smart cast (#6188)
parent
06967d9297
commit
1b914d217e
|
@ -472,9 +472,10 @@ pub:
|
||||||
pos token.Position
|
pos token.Position
|
||||||
body_pos token.Position
|
body_pos token.Position
|
||||||
comments []Comment
|
comments []Comment
|
||||||
|
left_as_name string // `name` in `if cond is SumType as name`
|
||||||
|
mut_name bool // `if mut name is`
|
||||||
pub mut:
|
pub mut:
|
||||||
smartcast bool // should only be true if cond is `x is sumtype`, it will be set in checker - if_expr
|
smartcast bool // true when cond is `x is SumType`, set in checker.if_expr
|
||||||
left_as_name string // only used in x is SumType check
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct UnsafeExpr {
|
pub struct UnsafeExpr {
|
||||||
|
|
|
@ -1357,35 +1357,30 @@ pub fn (mut f Fmt) if_expr(it ast.IfExpr) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if i == 0 {
|
if i == 0 {
|
||||||
|
// first `if`
|
||||||
f.comments(branch.comments, {})
|
f.comments(branch.comments, {})
|
||||||
f.write('if ')
|
} else {
|
||||||
f.expr(branch.cond)
|
// `else`, close previous branch
|
||||||
if smartcast_as {
|
|
||||||
f.write(' as $branch.left_as_name')
|
|
||||||
}
|
|
||||||
f.write(' {')
|
|
||||||
} else if i < it.branches.len - 1 || !it.has_else {
|
|
||||||
if branch.comments.len > 0 {
|
if branch.comments.len > 0 {
|
||||||
f.writeln('}')
|
f.writeln('}')
|
||||||
f.comments(branch.comments, {})
|
f.comments(branch.comments, {})
|
||||||
} else {
|
} else {
|
||||||
f.write('} ')
|
f.write('} ')
|
||||||
}
|
}
|
||||||
f.write('else if ')
|
f.write('else ')
|
||||||
f.expr(branch.cond)
|
|
||||||
if smartcast_as {
|
|
||||||
f.write(' as $branch.left_as_name')
|
|
||||||
}
|
|
||||||
f.write(' {')
|
|
||||||
} else if i == it.branches.len - 1 && it.has_else {
|
|
||||||
if branch.comments.len > 0 {
|
|
||||||
f.writeln('}')
|
|
||||||
f.comments(branch.comments, {})
|
|
||||||
} else {
|
|
||||||
f.write('} ')
|
|
||||||
}
|
|
||||||
f.write('else {')
|
|
||||||
}
|
}
|
||||||
|
if i < it.branches.len - 1 || !it.has_else {
|
||||||
|
f.write('if ')
|
||||||
|
if branch.mut_name {
|
||||||
|
f.write('mut ')
|
||||||
|
}
|
||||||
|
f.expr(branch.cond)
|
||||||
|
if smartcast_as {
|
||||||
|
f.write(' as $branch.left_as_name')
|
||||||
|
}
|
||||||
|
f.write(' ')
|
||||||
|
}
|
||||||
|
f.write('{')
|
||||||
if single_line {
|
if single_line {
|
||||||
f.write(' ')
|
f.write(' ')
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
struct S1 {
|
struct S1 {
|
||||||
|
mut:
|
||||||
|
i int
|
||||||
}
|
}
|
||||||
|
|
||||||
struct S2 {
|
struct S2 {
|
||||||
|
@ -7,7 +9,8 @@ struct S2 {
|
||||||
type Sum = S1 | S2
|
type Sum = S1 | S2
|
||||||
|
|
||||||
fn f(sum Sum) {
|
fn f(sum Sum) {
|
||||||
if sum is S1 {
|
if mut sum is S1 {
|
||||||
|
sum.i++
|
||||||
}
|
}
|
||||||
if sum is S1 as s1 {
|
if sum is S1 as s1 {
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,15 +21,11 @@ fn (mut p Parser) if_expr() ast.IfExpr {
|
||||||
for p.tok.kind in [.key_if, .key_else] {
|
for p.tok.kind in [.key_if, .key_else] {
|
||||||
p.inside_if = true
|
p.inside_if = true
|
||||||
start_pos := p.tok.position()
|
start_pos := p.tok.position()
|
||||||
if p.tok.kind == .key_if {
|
if p.tok.kind == .key_else {
|
||||||
p.next()
|
|
||||||
} else {
|
|
||||||
comments << p.eat_comments()
|
comments << p.eat_comments()
|
||||||
p.check(.key_else)
|
p.check(.key_else)
|
||||||
comments << p.eat_comments()
|
comments << p.eat_comments()
|
||||||
if p.tok.kind == .key_if {
|
if p.tok.kind == .lcbr {
|
||||||
p.next()
|
|
||||||
} else {
|
|
||||||
// else {
|
// else {
|
||||||
has_else = true
|
has_else = true
|
||||||
p.inside_if = false
|
p.inside_if = false
|
||||||
|
@ -64,9 +60,18 @@ fn (mut p Parser) if_expr() ast.IfExpr {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// `if` or `else if`
|
||||||
|
p.check(.key_if)
|
||||||
|
comments << p.eat_comments()
|
||||||
|
// `if mut name is T`
|
||||||
|
mut mut_name := false
|
||||||
|
if p.tok.kind == .key_mut && p.peek_tok2.kind == .key_is {
|
||||||
|
mut_name = true
|
||||||
|
p.next()
|
||||||
|
comments << p.eat_comments()
|
||||||
|
}
|
||||||
mut cond := ast.Expr{}
|
mut cond := ast.Expr{}
|
||||||
mut is_guard := false
|
mut is_guard := false
|
||||||
comments << p.eat_comments()
|
|
||||||
// `if x := opt() {`
|
// `if x := opt() {`
|
||||||
if p.peek_tok.kind == .decl_assign {
|
if p.peek_tok.kind == .decl_assign {
|
||||||
p.open_scope()
|
p.open_scope()
|
||||||
|
@ -121,6 +126,7 @@ fn (mut p Parser) if_expr() ast.IfExpr {
|
||||||
body_pos: body_pos.extend(p.prev_tok.position())
|
body_pos: body_pos.extend(p.prev_tok.position())
|
||||||
comments: comments
|
comments: comments
|
||||||
left_as_name: left_as_name
|
left_as_name: left_as_name
|
||||||
|
mut_name: mut_name
|
||||||
}
|
}
|
||||||
comments = p.eat_comments()
|
comments = p.eat_comments()
|
||||||
if p.tok.kind != .key_else {
|
if p.tok.kind != .key_else {
|
||||||
|
|
Loading…
Reference in New Issue