diff --git a/vlib/v/fmt/fmt.v b/vlib/v/fmt/fmt.v index 0b60ea15b0..86202835d0 100644 --- a/vlib/v/fmt/fmt.v +++ b/vlib/v/fmt/fmt.v @@ -438,6 +438,29 @@ fn (f mut Fmt) expr(node ast.Expr) { f.indent-- f.write('}') } + ast.MatchExpr { + f.write('match ') + f.expr(it.cond) + f.writeln(' {') + f.indent++ + for i, expr in it.match_exprs { + f.expr(expr) + f.writeln(' {') + f.stmts(it.blocks[i].stmts) + f.writeln('}') + } + + else_stmts := it.blocks[it.blocks.len - 1].stmts + if (else_stmts.len == 0) { + f.writeln('else {}') + } else { + f.writeln('else {') + f.stmts(else_stmts) + f.writeln('}') + } + f.indent-- + f.write('}') + } ast.MethodCallExpr { f.expr(it.expr) f.write('.' + it.name + '(') diff --git a/vlib/v/fmt/tests/simple_expected.vv b/vlib/v/fmt/tests/simple_expected.vv index 39d5b2478b..7a7b80562b 100644 --- a/vlib/v/fmt/tests/simple_expected.vv +++ b/vlib/v/fmt/tests/simple_expected.vv @@ -158,3 +158,27 @@ fn (f Foo) method_with_or() int { } return 20 } + +fn fn_with_match_expr() { + a := 10 + b := match a { + 10 { + 10 + } + 5 { + 5 + } + else { + 2 + } + } + match b { + 10 { + println('10') + } + 20 { + println('20') + } + else {} + } +} diff --git a/vlib/v/fmt/tests/simple_input.vv b/vlib/v/fmt/tests/simple_input.vv index 11e4e860a3..b2df23644e 100644 --- a/vlib/v/fmt/tests/simple_input.vv +++ b/vlib/v/fmt/tests/simple_input.vv @@ -158,3 +158,27 @@ fn (f Foo) method_with_or() int { } return 20 } + +fn fn_with_match_expr() { + a := 10 + b := match a { + 10 { + 10 + } + 5 { + 5 + } + else { + 2 + } + } + match b { + 10 { + println('10') + } + 20 { + println('20') + } + else {} + } +}