Add config option, fix config wizard, fix random crash and extern unused highlighting
This commit is contained in:
parent
43c61b3da6
commit
3b33750f59
@ -101,6 +101,7 @@ The following options are currently available.
|
|||||||
| --- | --- | --- | --- |
|
| --- | --- | --- | --- |
|
||||||
| `enable_snippets` | `bool` | `false` | Enables snippet completions when the client also supports them. |
|
| `enable_snippets` | `bool` | `false` | Enables snippet completions when the client also supports them. |
|
||||||
| `enable_unused_variable_warnings` | `bool` | `false`| Enables warnings for local variables that aren't used. |
|
| `enable_unused_variable_warnings` | `bool` | `false`| Enables warnings for local variables that aren't used. |
|
||||||
|
| `enable_import_embedfile_argument_completions` | `bool` | `false` | Whether to enable import/embedFile argument completions |
|
||||||
| `zig_lib_path` | `?[]const u8` | `null` | zig library path, e.g. `/path/to/zig/lib/zig`, used to analyze std library imports. |
|
| `zig_lib_path` | `?[]const u8` | `null` | zig library path, e.g. `/path/to/zig/lib/zig`, used to analyze std library imports. |
|
||||||
| `zig_exe_path` | `?[]const u8` | `null` | 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. |
|
| `zig_exe_path` | `?[]const u8` | `null` | 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. |
|
||||||
| `warn_style` | `bool` | `false` | Enables warnings for style *guideline* mismatches |
|
| `warn_style` | `bool` | `false` | Enables warnings for style *guideline* mismatches |
|
||||||
|
@ -6,6 +6,9 @@ enable_snippets: bool = false,
|
|||||||
/// Whether to enable unused variable warnings
|
/// Whether to enable unused variable warnings
|
||||||
enable_unused_variable_warnings: bool = false,
|
enable_unused_variable_warnings: bool = false,
|
||||||
|
|
||||||
|
/// Whether to enable import/embedFile argument completions (NOTE: these are triggered manually as updating the autotrigger characters may cause issues)
|
||||||
|
enable_import_embedfile_argument_completions: bool = false,
|
||||||
|
|
||||||
/// zig library path
|
/// zig library path
|
||||||
zig_lib_path: ?[]const u8 = null,
|
zig_lib_path: ?[]const u8 = null,
|
||||||
|
|
||||||
|
22
src/main.zig
22
src/main.zig
@ -231,9 +231,16 @@ fn publishDiagnostics(arena: *std.heap.ArenaAllocator, handle: DocumentStore.Han
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (config.enable_unused_variable_warnings) {
|
if (config.enable_unused_variable_warnings) {
|
||||||
for (handle.document_scope.scopes) |scope| {
|
scopes: for (handle.document_scope.scopes) |scope| {
|
||||||
const scope_data = switch (scope.data) {
|
const scope_data = switch (scope.data) {
|
||||||
.function => |f| f,
|
.function => |f| b: {
|
||||||
|
var buf: [1]std.zig.Ast.Node.Index = undefined;
|
||||||
|
var proto = ast.fnProto(tree, f, &buf) orelse break :b f;
|
||||||
|
if (proto.extern_export_inline_token) |tok| {
|
||||||
|
if (std.mem.eql(u8, tree.tokenSlice(tok), "extern")) continue :scopes;
|
||||||
|
}
|
||||||
|
break :b f;
|
||||||
|
},
|
||||||
.block => |b| b,
|
.block => |b| b,
|
||||||
else => continue,
|
else => continue,
|
||||||
};
|
};
|
||||||
@ -769,13 +776,13 @@ fn hoverSymbol(id: types.RequestId, arena: *std.heap.ArenaAllocator, decl_handle
|
|||||||
const resolved_type = try decl_handle.resolveType(&document_store, arena, &bound_type_params);
|
const resolved_type = try decl_handle.resolveType(&document_store, arena, &bound_type_params);
|
||||||
|
|
||||||
const resolved_type_str = if (resolved_type) |rt|
|
const resolved_type_str = if (resolved_type) |rt|
|
||||||
if (rt.type.is_type_val) "type" else switch (rt.type.data) {
|
if (rt.type.is_type_val) "type" else switch (rt.type.data) { // TODO: Investigate random weird numbers like 897 that cause index of bounds
|
||||||
.pointer,
|
.pointer,
|
||||||
.slice,
|
.slice,
|
||||||
.error_union,
|
.error_union,
|
||||||
.primitive,
|
.primitive,
|
||||||
=> |p| tree.getNodeSource(p),
|
=> |p| if (p >= tree.nodes.len) "unknown" else tree.getNodeSource(p),
|
||||||
.other => |p| switch (tree.nodes.items(.tag)[p]) {
|
.other => |p| if (p >= tree.nodes.len) "unknown" else switch (tree.nodes.items(.tag)[p]) {
|
||||||
.container_decl,
|
.container_decl,
|
||||||
.container_decl_arg,
|
.container_decl_arg,
|
||||||
.container_decl_arg_trailing,
|
.container_decl_arg_trailing,
|
||||||
@ -1587,6 +1594,8 @@ fn documentSymbol(arena: *std.heap.ArenaAllocator, id: types.RequestId, handle:
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn loadConfigFile(file_path: []const u8) ?Config {
|
fn loadConfigFile(file_path: []const u8) ?Config {
|
||||||
|
@setEvalBranchQuota(5000);
|
||||||
|
|
||||||
const tracy_zone = tracy.trace(@src());
|
const tracy_zone = tracy.trace(@src());
|
||||||
defer tracy_zone.end();
|
defer tracy_zone.end();
|
||||||
|
|
||||||
@ -1855,6 +1864,9 @@ fn completionHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req:
|
|||||||
.enum_literal => try completeDot(arena, id, handle, config),
|
.enum_literal => try completeDot(arena, id, handle, config),
|
||||||
.label => try completeLabel(arena, id, doc_position.absolute_index, handle, config),
|
.label => try completeLabel(arena, id, doc_position.absolute_index, handle, config),
|
||||||
.import_string_literal, .embedfile_string_literal => |loc| {
|
.import_string_literal, .embedfile_string_literal => |loc| {
|
||||||
|
if (!config.enable_import_embedfile_argument_completions)
|
||||||
|
return try respondGeneric(id, no_completions_response);
|
||||||
|
|
||||||
const line_mem_start = @ptrToInt(doc_position.line.ptr) - @ptrToInt(handle.document.mem.ptr);
|
const line_mem_start = @ptrToInt(doc_position.line.ptr) - @ptrToInt(handle.document.mem.ptr);
|
||||||
const completing = handle.tree.source[line_mem_start + loc.start + 1 .. line_mem_start + loc.end];
|
const completing = handle.tree.source[line_mem_start + loc.start + 1 .. line_mem_start + loc.end];
|
||||||
|
|
||||||
|
@ -264,6 +264,7 @@ pub const Configuration = struct {
|
|||||||
settings: struct {
|
settings: struct {
|
||||||
enable_snippets: ?bool,
|
enable_snippets: ?bool,
|
||||||
enable_unused_variable_warnings: ?bool,
|
enable_unused_variable_warnings: ?bool,
|
||||||
|
enable_import_embedfile_argument_completions: ?bool,
|
||||||
zig_lib_path: ?[]const u8,
|
zig_lib_path: ?[]const u8,
|
||||||
zig_exe_path: ?[]const u8,
|
zig_exe_path: ?[]const u8,
|
||||||
warn_style: ?bool,
|
warn_style: ?bool,
|
||||||
|
@ -170,6 +170,8 @@ pub fn wizard(allocator: std.mem.Allocator) !void {
|
|||||||
|
|
||||||
const editor = try askSelectOne("Which code editor do you use?", enum { VSCode, Sublime, Kate, Neovim, Vim8, Emacs, Doom, Spacemacs, Other });
|
const editor = try askSelectOne("Which code editor do you use?", enum { VSCode, Sublime, Kate, Neovim, Vim8, Emacs, Doom, Spacemacs, Other });
|
||||||
const snippets = try askBool("Do you want to enable snippets?");
|
const snippets = try askBool("Do you want to enable snippets?");
|
||||||
|
const unused_variables = try askBool("Do you want to enable unused variable warnings?");
|
||||||
|
const ief_apc = try askBool("Do you want to enable @import/@embedFile argument path completion?");
|
||||||
const style = try askBool("Do you want to enable style warnings?");
|
const style = try askBool("Do you want to enable style warnings?");
|
||||||
const semantic_tokens = try askBool("Do you want to enable semantic highlighting?");
|
const semantic_tokens = try askBool("Do you want to enable semantic highlighting?");
|
||||||
const operator_completions = try askBool("Do you want to enable .* and .? completions?");
|
const operator_completions = try askBool("Do you want to enable .* and .? completions?");
|
||||||
@ -188,6 +190,8 @@ pub fn wizard(allocator: std.mem.Allocator) !void {
|
|||||||
try std.json.stringify(.{
|
try std.json.stringify(.{
|
||||||
.zig_exe_path = zig_exe_path,
|
.zig_exe_path = zig_exe_path,
|
||||||
.enable_snippets = snippets,
|
.enable_snippets = snippets,
|
||||||
|
.enable_unused_variable_warnings = unused_variables,
|
||||||
|
.enable_import_embedfile_argument_completions = ief_apc,
|
||||||
.warn_style = style,
|
.warn_style = style,
|
||||||
.enable_semantic_tokens = semantic_tokens,
|
.enable_semantic_tokens = semantic_tokens,
|
||||||
.operator_completions = operator_completions,
|
.operator_completions = operator_completions,
|
||||||
|
Loading…
Reference in New Issue
Block a user