From 47846857697402791063defae5e0ab4b7612430c Mon Sep 17 00:00:00 2001 From: Felipe Pena Date: Sat, 14 Dec 2024 08:05:52 -0300 Subject: [PATCH] parser: allow `type` and other keywords as plain attr value (fix #23150) (#23154) --- vlib/v/fmt/tests/keyword_attr_keep.vv | 9 +++++++++ vlib/v/parser/parser.v | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) create mode 100644 vlib/v/fmt/tests/keyword_attr_keep.vv diff --git a/vlib/v/fmt/tests/keyword_attr_keep.vv b/vlib/v/fmt/tests/keyword_attr_keep.vv new file mode 100644 index 000000000..55ccf6ffa --- /dev/null +++ b/vlib/v/fmt/tests/keyword_attr_keep.vv @@ -0,0 +1,9 @@ +struct Type { + a int +} + +pub struct Token { + foo Type @[json: type] + bar Type @[fn; json: if] + baz Type @[for; json: while; spawn] +} diff --git a/vlib/v/parser/parser.v b/vlib/v/parser/parser.v index 79efa1421..3573dadcb 100644 --- a/vlib/v/parser/parser.v +++ b/vlib/v/parser/parser.v @@ -2045,7 +2045,7 @@ fn (mut p Parser) parse_attr(is_at bool) ast.Attr { if p.tok.kind == .colon { has_arg = true p.next() - if p.tok.kind == .name { // `name: arg` + if p.tok.kind == .name || (p.tok.kind != .string && token.is_key(p.tok.lit)) { // `name: arg` kind = .plain arg = p.check_name() } else if p.tok.kind == .number { // `name: 123` -- 2.39.5