From bf6e90873fec62da6728fb2f1702e67cf4dfc555 Mon Sep 17 00:00:00 2001 From: Alexander Medvednikov Date: Wed, 25 Mar 2026 16:42:21 +0300 Subject: [PATCH] parser: fix line indication for channel push syntax error (fixes #23571) --- vlib/v/checker/tests/arrow_op_newline_stmt_err.out | 7 +++++++ vlib/v/checker/tests/arrow_op_newline_stmt_err.vv | 10 ++++++++++ vlib/v/parser/expr.v | 2 +- 3 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 vlib/v/checker/tests/arrow_op_newline_stmt_err.out create mode 100644 vlib/v/checker/tests/arrow_op_newline_stmt_err.vv diff --git a/vlib/v/checker/tests/arrow_op_newline_stmt_err.out b/vlib/v/checker/tests/arrow_op_newline_stmt_err.out new file mode 100644 index 000000000..3a673bf54 --- /dev/null +++ b/vlib/v/checker/tests/arrow_op_newline_stmt_err.out @@ -0,0 +1,7 @@ +vlib/v/checker/tests/arrow_op_newline_stmt_err.vv:7:2: error: expression evaluated but not used + 5 | ch <- false + 6 | } + 7 | <-ch + | ~~ + 8 | } + 9 | diff --git a/vlib/v/checker/tests/arrow_op_newline_stmt_err.vv b/vlib/v/checker/tests/arrow_op_newline_stmt_err.vv new file mode 100644 index 000000000..bcac6a33e --- /dev/null +++ b/vlib/v/checker/tests/arrow_op_newline_stmt_err.vv @@ -0,0 +1,10 @@ +fn main() { + ch := chan bool{} + write() or { + // keep the `or` block multiline so the receive starts on a later line + ch <- false + } + <-ch +} + +fn write() ! {} diff --git a/vlib/v/parser/expr.v b/vlib/v/parser/expr.v index 09930daf1..b33622efc 100644 --- a/vlib/v/parser/expr.v +++ b/vlib/v/parser/expr.v @@ -727,7 +727,7 @@ fn (mut p Parser) expr_with_left(left ast.Expr, precedence int, is_stmt_ident bo is_stmt: true } } else if p.tok.kind.is_infix() - && !(p.tok.kind in [.minus, .amp, .mul, .key_as, .key_in, .key_is] + && !(p.tok.kind in [.minus, .amp, .mul, .arrow, .key_as, .key_in, .key_is] && p.tok.line_nr != p.prev_tok.line_nr) { // continue on infix expr node = p.infix_expr(node) -- 2.39.5