diff --git a/src/features/semantic_tokens.zig b/src/features/semantic_tokens.zig index b79b090..69671b4 100644 --- a/src/features/semantic_tokens.zig +++ b/src/features/semantic_tokens.zig @@ -115,20 +115,36 @@ const Builder = struct { } } - fn addDirect(self: *Builder, token_type: TokenType, token_modifiers: TokenModifiers, loc: offsets.Loc) error{OutOfMemory}!void { + fn addDirect(self: *Builder, param_token_type: TokenType, token_modifiers: TokenModifiers, loc: offsets.Loc) error{OutOfMemory}!void { std.debug.assert(loc.start <= loc.end); if (loc.start < self.previous_source_index) return; + var token_type = param_token_type; switch (token_type) { .type, - .parameter, - .variable, .enumMember, .property, .errorTag, .function, - .label, + .namespace, + .@"struct", + .@"enum", => {}, - else => if (self.limited) return, + + .@"union", + .@"opaque", + => token_type = .type, + + .parameter, + .variable, + .keyword, + .comment, + .string, + .number, + .operator, + .builtin, + .label, + .keywordLiteral, + => if (self.limited) return, } const delta_text = self.handle.tree.source[self.previous_source_index..loc.start]; diff --git a/tests/lsp_features/semantic_tokens.zig b/tests/lsp_features/semantic_tokens.zig index 567af1c..8ed7f5a 100644 --- a/tests/lsp_features/semantic_tokens.zig +++ b/tests/lsp_features/semantic_tokens.zig @@ -568,7 +568,7 @@ test "semantic tokens - union" { \\const Foo = union {}; , &.{ .{ "const", .keyword, .{} }, - .{ "Foo", .@"union", .{ .declaration = true } }, + .{ "Foo", .type, .{ .declaration = true } }, .{ "=", .operator, .{} }, .{ "union", .keyword, .{} }, }); @@ -576,7 +576,7 @@ test "semantic tokens - union" { \\const Foo = packed union(enum) {}; , &.{ .{ "const", .keyword, .{} }, - .{ "Foo", .@"union", .{ .declaration = true } }, + .{ "Foo", .type, .{ .declaration = true } }, .{ "=", .operator, .{} }, .{ "packed", .keyword, .{} }, .{ "union", .keyword, .{} }, @@ -588,7 +588,7 @@ test "semantic tokens - union" { \\}; , &.{ .{ "const", .keyword, .{} }, - .{ "Foo", .@"union", .{ .declaration = true } }, + .{ "Foo", .type, .{ .declaration = true } }, .{ "=", .operator, .{} }, .{ "union", .keyword, .{} }, .{ "E", .variable, .{} }, @@ -601,7 +601,7 @@ test "semantic tokens - union" { \\}; , &.{ .{ "const", .keyword, .{} }, - .{ "Foo", .@"union", .{ .declaration = true } }, + .{ "Foo", .type, .{ .declaration = true } }, .{ "=", .operator, .{} }, .{ "union", .keyword, .{} }, .{ "E", .variable, .{} }, @@ -615,7 +615,7 @@ test "semantic tokens - union" { \\}; , &.{ .{ "const", .keyword, .{} }, - .{ "Foo", .@"union", .{ .declaration = true } }, + .{ "Foo", .type, .{ .declaration = true } }, .{ "=", .operator, .{} }, .{ "union", .keyword, .{} }, .{ "E", .variable, .{} }, @@ -688,7 +688,7 @@ test "semantic tokens - opaque" { \\const Foo = opaque {}; , &.{ .{ "const", .keyword, .{} }, - .{ "Foo", .@"opaque", .{ .declaration = true } }, + .{ "Foo", .type, .{ .declaration = true } }, .{ "=", .operator, .{} }, .{ "opaque", .keyword, .{} }, });