From f4ab67f16337308517848344b1b59d18442bcc5a Mon Sep 17 00:00:00 2001 From: Techatrix Date: Wed, 26 Nov 2025 17:16:38 +0100 Subject: [PATCH] Update to Zig `0.16.0-dev.1458+755a3d957` or later --- README.md | 2 +- build.zig.zon | 2 +- src/basic_server.zig | 32 ++++++++------------------------ 3 files changed, 10 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index 48e1f78..fba6fcb 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ Provides the necessary building blocks to develop Language Server Protocol imple # Installation > [!NOTE] -> The default branch requires Zig `0.16.0-dev.1204+389368392` or later. Checkout the `0.15.x` branch when using Zig 0.15 +> The default branch requires Zig `0.16.0-dev.1458+755a3d957` or later. Checkout the `0.15.x` branch when using Zig 0.15 ```bash # Initialize a `zig build` project if you haven't already diff --git a/build.zig.zon b/build.zig.zon index b76f4e7..aadbe96 100644 --- a/build.zig.zon +++ b/build.zig.zon @@ -1,7 +1,7 @@ .{ .name = .lsp_kit, .version = "0.1.0", - .minimum_zig_version = "0.16.0-dev.1204+389368392", + .minimum_zig_version = "0.16.0-dev.1458+755a3d957", .dependencies = .{}, .paths = .{ "build.zig", diff --git a/src/basic_server.zig b/src/basic_server.zig index fe4300e..8e495b4 100644 --- a/src/basic_server.zig +++ b/src/basic_server.zig @@ -618,30 +618,14 @@ fn MessageType(comptime Handler: type) type { } } - var enum_fields: [methods.len + 1]std.builtin.Type.EnumField = undefined; - for (enum_fields[0 .. enum_fields.len - 1], methods, 0..) |*field, method, i| field.* = .{ .name = method, .value = i }; - enum_fields[methods.len] = .{ .name = "other", .value = methods.len }; - - const MethodEnum = @Type(.{ .@"enum" = .{ - .tag_type = std.math.IntFittingRange(0, methods.len), - .fields = &enum_fields, - .decls = &.{}, - .is_exhaustive = true, - } }); - - var union_fields: [methods.len + 1]std.builtin.Type.UnionField = undefined; - for (union_fields[0 .. union_fields.len - 1], methods) |*field, method| { - const field_type = lsp.ParamsType(method); - field.* = .{ .name = method, .type = field_type, .alignment = @alignOf(field_type) }; - } - union_fields[methods.len] = .{ .name = "other", .type = lsp.MethodWithParams, .alignment = @alignOf(lsp.MethodWithParams) }; - - Params.* = @Type(.{ .@"union" = .{ - .layout = .auto, - .tag_type = MethodEnum, - .fields = &union_fields, - .decls = &.{}, - } }); + const field_names: []const []const u8 = methods ++ .{"other"}; + var field_types: [methods.len + 1]type = undefined; + for (field_types[0 .. field_types.len - 1], methods) |*ty, method| ty.* = lsp.ParamsType(method); + field_types[methods.len] = lsp.MethodWithParams; + + const IntTag = std.math.IntFittingRange(0, methods.len); + const MethodEnum = @Enum(IntTag, .exhaustive, field_names, &std.simd.iota(IntTag, methods.len + 1)); + Params.* = @Union(.auto, MethodEnum, field_names, &field_types, &@splat(.{})); } return lsp.Message(RequestParams, NotificationParams, .{});