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.});
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 ( ) ;
var file = try dir . openFile ( " zls.json " , . { . write = true } ) ;
defer file . close ( ) ;
const out = file . outStream ( ) ;
std . debug . warn ( " Writing to config... \n " , . { } ) ;
const content = std . json . stringify ( . {
. zig_lib_path = lib_path ,
. enable_snippets = snippets ,
. 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 } ) ;
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",
\\ "document_selector": "source.zig",
\\ "syntaxes": ["Packages/Zig/Syntaxes/Zig.tmLanguage"]
\\ }}
\\ }}
\\}}
, . { } ) ;
} ,
. 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 ( " \n You can find the ZLS executable in the \" zig-cache/bin \" by default. \n NOTE: Make sure that if you move the ZLS executable, you move the `zls.json` config file with it as well! \n \n And 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-07 16:29:40 +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 " , " \" " } ) ;
defer b . allocator . free ( data_version ) ;
exe . addBuildOption (
[ ] const u8 ,
" data_version " ,
data_version ,
) ;
2020-05-02 17:43:26 +01:00
2020-05-07 10:50:25 +01:00
exe . addBuildOption (
bool ,
2020-05-08 00:53:00 +01:00
" allocation_info " ,
b . option ( bool , " allocation_info " , " Enable use of debugging allocator and info logging. " ) orelse false ,
2020-05-07 10:50:25 +01:00
) ;
2020-05-25 01:22:39 +01:00
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 ( ) ;
2020-05-25 01:22:39 +01:00
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 = std.build.Step.init("config", b.allocator, config);
const configure_step = b . step ( " config " , " Configure zls " ) ;
configure_step . makeFn = config ;
2020-04-24 23:19:03 +01:00
}