From b470780a37644d120e71a1c674c344d06085d4c2 Mon Sep 17 00:00:00 2001 From: kbkpbot Date: Wed, 5 Nov 2025 20:43:33 +0800 Subject: [PATCH] parser: fix infix expr comment in middle (fix #24183) (#25671) --- .../tests/infix_expr_with_comments_keep.vv | 25 +++++++++++++++++-- vlib/v/parser/expr.v | 5 ++-- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/vlib/v/fmt/tests/infix_expr_with_comments_keep.vv b/vlib/v/fmt/tests/infix_expr_with_comments_keep.vv index dc58ecdcf..a6069f405 100644 --- a/vlib/v/fmt/tests/infix_expr_with_comments_keep.vv +++ b/vlib/v/fmt/tests/infix_expr_with_comments_keep.vv @@ -2,8 +2,29 @@ fn main() { a := 4 // comment1 + 6 // comment2 - b := 5 + // comment2 + b := 5 + // comment3 6 - c := 4 + 6 // comment3 + c := 4 + 6 // comment4 + + var := 'a' // comment5 + + 'b' // comment6 + + 'c' // comment7 + + // vfmt off +pattern := r'^(' + + r'(\^|([<>]?=?))?' // match: ^, >, <, =, >=, <= + + r'((\*)|([0-9]+))' // match: *, 1 + + r'((\.?\*)|(\.[0-9]+))?' // match: *, .*, .1 + + r'((\.?\*)|(\.[0-9]+))?' // match: *, .*, .1 + + r'(-[0-9a-zA-Z.]+)?)' // match prerelease part e.g: -beta.1 + + r'|(\*)$' // match just '*' + // vfmt on + + pattern_fmt := r'^(' + r'(\^|([<>]?=?))?' // match: ^, >, <, =, >=, <= + + r'((\*)|([0-9]+))' // match: *, 1 + + r'((\.?\*)|(\.[0-9]+))?' // match: *, .*, .1 + + r'((\.?\*)|(\.[0-9]+))?' // match: *, .*, .1 + + r'(-[0-9a-zA-Z.]+)?)' // match prerelease part e.g: -beta.1 + + r'|(\*)$' // match just '*' } diff --git a/vlib/v/parser/expr.v b/vlib/v/parser/expr.v index 7eeb663a9..b90446f73 100644 --- a/vlib/v/parser/expr.v +++ b/vlib/v/parser/expr.v @@ -552,9 +552,8 @@ fn (mut p Parser) check_expr(precedence int) !ast.Expr { if p.inside_if_cond { p.if_cond_comments << p.eat_comments() } - if p.pref.is_fmt && p.tok.kind == .comment && p.peek_tok.kind.is_infix() && !p.inside_infix - && !p.inside_map_init && !(p.peek_tok.kind == .mul - && p.peek_tok.pos().line_nr != p.tok.pos().line_nr) { + if p.pref.is_fmt && p.tok.kind == .comment && p.peek_tok.kind.is_infix() && !p.inside_map_init + && !(p.peek_tok.kind == .mul && p.peek_tok.pos().line_nr != p.tok.pos().line_nr) { p.left_comments = p.eat_comments() } return p.expr_with_left(node, precedence, is_stmt_ident) -- 2.39.5