Merge branch 'master' of https://github.com/SuperAuguste/zls into new_pos_context

This commit is contained in:
Alexandros Naskos 2020-05-27 13:47:12 +03:00
commit 54f3590b6d
3 changed files with 46 additions and 16 deletions

View File

@ -13,6 +13,7 @@ Zig Language Server, or `zls`, is a language server for Zig. The Zig wiki states
- [Usage](#usage) - [Usage](#usage)
- [VSCode](#vscode) - [VSCode](#vscode)
- [Sublime Text 3](#sublime-text-3) - [Sublime Text 3](#sublime-text-3)
- [Kate](#kate)
- [Related Projects](#related-projects) - [Related Projects](#related-projects)
- [License](#license) - [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 ## Related Projects
- [`sublime-zig-language` by @prime31](https://github.com/prime31/sublime-zig-language) - [`sublime-zig-language` by @prime31](https://github.com/prime31/sublime-zig-language)
- Supports basic language features - Supports basic language features

View File

@ -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("Welcome to the ZLS configuration wizard! (insert mage emoji here)\n", .{});
// std.debug.warn("{}", .{dir.}); // 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 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 snippets = try zinput.askBool("Do you want to enable snippets?");
const style = try zinput.askBool("Do you want to enable style warnings?"); 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(); const out = file.outStream();
std.debug.warn("Writing to config...\n", .{}); std.debug.warn("Writing to config...\n", .{});
const content = std.json.stringify(.{
const content = std.json.stringify(.{
.zig_lib_path = lib_path, .zig_lib_path = lib_path,
.enable_snippets = snippets, .enable_snippets = snippets,
.warn_style = style .warn_style = style,
}, std.json.StringifyOptions{}, out); }, std.json.StringifyOptions{}, out);
std.debug.warn("Successfully saved configuration options!\n", .{}); 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", .{}); std.debug.warn("\n", .{});
switch (editor) { 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 => { .Other => {
std.debug.warn( std.debug.warn(
\\We might not *officially* support your editor, but you can definitely still use ZLS! \\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! \\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", .{}); 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 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); defer b.allocator.free(data_version);
exe.addBuildOption( exe.addBuildOption(
[]const u8, []const u8,

View File

@ -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, .build_file = build_file,
.allocator = self.allocator, .allocator = self.allocator,
.build_runner_path = self.build_runner_path, .build_runner_path = self.build_runner_path,
}) catch { }) catch |err| {
std.debug.warn("Failed to load packages of build file {}\n", .{build_file.uri}); 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: { } else if (self.has_zig and !in_std) associate_build_file: {
// Look into build files to see if we already have one that fits // 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; return;
std.debug.warn("Freeing document: {}\n", .{uri}); std.debug.warn("Freeing document: {}\n", .{uri});
entry.value.tree.deinit(); entry.value.tree.deinit();
self.allocator.free(entry.value.document.mem); self.allocator.free(entry.value.document.mem);
@ -288,11 +287,10 @@ fn decrementCount(self: *DocumentStore, uri: []const u8) void {
} }
entry.value.import_uris.deinit(); entry.value.import_uris.deinit();
self.allocator.destroy(entry.value);
const uri_key = entry.key; const uri_key = entry.key;
self.handles.removeAssertDiscard(uri); self.handles.removeAssertDiscard(uri);
self.allocator.free(uri_key); self.allocator.free(uri_key);
self.allocator.destroy(entry.value);
} }
} }
@ -426,8 +424,8 @@ pub fn applyChanges(
.build_file = build_file, .build_file = build_file,
.allocator = self.allocator, .allocator = self.allocator,
.build_runner_path = self.build_runner_path, .build_runner_path = self.build_runner_path,
}) catch { }) catch |err| {
std.debug.warn("Failed to load packages of build file {}\n", .{build_file.uri}); std.debug.warn("Failed to load packages of build file {} (error: {})\n", .{build_file.uri, err});
}; };
} }
} }