diff --git a/vlib/v/fmt/fmt.v b/vlib/v/fmt/fmt.v index b4a381fa27..b1142f9adf 100644 --- a/vlib/v/fmt/fmt.v +++ b/vlib/v/fmt/fmt.v @@ -88,7 +88,7 @@ fn (mut f Fmt) find_comment(line_nr int) { } */ pub fn (mut f Fmt) write(s string) { - if !f.buffering || f.is_inside_interp { + if !f.buffering { if f.indent > 0 && f.empty_line { if f.indent < tabs.len { f.out.write(tabs[f.indent]) @@ -153,6 +153,10 @@ fn (mut f Fmt) adjust_complete_line() { if f.penalties[j] <= 1 && f.precedences[j] == precedence { sub_expr_end_idx = j break + } else if f.precedences[j] < precedence { + // we cannot form a sensible subexpression + len_sub_expr = C.INT32_MAX + break } else { len_sub_expr += f.expr_bufs[j+1].len } diff --git a/vlib/v/fmt/tests/expressions_expected.vv b/vlib/v/fmt/tests/expressions_expected.vv index 12012374ab..bf91380f93 100644 --- a/vlib/v/fmt/tests/expressions_expected.vv +++ b/vlib/v/fmt/tests/expressions_expected.vv @@ -46,6 +46,10 @@ fn main() { if a + b + r * d + a + b + r * d > a + b + r * d + a * b + r { println('ok') } + v_str := 'v' + s := []string{} + s << ' `$v_str`' + println(s) } fn gen_str_for_multi_return(mut g gen.Gen, info table.MultiReturn, styp, str_fn_name string) { diff --git a/vlib/v/fmt/tests/expressions_input.vv b/vlib/v/fmt/tests/expressions_input.vv index 8ea6f5ab95..e20a7ce737 100644 --- a/vlib/v/fmt/tests/expressions_input.vv +++ b/vlib/v/fmt/tests/expressions_input.vv @@ -56,6 +56,10 @@ fn main() { a*b+r { println('ok') } + v_str := 'v' + s := []string{} + s << ' `$v_str`' + println(s) } fn gen_str_for_multi_return(mut g gen.Gen,