vfmt: fmt '!(a in/is b)' to 'a !in/is b' (#11335)
parent
61ac7b671d
commit
f44eb88a8d
|
@ -551,8 +551,8 @@ fn test_in() {
|
|||
assert 1 in a
|
||||
assert 2 in a
|
||||
assert 3 in a
|
||||
assert !(4 in a)
|
||||
assert !(0 in a)
|
||||
assert 4 !in a
|
||||
assert 0 !in a
|
||||
assert 0 !in a
|
||||
assert 4 !in a
|
||||
b := [1, 4, 0]
|
||||
|
|
|
@ -2195,6 +2195,26 @@ pub fn (mut f Fmt) postfix_expr(node ast.PostfixExpr) {
|
|||
}
|
||||
|
||||
pub fn (mut f Fmt) prefix_expr(node ast.PrefixExpr) {
|
||||
// !(a in b) => a !in b, !(a is b) => a !is b
|
||||
if node.op == .not && node.right is ast.ParExpr {
|
||||
if node.right.expr is ast.InfixExpr {
|
||||
if node.right.expr.op in [.key_in, .not_in, .key_is, .not_is]
|
||||
&& node.right.expr.right !is ast.InfixExpr {
|
||||
f.expr(node.right.expr.left)
|
||||
if node.right.expr.op == .key_in {
|
||||
f.write(' !in ')
|
||||
} else if node.right.expr.op == .not_in {
|
||||
f.write(' in ')
|
||||
} else if node.right.expr.op == .key_is {
|
||||
f.write(' !is ')
|
||||
} else if node.right.expr.op == .not_is {
|
||||
f.write(' is ')
|
||||
}
|
||||
f.expr(node.right.expr.right)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
f.write(node.op.str())
|
||||
f.prefix_expr_cast_expr(node.right)
|
||||
f.or_expr(node.or_block)
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
struct Foo1 {}
|
||||
|
||||
struct Foo2 {}
|
||||
|
||||
type Foo = Foo1 | Foo2
|
||||
|
||||
fn main() {
|
||||
a := [1, 2, 3]
|
||||
if 4 !in a {
|
||||
println('4 not in a')
|
||||
}
|
||||
|
||||
foo := Foo(Foo1{})
|
||||
if foo !is Foo2 {
|
||||
println('foo is not Foo2')
|
||||
}
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
struct Foo1{}
|
||||
|
||||
struct Foo2{}
|
||||
|
||||
type Foo = Foo1 | Foo2
|
||||
|
||||
fn main() {
|
||||
a := [1, 2, 3]
|
||||
if !(4 in a) {
|
||||
println('4 not in a')
|
||||
}
|
||||
|
||||
foo := Foo(Foo1{})
|
||||
if !(foo is Foo2) {
|
||||
println('foo is not Foo2')
|
||||
}
|
||||
}
|
|
@ -537,8 +537,8 @@ fn main() {
|
|||
println(1 in a)
|
||||
println(2 in a)
|
||||
println(3 in a)
|
||||
println(!(4 in a))
|
||||
println(!(0 in a))
|
||||
println(4 !in a)
|
||||
println(0 !in a)
|
||||
println(0 !in a)
|
||||
println(4 !in a)
|
||||
b := [1, 4, 0]
|
||||
|
|
|
@ -553,7 +553,7 @@ fn sumtype_match_with_string_interpolation(code int) string {
|
|||
fn handle(e Expr) string {
|
||||
is_literal := e is IntegerLiteral
|
||||
assert is_literal
|
||||
assert !(e !is IntegerLiteral)
|
||||
assert e is IntegerLiteral
|
||||
if e is IntegerLiteral {
|
||||
assert typeof(e.val).name == 'string'
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue