diff --git a/README.md b/README.md index 11f4f57..c0319d8 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,7 @@ Zig Language Server, or `zls`, is a language server for Zig. The Zig wiki states - [Usage](#usage) - [VSCode](#vscode) - [Sublime Text 3](#sublime-text-3) + - [Kate](#kate) - [Related Projects](#related-projects) - [License](#license) @@ -82,6 +83,23 @@ Install the `zls-vscode` extension from [here](https://github.com/zigtools/zls-v } ``` +### Kate + +- Enable `LSP client` plugin in Kate settings. +- Add this snippet to `LSP client's` user settings (e.g. /$HOME/.config/kate/lspclient) + (or paste it in `LSP client's` GUI settings) +```json +{ + "servers": { + "zig": { + "command": ["zls"], + "url": "https://github.com/zigtools/zls", + "highlightingModeRegex": "^Zig$" + } + } +} +``` + ## Related Projects - [`sublime-zig-language` by @prime31](https://github.com/prime31/sublime-zig-language) - Supports basic language features diff --git a/build.zig b/build.zig index f4d87e7..21e64c9 100644 --- a/build.zig +++ b/build.zig @@ -11,7 +11,7 @@ pub fn config(step: *std.build.Step) anyerror!void { std.debug.warn("Welcome to the ZLS configuration wizard! (insert mage emoji here)\n", .{}); // std.debug.warn("{}", .{dir.}); - + const lib_path = try zinput.askDirPath(builder.allocator, "What is your Zig lib path (path that contains the 'std' folder)?", 512); const snippets = try zinput.askBool("Do you want to enable snippets?"); const style = try zinput.askBool("Do you want to enable style warnings?"); @@ -25,18 +25,16 @@ pub fn config(step: *std.build.Step) anyerror!void { const out = file.outStream(); std.debug.warn("Writing to config...\n", .{}); - - const content = std.json.stringify(.{ + const content = std.json.stringify(.{ .zig_lib_path = lib_path, .enable_snippets = snippets, - .warn_style = style - + .warn_style = style, }, std.json.StringifyOptions{}, out); std.debug.warn("Successfully saved configuration options!\n", .{}); - const editor = try zinput.askSelectOne("Which code editor do you use?", enum { VSCode, Sublime, Other }); + const editor = try zinput.askSelectOne("Which code editor do you use?", enum { VSCode, Sublime, Kate, Other }); std.debug.warn("\n", .{}); switch (editor) { @@ -64,12 +62,28 @@ pub fn config(step: *std.build.Step) anyerror!void { \\}} , .{}); }, + .Kate => { + std.debug.warn( + \\To use ZLS in Kate, enable `LSP client` plugin in Kate settings. + \\Then, add the following snippet to `LSP client's` user settings: + \\(or paste it in `LSP client's` GUI settings) + \\{{ + \\ "servers": {{ + \\ "zig": {{ + \\ "command": ["zls"], + \\ "url": "https://github.com/zigtools/zls", + \\ "highlightingModeRegex": "^Zig$" + \\ }} + \\ }} + \\}} + , .{}); + }, .Other => { std.debug.warn( \\We might not *officially* support your editor, but you can definitely still use ZLS! \\Simply configure your editor for use with language servers and point it to the ZLS executable! , .{}); - } + }, } std.debug.warn("\nYou can find the ZLS executable in the \"zig-cache/bin\" by default.\nNOTE: Make sure that if you move the ZLS executable, you move the `zls.json` config file with it as well!\n\nAnd finally: Thanks for choosing ZLS!\n\n", .{}); @@ -89,7 +103,7 @@ pub fn build(b: *std.build.Builder) !void { const exe = b.addExecutable("zls", "src/main.zig"); - const data_version = try std.mem.concat(b.allocator, u8, &[3][]const u8{"\"", b.option([]const u8, "data_version", "The data version - either 0.6.0 or master.") orelse "0.6.0", "\""}); + const data_version = try std.mem.concat(b.allocator, u8, &[3][]const u8{ "\"", b.option([]const u8, "data_version", "The data version - either 0.6.0 or master.") orelse "0.6.0", "\"" }); defer b.allocator.free(data_version); exe.addBuildOption( []const u8, diff --git a/src/document_store.zig b/src/document_store.zig index 329530b..ed74dee 100644 --- a/src/document_store.zig +++ b/src/document_store.zig @@ -130,7 +130,7 @@ fn loadPackages(context: LoadPackagesContext) !void { } } }, - else => {}, + else => return error.RunFailed, } } @@ -178,8 +178,8 @@ fn newDocument(self: *DocumentStore, uri: []const u8, text: []u8) anyerror!*Hand .build_file = build_file, .allocator = self.allocator, .build_runner_path = self.build_runner_path, - }) catch { - std.debug.warn("Failed to load packages of build file {}\n", .{build_file.uri}); + }) catch |err| { + std.debug.warn("Failed to load packages of build file {} (error: {})\n", .{build_file.uri, err}); }; } else if (self.has_zig and !in_std) associate_build_file: { // Look into build files to see if we already have one that fits @@ -278,7 +278,6 @@ fn decrementCount(self: *DocumentStore, uri: []const u8) void { return; std.debug.warn("Freeing document: {}\n", .{uri}); - entry.value.tree.deinit(); self.allocator.free(entry.value.document.mem); @@ -288,11 +287,10 @@ fn decrementCount(self: *DocumentStore, uri: []const u8) void { } entry.value.import_uris.deinit(); - + self.allocator.destroy(entry.value); const uri_key = entry.key; self.handles.removeAssertDiscard(uri); self.allocator.free(uri_key); - self.allocator.destroy(entry.value); } } @@ -426,8 +424,8 @@ pub fn applyChanges( .build_file = build_file, .allocator = self.allocator, .build_runner_path = self.build_runner_path, - }) catch { - std.debug.warn("Failed to load packages of build file {}\n", .{build_file.uri}); + }) catch |err| { + std.debug.warn("Failed to load packages of build file {} (error: {})\n", .{build_file.uri, err}); }; } }