Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

select build on save step #1679

Merged
merged 4 commits into from
Dec 23, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ The following options are currently available.
| `enable_argument_placeholders` | `bool` | `true` | Whether to enable function argument placeholder completions |
| `enable_ast_check_diagnostics` | `bool` | `true` | Whether to enable ast-check diagnostics |
| `enable_build_on_save` | `bool` | `false` | Whether to enable build-on-save diagnostics |
| `build_on_save_step` | `[]const u8` | `"install"` | Select which step should be executed on build-on-save |
| `enable_autofix` | `bool` | `false` | Whether to automatically fix errors on save. Currently supports adding and removing discards. |
| `semantic_tokens` | `enum` | `.full` | Set level of semantic tokens. Partial only includes information that requires semantic analysis. |
| `enable_inlay_hints` | `bool` | `true` | Enables inlay hint support when the client also supports it |
Expand Down
59 changes: 32 additions & 27 deletions schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,27 +7,32 @@
"enable_snippets": {
"description": "Enables snippet completions when the client also supports them",
"type": "boolean",
"default": "true"
"default": true
},
"enable_argument_placeholders": {
"description": "Whether to enable function argument placeholder completions",
"type": "boolean",
"default": "true"
"default": true
},
"enable_ast_check_diagnostics": {
"description": "Whether to enable ast-check diagnostics",
"type": "boolean",
"default": "true"
"default": true
},
"enable_build_on_save": {
"description": "Whether to enable build-on-save diagnostics",
"type": "boolean",
"default": "false"
"default": false
},
"build_on_save_step": {
"description": "Select which step should be executed on build-on-save",
"type": "string",
"default": "install"
},
"enable_autofix": {
"description": "Whether to automatically fix errors on save. Currently supports adding and removing discards.",
"type": "boolean",
"default": "false"
"default": false
},
"semantic_tokens": {
"description": "Set level of semantic tokens. Partial only includes information that requires semantic analysis.",
Expand All @@ -42,112 +47,112 @@
"enable_inlay_hints": {
"description": "Enables inlay hint support when the client also supports it",
"type": "boolean",
"default": "true"
"default": true
},
"inlay_hints_show_variable_type_hints": {
"description": "Enable inlay hints for variable types",
"type": "boolean",
"default": "true"
"default": true
},
"inlay_hints_show_parameter_name": {
"description": "Enable inlay hints for parameter names",
"type": "boolean",
"default": "true"
"default": true
},
"inlay_hints_show_builtin": {
"description": "Enable inlay hints for builtin functions",
"type": "boolean",
"default": "true"
"default": true
},
"inlay_hints_exclude_single_argument": {
"description": "Don't show inlay hints for single argument calls",
"type": "boolean",
"default": "true"
"default": true
},
"inlay_hints_hide_redundant_param_names": {
"description": "Hides inlay hints when parameter name matches the identifier (e.g. foo: foo)",
"type": "boolean",
"default": "false"
"default": false
},
"inlay_hints_hide_redundant_param_names_last_token": {
"description": "Hides inlay hints when parameter name matches the last token of a parameter node (e.g. foo: bar.foo, foo: &foo)",
"type": "boolean",
"default": "false"
"default": false
},
"warn_style": {
"description": "Enables warnings for style guideline mismatches",
"type": "boolean",
"default": "false"
"default": false
},
"highlight_global_var_declarations": {
"description": "Whether to highlight global var declarations",
"type": "boolean",
"default": "false"
"default": false
},
"dangerous_comptime_experiments_do_not_enable": {
"description": "Whether to use the comptime interpreter",
"type": "boolean",
"default": "false"
"default": false
},
"skip_std_references": {
"description": "When true, skips searching for references in std. Improves lookup speed for functions in user's code. Renaming and go-to-definition will continue to work as is",
"type": "boolean",
"default": "false"
"default": false
},
"prefer_ast_check_as_child_process": {
"description": "Can be used in conjuction with `enable_ast_check_diagnostics` to favor using `zig ast-check` instead of ZLS's fork",
"type": "boolean",
"default": "true"
"default": true
},
"record_session": {
"description": "When true, zls will record all request is receives and write in into `record_session_path`, so that they can replayed with `zls replay`",
"type": "boolean",
"default": "false"
"default": false
},
"record_session_path": {
"description": "Output file path when `record_session` is set. The recommended file extension *.zlsreplay",
"type": "string",
"default": "null"
"default": null
},
"replay_session_path": {
"description": "Used when calling `zls replay` for specifying the replay file. If no extra argument is given `record_session_path` is used as the default path.",
"type": "string",
"default": "null"
"default": null
},
"builtin_path": {
"description": "Path to 'builtin;' useful for debugging, automatically set if let null",
"type": "string",
"default": "null"
"default": null
},
"zig_lib_path": {
"description": "Zig library path, e.g. `/path/to/zig/lib/zig`, used to analyze std library imports",
"type": "string",
"default": "null"
"default": null
},
"zig_exe_path": {
"description": "Zig executable path, e.g. `/path/to/zig/zig`, used to run the custom build runner. If `null`, zig is looked up in `PATH`. Will be used to infer the zig standard library path if none is provided",
"type": "string",
"default": "null"
"default": null
},
"build_runner_path": {
"description": "Path to the `build_runner.zig` file provided by zls. null is equivalent to `${executable_directory}/build_runner.zig`",
"type": "string",
"default": "null"
"default": null
},
"global_cache_path": {
"description": "Path to a directory that will be used as zig's cache. null is equivalent to `${KnownFolders.Cache}/zls`",
"type": "string",
"default": "null"
"default": null
},
"build_runner_global_cache_path": {
"description": "Path to a directory that will be used as the global cache path when executing a projects build.zig. null is equivalent to the path shown by `zig env`",
"type": "string",
"default": "null"
"default": null
},
"completions_with_replace": {
"description": "Completions confirm behavior. If 'true', replace the text after the cursor",
"type": "boolean",
"default": "true"
"default": true
}
}
}
3 changes: 3 additions & 0 deletions src/Config.zig
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,9 @@ enable_ast_check_diagnostics: bool = true,
/// Whether to enable build-on-save diagnostics
enable_build_on_save: bool = false,

/// Select which step should be executed on build-on-save
build_on_save_step: []const u8 = "install",

/// Whether to automatically fix errors on save. Currently supports adding and removing discards.
enable_autofix: bool = false,

Expand Down
34 changes: 22 additions & 12 deletions src/Server.zig
Original file line number Diff line number Diff line change
Expand Up @@ -850,18 +850,28 @@

inline for (std.meta.fields(Config)) |field| {
if (@field(new_cfg, field.name)) |new_config_value| {
if (@TypeOf(new_config_value) == []const u8) {
if (@field(server.config, field.name) == null or
!std.mem.eql(u8, @field(server.config, field.name).?, new_config_value))
{
log.info("set config option '{s}' to '{s}'", .{ field.name, new_config_value });
@field(server.config, field.name) = try config_arena.dupe(u8, new_config_value);
}
} else {
if (@field(server.config, field.name) != new_config_value) {
log.info("set config option '{s}' to '{any}'", .{ field.name, new_config_value });
@field(server.config, field.name) = new_config_value;
}
const old_config_value = @field(server.config, field.name);
switch (@TypeOf(old_config_value)) {
?[]const u8 => {
const override_old_value =
if (old_config_value) |old_value| !std.mem.eql(u8, old_value, new_config_value) else true;
if (override_old_value) {
log.info("set config option '{s}' to '{s}'", .{ field.name, new_config_value });
@field(server.config, field.name) = try config_arena.dupe(u8, new_config_value);
}
},
[]const u8 => {
if (!std.mem.eql(u8, old_config_value, new_config_value)) {
log.info("set config option '{s}' to '{s}'", .{ field.name, new_config_value });
@field(server.config, field.name) = try config_arena.dupe(u8, new_config_value);

Check warning on line 866 in src/Server.zig

View check run for this annotation

Codecov / codecov/patch

src/Server.zig#L865-L866

Added lines #L865 - L866 were not covered by tests
}
},
else => {
if (old_config_value != new_config_value) {
log.info("set config option '{s}' to '{any}'", .{ field.name, new_config_value });
@field(server.config, field.name) = new_config_value;
}
},
}
}
}
Expand Down
Loading