From 9f60a6d13b61511de6202bf96b4e85d1caae981e Mon Sep 17 00:00:00 2001 From: CJ van den Berg Date: Fri, 5 Apr 2024 19:14:43 +0200 Subject: [PATCH] feat: add language servers --- src/file_type.zig | 10 ++-------- src/file_types.zig | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/file_type.zig b/src/file_type.zig index 8a939c1..8e0ff4b 100644 --- a/src/file_type.zig +++ b/src/file_type.zig @@ -12,6 +12,7 @@ injections: ?[:0]const u8, first_line_matches: ?FirstLineMatch = null, comment: []const u8, formatter: ?[]const []const u8, +language_server: ?[]const []const u8, pub fn get_by_name(name: []const u8) ?*const FileType { for (file_types) |*file_type| @@ -81,14 +82,6 @@ const FirstLineMatch = struct { content: ?[]const u8 = null, }; -fn FormatterCmd(comptime args: anytype) []const []const u8 { - const cmd: []const []const u8 = &[_][]const u8{}; - inline for (args) |arg| { - cmd = cmd ++ arg; - } - return cmd; -} - pub const file_types = load_file_types(@import("file_types.zig")); fn vec(comptime args: anytype) []const []const u8 { @@ -123,6 +116,7 @@ fn load_file_types(comptime Namespace: type) []const FileType { .injections = if (@hasField(@TypeOf(args), "injections")) @embedFile(args.injections) else null, .first_line_matches = if (@hasField(@TypeOf(args), "first_line_matches")) args.first_line_matches else null, .formatter = if (@hasField(@TypeOf(args), "formatter")) vec(args.formatter) else null, + .language_server = if (@hasField(@TypeOf(args), "language_server")) vec(args.language_server) else null, }; i += 1; } diff --git a/src/file_types.zig b/src/file_types.zig index 4d17006..cc853cd 100644 --- a/src/file_types.zig +++ b/src/file_types.zig @@ -9,6 +9,7 @@ pub const bash = .{ .extensions = .{ "sh", "bash", ".profile" }, .comment = "#", .first_line_matches = .{ .prefix = "#!", .content = "sh" }, + .language_server = .{"bash-language-server"}, }; pub const c = .{ @@ -16,6 +17,7 @@ pub const c = .{ .extensions = .{ "c", "h" }, .comment = "//", .formatter = .{"clang-format"}, + .language_server = .{"clangd"}, }; pub const @"c-sharp" = .{ @@ -23,6 +25,7 @@ pub const @"c-sharp" = .{ .icon = "󰌛", .extensions = .{"cs"}, .comment = "//", + .language_server = .{ "omnisharp", "-lsp" }, }; pub const conf = .{ @@ -41,6 +44,7 @@ pub const cpp = .{ .comment = "//", .injections = "tree-sitter-cpp/queries/injections.scm", .formatter = .{"clang-format"}, + .language_server = .{"clangd"}, }; pub const css = .{ @@ -96,6 +100,7 @@ pub const go = .{ .icon = "󰟓", .extensions = .{"go"}, .comment = "//", + .language_server = .{"gopls"}, }; pub const haskell = .{ @@ -103,6 +108,7 @@ pub const haskell = .{ .icon = "󰲒", .extensions = .{"hs"}, .comment = "--", + .language_server = .{"haskell-language-server-wrapper"}, }; pub const html = .{ @@ -126,11 +132,13 @@ pub const javascript = .{ .extensions = .{"js"}, .comment = "//", .injections = "tree-sitter-javascript/queries/injections.scm", + .language_server = .{ "deno", "lsp" }, }; pub const json = .{ .extensions = .{"json"}, .comment = "//", + .language_server = .{ "deno", "lsp" }, }; pub const lua = .{ @@ -140,6 +148,7 @@ pub const lua = .{ .comment = "--", .injections = "tree-sitter-lua/queries/injections.scm", .first_line_matches = .{ .prefix = "--", .content = "lua" }, + .language_server = .{"lua-lsp"}, }; pub const make = .{ @@ -154,6 +163,7 @@ pub const markdown = .{ .comment = "