From d9965c78345ee914427557cd5c7aceea66aea7d8 Mon Sep 17 00:00:00 2001 From: Techatrix <19954306+Techatrix@users.noreply.github.com> Date: Thu, 30 Mar 2023 14:00:09 +0200 Subject: [PATCH] fix semantic tokens on if capture by ref --- src/features/semantic_tokens.zig | 6 ++++-- tests/lsp_features/semantic_tokens.zig | 10 ++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/features/semantic_tokens.zig b/src/features/semantic_tokens.zig index a22c305..410111c 100644 --- a/src/features/semantic_tokens.zig +++ b/src/features/semantic_tokens.zig @@ -516,8 +516,10 @@ fn writeNodeTokens(builder: *Builder, node: Ast.Node.Index) error{OutOfMemory}!v try writeToken(builder, if_node.ast.if_token, .keyword); try callWriteNodeTokens(allocator, .{ builder, if_node.ast.cond_expr }); - if (if_node.payload_token) |payload| { - try writeTokenMod(builder, payload, .variable, .{ .declaration = true }); + if (if_node.payload_token) |payload_token| { + const capture_is_ref = token_tags[payload_token] == .asterisk; + const actual_payload = payload_token + @boolToInt(capture_is_ref); + try writeTokenMod(builder, actual_payload, .variable, .{ .declaration = true }); } try callWriteNodeTokens(allocator, .{ builder, if_node.ast.then_expr }); diff --git a/tests/lsp_features/semantic_tokens.zig b/tests/lsp_features/semantic_tokens.zig index 4363ec7..9977509 100644 --- a/tests/lsp_features/semantic_tokens.zig +++ b/tests/lsp_features/semantic_tokens.zig @@ -808,6 +808,16 @@ test "semantic tokens - if" { .{ "err", .variable, .{ .declaration = true } }, .{ "err", .variable, .{} }, }); + try testSemanticTokens( + \\const foo = if (null) |*value| {}; + , &.{ + .{ "const", .keyword, .{} }, + .{ "foo", .variable, .{ .declaration = true } }, + .{ "=", .operator, .{} }, + .{ "if", .keyword, .{} }, + .{ "null", .keywordLiteral, .{} }, + .{ "value", .variable, .{ .declaration = true } }, + }); } test "semantic tokens - while" {