zls/build.zig

146 lines
5.6 KiB
Zig
Raw Normal View History

2020-05-02 17:43:26 +01:00
const std = @import("std");
2020-04-24 23:19:03 +01:00
const builtin = @import("builtin");
2020-05-25 22:12:08 +01:00
// const build_options = @import("build_options")
const zinput = @import("src/zinput/src/main.zig");
var builder: *std.build.Builder = undefined;
pub fn config(step: *std.build.Step) anyerror!void {
@setEvalBranchQuota(2500);
std.debug.warn("Welcome to the ZLS configuration wizard! (insert mage emoji here)\n", .{});
// std.debug.warn("{}", .{dir.});
2020-05-27 08:48:22 +01:00
2020-05-25 22:12:08 +01:00
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?");
var dir = try std.fs.cwd().openDir(builder.exe_dir, .{});
defer dir.close();
2020-05-28 02:14:27 +01:00
var file = try dir.createFile("zls.json", .{});
2020-05-25 22:12:08 +01:00
defer file.close();
const out = file.outStream();
std.debug.warn("Writing to config...\n", .{});
2020-05-27 08:48:22 +01:00
const content = std.json.stringify(.{
2020-05-25 22:12:08 +01:00
.zig_lib_path = lib_path,
.enable_snippets = snippets,
2020-05-27 08:48:22 +01:00
.warn_style = style,
2020-05-25 22:12:08 +01:00
}, std.json.StringifyOptions{}, out);
std.debug.warn("Successfully saved configuration options!\n", .{});
2020-05-27 08:48:22 +01:00
const editor = try zinput.askSelectOne("Which code editor do you use?", enum { VSCode, Sublime, Kate, Other });
2020-05-25 22:12:08 +01:00
std.debug.warn("\n", .{});
switch (editor) {
.VSCode => {
std.debug.warn(
\\To use ZLS in Visual Studio Code, install the 'ZLS for VSCode' extension.
\\Then, open VSCode's 'settings.json' file, and add `"zigLanguageClient.path": "[command_or_path_to_zls]"`.
, .{});
},
.Sublime => {
std.debug.warn(
\\To use ZLS in Sublime, install the `LSP` package from `https://github.com/sublimelsp/LSP/releases` or via Package Control.
\\Then, add the following snippet to `LSP`'s user settings:
\\
\\{{
\\ "clients": {{
\\ "zig": {{
\\ "command": ["zls"],
\\ "enabled": true,
\\ "languageId": "zig",
2020-05-26 11:06:13 +01:00
\\ "scopes": ["source.zig"],
2020-05-25 22:12:08 +01:00
\\ "syntaxes": ["Packages/Zig/Syntaxes/Zig.tmLanguage"]
\\ }}
\\ }}
\\}}
, .{});
},
2020-05-27 08:48:22 +01:00
.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$"
\\ }}
\\ }}
\\}}
, .{});
},
2020-05-25 22:12:08 +01:00
.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!
, .{});
2020-05-27 08:48:22 +01:00
},
2020-05-25 22:12:08 +01:00
}
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", .{});
}
2020-04-24 23:19:03 +01:00
2020-05-07 16:29:40 +01:00
pub fn build(b: *std.build.Builder) !void {
2020-05-25 22:12:08 +01:00
builder = b;
2020-04-24 23:19:03 +01:00
// Standard target options allows the person running `zig build` to choose
// what target to build for. Here we do not override the defaults, which
// means any target is allowed, and the default is native. Other options
// for restricting supported target set are available.
const target = b.standardTargetOptions(.{});
// Standard release options allow the person running `zig build` to select
// between Debug, ReleaseSafe, ReleaseFast, and ReleaseSmall.
const mode = b.standardReleaseOptions();
const exe = b.addExecutable("zls", "src/main.zig");
2020-05-27 08:48:22 +01:00
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", "\"" });
2020-05-07 16:29:40 +01:00
defer b.allocator.free(data_version);
exe.addBuildOption(
[]const u8,
"data_version",
data_version,
);
2020-05-02 17:43:26 +01:00
exe.addBuildOption(
bool,
"allocation_info",
b.option(bool, "allocation_info", "Enable use of debugging allocator and info logging.") orelse false,
);
exe.addPackage(.{ .name = "known-folders", .path = "src/known-folders/known-folders.zig" });
2020-04-24 23:19:03 +01:00
exe.setTarget(target);
exe.setBuildMode(mode);
exe.install();
b.installFile("src/special/build_runner.zig", "bin/build_runner.zig");
2020-04-24 23:19:03 +01:00
const run_cmd = exe.run();
run_cmd.step.dependOn(b.getInstallStep());
const run_step = b.step("run", "Run the app");
run_step.dependOn(&run_cmd.step);
2020-05-25 22:12:08 +01:00
const configure_step = b.step("config", "Configure zls");
configure_step.makeFn = config;
2020-05-27 19:58:35 +01:00
const test_step = b.step("test", "Run all the tests");
test_step.dependOn(&exe.step);
var unit_tests = b.addTest("tests/unit_tests.zig");
unit_tests.addPackage(.{ .name = "analysis", .path = "src/analysis.zig" });
unit_tests.addPackage(.{ .name = "types", .path = "src/types.zig" });
unit_tests.setBuildMode(.Debug);
test_step.dependOn(&unit_tests.step);
2020-04-24 23:19:03 +01:00
}