implement workspace/configuration
This commit is contained in:
		
							parent
							
								
									04611ba1a1
								
							
						
					
					
						commit
						f5fb4afd7c
					
				
							
								
								
									
										111
									
								
								src/main.zig
									
									
									
									
									
								
							
							
						
						
									
										111
									
								
								src/main.zig
									
									
									
									
									
								
							@ -193,7 +193,7 @@ fn astLocationToRange(loc: Ast.Location) types.Range {
 | 
				
			|||||||
    };
 | 
					    };
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn publishDiagnostics(arena: *std.heap.ArenaAllocator, handle: DocumentStore.Handle, config: Config) !void {
 | 
					fn publishDiagnostics(arena: *std.heap.ArenaAllocator, handle: DocumentStore.Handle, config: *const Config) !void {
 | 
				
			||||||
    const tree = handle.tree;
 | 
					    const tree = handle.tree;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    var diagnostics = std.ArrayList(types.Diagnostic).init(arena.allocator());
 | 
					    var diagnostics = std.ArrayList(types.Diagnostic).init(arena.allocator());
 | 
				
			||||||
@ -273,7 +273,7 @@ fn publishDiagnostics(arena: *std.heap.ArenaAllocator, handle: DocumentStore.Han
 | 
				
			|||||||
    });
 | 
					    });
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn typeToCompletion(arena: *std.heap.ArenaAllocator, list: *std.ArrayList(types.CompletionItem), field_access: analysis.FieldAccessReturn, orig_handle: *DocumentStore.Handle, config: Config) error{OutOfMemory}!void {
 | 
					fn typeToCompletion(arena: *std.heap.ArenaAllocator, list: *std.ArrayList(types.CompletionItem), field_access: analysis.FieldAccessReturn, orig_handle: *DocumentStore.Handle, config: *const Config) error{OutOfMemory}!void {
 | 
				
			||||||
    const type_handle = field_access.original;
 | 
					    const type_handle = field_access.original;
 | 
				
			||||||
    switch (type_handle.type.data) {
 | 
					    switch (type_handle.type.data) {
 | 
				
			||||||
        .slice => {
 | 
					        .slice => {
 | 
				
			||||||
@ -327,7 +327,7 @@ fn typeToCompletion(arena: *std.heap.ArenaAllocator, list: *std.ArrayList(types.
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn nodeToCompletion(arena: *std.heap.ArenaAllocator, list: *std.ArrayList(types.CompletionItem), node_handle: analysis.NodeWithHandle, unwrapped: ?analysis.TypeWithHandle, orig_handle: *DocumentStore.Handle, is_type_val: bool, parent_is_type_val: ?bool, config: Config) error{OutOfMemory}!void {
 | 
					fn nodeToCompletion(arena: *std.heap.ArenaAllocator, list: *std.ArrayList(types.CompletionItem), node_handle: analysis.NodeWithHandle, unwrapped: ?analysis.TypeWithHandle, orig_handle: *DocumentStore.Handle, is_type_val: bool, parent_is_type_val: ?bool, config: *const Config) error{OutOfMemory}!void {
 | 
				
			||||||
    const node = node_handle.node;
 | 
					    const node = node_handle.node;
 | 
				
			||||||
    const handle = node_handle.handle;
 | 
					    const handle = node_handle.handle;
 | 
				
			||||||
    const tree = handle.tree;
 | 
					    const tree = handle.tree;
 | 
				
			||||||
@ -355,7 +355,7 @@ fn nodeToCompletion(arena: *std.heap.ArenaAllocator, list: *std.ArrayList(types.
 | 
				
			|||||||
    if (ast.isContainer(handle.tree, node)) {
 | 
					    if (ast.isContainer(handle.tree, node)) {
 | 
				
			||||||
        const context = DeclToCompletionContext{
 | 
					        const context = DeclToCompletionContext{
 | 
				
			||||||
            .completions = list,
 | 
					            .completions = list,
 | 
				
			||||||
            .config = &config,
 | 
					            .config = config,
 | 
				
			||||||
            .arena = arena,
 | 
					            .arena = arena,
 | 
				
			||||||
            .orig_handle = orig_handle,
 | 
					            .orig_handle = orig_handle,
 | 
				
			||||||
            .parent_is_type_val = is_type_val,
 | 
					            .parent_is_type_val = is_type_val,
 | 
				
			||||||
@ -413,7 +413,7 @@ fn nodeToCompletion(arena: *std.heap.ArenaAllocator, list: *std.ArrayList(types.
 | 
				
			|||||||
            if (try analysis.resolveVarDeclAlias(&document_store, arena, node_handle)) |result| {
 | 
					            if (try analysis.resolveVarDeclAlias(&document_store, arena, node_handle)) |result| {
 | 
				
			||||||
                const context = DeclToCompletionContext{
 | 
					                const context = DeclToCompletionContext{
 | 
				
			||||||
                    .completions = list,
 | 
					                    .completions = list,
 | 
				
			||||||
                    .config = &config,
 | 
					                    .config = config,
 | 
				
			||||||
                    .arena = arena,
 | 
					                    .arena = arena,
 | 
				
			||||||
                    .orig_handle = orig_handle,
 | 
					                    .orig_handle = orig_handle,
 | 
				
			||||||
                };
 | 
					                };
 | 
				
			||||||
@ -673,21 +673,21 @@ fn getSymbolGlobal(arena: *std.heap.ArenaAllocator, pos_index: usize, handle: *D
 | 
				
			|||||||
    return try analysis.lookupSymbolGlobal(&document_store, arena, handle, name, pos_index);
 | 
					    return try analysis.lookupSymbolGlobal(&document_store, arena, handle, name, pos_index);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn gotoDefinitionLabel(arena: *std.heap.ArenaAllocator, id: types.RequestId, pos_index: usize, handle: *DocumentStore.Handle, config: Config) !void {
 | 
					fn gotoDefinitionLabel(arena: *std.heap.ArenaAllocator, id: types.RequestId, pos_index: usize, handle: *DocumentStore.Handle, config: *const Config) !void {
 | 
				
			||||||
    _ = config;
 | 
					    _ = config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const decl = (try getLabelGlobal(pos_index, handle)) orelse return try respondGeneric(id, null_result_response);
 | 
					    const decl = (try getLabelGlobal(pos_index, handle)) orelse return try respondGeneric(id, null_result_response);
 | 
				
			||||||
    return try gotoDefinitionSymbol(id, arena, decl, false);
 | 
					    return try gotoDefinitionSymbol(id, arena, decl, false);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn gotoDefinitionGlobal(arena: *std.heap.ArenaAllocator, id: types.RequestId, pos_index: usize, handle: *DocumentStore.Handle, config: Config, resolve_alias: bool) !void {
 | 
					fn gotoDefinitionGlobal(arena: *std.heap.ArenaAllocator, id: types.RequestId, pos_index: usize, handle: *DocumentStore.Handle, config: *const Config, resolve_alias: bool) !void {
 | 
				
			||||||
    _ = config;
 | 
					    _ = config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const decl = (try getSymbolGlobal(arena, pos_index, handle)) orelse return try respondGeneric(id, null_result_response);
 | 
					    const decl = (try getSymbolGlobal(arena, pos_index, handle)) orelse return try respondGeneric(id, null_result_response);
 | 
				
			||||||
    return try gotoDefinitionSymbol(id, arena, decl, resolve_alias);
 | 
					    return try gotoDefinitionSymbol(id, arena, decl, resolve_alias);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn hoverDefinitionLabel(arena: *std.heap.ArenaAllocator, id: types.RequestId, pos_index: usize, handle: *DocumentStore.Handle, config: Config) !void {
 | 
					fn hoverDefinitionLabel(arena: *std.heap.ArenaAllocator, id: types.RequestId, pos_index: usize, handle: *DocumentStore.Handle, config: *const Config) !void {
 | 
				
			||||||
    _ = config;
 | 
					    _ = config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const decl = (try getLabelGlobal(pos_index, handle)) orelse return try respondGeneric(id, null_result_response);
 | 
					    const decl = (try getLabelGlobal(pos_index, handle)) orelse return try respondGeneric(id, null_result_response);
 | 
				
			||||||
@ -718,14 +718,14 @@ fn hoverDefinitionBuiltin(arena: *std.heap.ArenaAllocator, id: types.RequestId,
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn hoverDefinitionGlobal(arena: *std.heap.ArenaAllocator, id: types.RequestId, pos_index: usize, handle: *DocumentStore.Handle, config: Config) !void {
 | 
					fn hoverDefinitionGlobal(arena: *std.heap.ArenaAllocator, id: types.RequestId, pos_index: usize, handle: *DocumentStore.Handle, config: *const Config) !void {
 | 
				
			||||||
    _ = config;
 | 
					    _ = config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const decl = (try getSymbolGlobal(arena, pos_index, handle)) orelse return try respondGeneric(id, null_result_response);
 | 
					    const decl = (try getSymbolGlobal(arena, pos_index, handle)) orelse return try respondGeneric(id, null_result_response);
 | 
				
			||||||
    return try hoverSymbol(id, arena, decl);
 | 
					    return try hoverSymbol(id, arena, decl);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn getSymbolFieldAccess(handle: *DocumentStore.Handle, arena: *std.heap.ArenaAllocator, position: offsets.DocumentPosition, range: analysis.SourceRange, config: Config) !?analysis.DeclWithHandle {
 | 
					fn getSymbolFieldAccess(handle: *DocumentStore.Handle, arena: *std.heap.ArenaAllocator, position: offsets.DocumentPosition, range: analysis.SourceRange, config: *const Config) !?analysis.DeclWithHandle {
 | 
				
			||||||
    _ = config;
 | 
					    _ = config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const name = identifierFromPosition(position.absolute_index, handle.*);
 | 
					    const name = identifierFromPosition(position.absolute_index, handle.*);
 | 
				
			||||||
@ -754,17 +754,17 @@ fn getSymbolFieldAccess(handle: *DocumentStore.Handle, arena: *std.heap.ArenaAll
 | 
				
			|||||||
    return null;
 | 
					    return null;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn gotoDefinitionFieldAccess(arena: *std.heap.ArenaAllocator, id: types.RequestId, handle: *DocumentStore.Handle, position: offsets.DocumentPosition, range: analysis.SourceRange, config: Config, resolve_alias: bool) !void {
 | 
					fn gotoDefinitionFieldAccess(arena: *std.heap.ArenaAllocator, id: types.RequestId, handle: *DocumentStore.Handle, position: offsets.DocumentPosition, range: analysis.SourceRange, config: *const Config, resolve_alias: bool) !void {
 | 
				
			||||||
    const decl = (try getSymbolFieldAccess(handle, arena, position, range, config)) orelse return try respondGeneric(id, null_result_response);
 | 
					    const decl = (try getSymbolFieldAccess(handle, arena, position, range, config)) orelse return try respondGeneric(id, null_result_response);
 | 
				
			||||||
    return try gotoDefinitionSymbol(id, arena, decl, resolve_alias);
 | 
					    return try gotoDefinitionSymbol(id, arena, decl, resolve_alias);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn hoverDefinitionFieldAccess(arena: *std.heap.ArenaAllocator, id: types.RequestId, handle: *DocumentStore.Handle, position: offsets.DocumentPosition, range: analysis.SourceRange, config: Config) !void {
 | 
					fn hoverDefinitionFieldAccess(arena: *std.heap.ArenaAllocator, id: types.RequestId, handle: *DocumentStore.Handle, position: offsets.DocumentPosition, range: analysis.SourceRange, config: *const Config) !void {
 | 
				
			||||||
    const decl = (try getSymbolFieldAccess(handle, arena, position, range, config)) orelse return try respondGeneric(id, null_result_response);
 | 
					    const decl = (try getSymbolFieldAccess(handle, arena, position, range, config)) orelse return try respondGeneric(id, null_result_response);
 | 
				
			||||||
    return try hoverSymbol(id, arena, decl);
 | 
					    return try hoverSymbol(id, arena, decl);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn gotoDefinitionString(arena: *std.heap.ArenaAllocator, id: types.RequestId, pos_index: usize, handle: *DocumentStore.Handle, config: Config) !void {
 | 
					fn gotoDefinitionString(arena: *std.heap.ArenaAllocator, id: types.RequestId, pos_index: usize, handle: *DocumentStore.Handle, config: *const Config) !void {
 | 
				
			||||||
    _ = config;
 | 
					    _ = config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const tree = handle.tree;
 | 
					    const tree = handle.tree;
 | 
				
			||||||
@ -803,7 +803,7 @@ fn renameDefinitionGlobal(arena: *std.heap.ArenaAllocator, id: types.RequestId,
 | 
				
			|||||||
    });
 | 
					    });
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn renameDefinitionFieldAccess(arena: *std.heap.ArenaAllocator, id: types.RequestId, handle: *DocumentStore.Handle, position: offsets.DocumentPosition, range: analysis.SourceRange, new_name: []const u8, config: Config) !void {
 | 
					fn renameDefinitionFieldAccess(arena: *std.heap.ArenaAllocator, id: types.RequestId, handle: *DocumentStore.Handle, position: offsets.DocumentPosition, range: analysis.SourceRange, new_name: []const u8, config: *const Config) !void {
 | 
				
			||||||
    const decl = (try getSymbolFieldAccess(handle, arena, position, range, config)) orelse return try respondGeneric(id, null_result_response);
 | 
					    const decl = (try getSymbolFieldAccess(handle, arena, position, range, config)) orelse return try respondGeneric(id, null_result_response);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    var workspace_edit = types.WorkspaceEdit{
 | 
					    var workspace_edit = types.WorkspaceEdit{
 | 
				
			||||||
@ -848,7 +848,7 @@ fn referencesDefinitionGlobal(arena: *std.heap.ArenaAllocator, id: types.Request
 | 
				
			|||||||
    });
 | 
					    });
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn referencesDefinitionFieldAccess(arena: *std.heap.ArenaAllocator, id: types.RequestId, handle: *DocumentStore.Handle, position: offsets.DocumentPosition, range: analysis.SourceRange, include_decl: bool, config: Config) !void {
 | 
					fn referencesDefinitionFieldAccess(arena: *std.heap.ArenaAllocator, id: types.RequestId, handle: *DocumentStore.Handle, position: offsets.DocumentPosition, range: analysis.SourceRange, include_decl: bool, config: *const Config) !void {
 | 
				
			||||||
    const decl = (try getSymbolFieldAccess(handle, arena, position, range, config)) orelse return try respondGeneric(id, null_result_response);
 | 
					    const decl = (try getSymbolFieldAccess(handle, arena, position, range, config)) orelse return try respondGeneric(id, null_result_response);
 | 
				
			||||||
    var locs = std.ArrayList(types.Location).init(arena.allocator());
 | 
					    var locs = std.ArrayList(types.Location).init(arena.allocator());
 | 
				
			||||||
    try references.symbolReferences(arena, &document_store, decl, offset_encoding, include_decl, &locs, std.ArrayList(types.Location).append, config.skip_std_references);
 | 
					    try references.symbolReferences(arena, &document_store, decl, offset_encoding, include_decl, &locs, std.ArrayList(types.Location).append, config.skip_std_references);
 | 
				
			||||||
@ -896,7 +896,7 @@ fn declToCompletion(context: DeclToCompletionContext, decl_handle: analysis.Decl
 | 
				
			|||||||
            context.orig_handle,
 | 
					            context.orig_handle,
 | 
				
			||||||
            false,
 | 
					            false,
 | 
				
			||||||
            context.parent_is_type_val,
 | 
					            context.parent_is_type_val,
 | 
				
			||||||
            context.config.*,
 | 
					            context.config,
 | 
				
			||||||
        ),
 | 
					        ),
 | 
				
			||||||
        .param_decl => |param| {
 | 
					        .param_decl => |param| {
 | 
				
			||||||
            const doc_kind: types.MarkupContent.Kind = if (client_capabilities.completion_doc_supports_md) .Markdown else .PlainText;
 | 
					            const doc_kind: types.MarkupContent.Kind = if (client_capabilities.completion_doc_supports_md) .Markdown else .PlainText;
 | 
				
			||||||
@ -966,12 +966,12 @@ fn declToCompletion(context: DeclToCompletionContext, decl_handle: analysis.Decl
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn completeLabel(arena: *std.heap.ArenaAllocator, id: types.RequestId, pos_index: usize, handle: *DocumentStore.Handle, config: Config) !void {
 | 
					fn completeLabel(arena: *std.heap.ArenaAllocator, id: types.RequestId, pos_index: usize, handle: *DocumentStore.Handle, config: *const Config) !void {
 | 
				
			||||||
    var completions = std.ArrayList(types.CompletionItem).init(arena.allocator());
 | 
					    var completions = std.ArrayList(types.CompletionItem).init(arena.allocator());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const context = DeclToCompletionContext{
 | 
					    const context = DeclToCompletionContext{
 | 
				
			||||||
        .completions = &completions,
 | 
					        .completions = &completions,
 | 
				
			||||||
        .config = &config,
 | 
					        .config = config,
 | 
				
			||||||
        .arena = arena,
 | 
					        .arena = arena,
 | 
				
			||||||
        .orig_handle = handle,
 | 
					        .orig_handle = handle,
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
@ -990,7 +990,7 @@ fn completeLabel(arena: *std.heap.ArenaAllocator, id: types.RequestId, pos_index
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var builtin_completions: ?[]types.CompletionItem = null;
 | 
					var builtin_completions: ?[]types.CompletionItem = null;
 | 
				
			||||||
fn completeBuiltin(arena: *std.heap.ArenaAllocator, id: types.RequestId, config: Config) !void {
 | 
					fn completeBuiltin(arena: *std.heap.ArenaAllocator, id: types.RequestId, config: *const Config) !void {
 | 
				
			||||||
    if (builtin_completions == null) {
 | 
					    if (builtin_completions == null) {
 | 
				
			||||||
        builtin_completions = try allocator.alloc(types.CompletionItem, data.builtins.len);
 | 
					        builtin_completions = try allocator.alloc(types.CompletionItem, data.builtins.len);
 | 
				
			||||||
        for (data.builtins) |builtin, idx| {
 | 
					        for (data.builtins) |builtin, idx| {
 | 
				
			||||||
@ -1032,12 +1032,12 @@ fn completeBuiltin(arena: *std.heap.ArenaAllocator, id: types.RequestId, config:
 | 
				
			|||||||
    });
 | 
					    });
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn completeGlobal(arena: *std.heap.ArenaAllocator, id: types.RequestId, pos_index: usize, handle: *DocumentStore.Handle, config: Config) !void {
 | 
					fn completeGlobal(arena: *std.heap.ArenaAllocator, id: types.RequestId, pos_index: usize, handle: *DocumentStore.Handle, config: *const Config) !void {
 | 
				
			||||||
    var completions = std.ArrayList(types.CompletionItem).init(arena.allocator());
 | 
					    var completions = std.ArrayList(types.CompletionItem).init(arena.allocator());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const context = DeclToCompletionContext{
 | 
					    const context = DeclToCompletionContext{
 | 
				
			||||||
        .completions = &completions,
 | 
					        .completions = &completions,
 | 
				
			||||||
        .config = &config,
 | 
					        .config = config,
 | 
				
			||||||
        .arena = arena,
 | 
					        .arena = arena,
 | 
				
			||||||
        .orig_handle = handle,
 | 
					        .orig_handle = handle,
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
@ -1055,7 +1055,7 @@ fn completeGlobal(arena: *std.heap.ArenaAllocator, id: types.RequestId, pos_inde
 | 
				
			|||||||
    });
 | 
					    });
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn completeFieldAccess(arena: *std.heap.ArenaAllocator, id: types.RequestId, handle: *DocumentStore.Handle, position: offsets.DocumentPosition, range: analysis.SourceRange, config: Config) !void {
 | 
					fn completeFieldAccess(arena: *std.heap.ArenaAllocator, id: types.RequestId, handle: *DocumentStore.Handle, position: offsets.DocumentPosition, range: analysis.SourceRange, config: *const Config) !void {
 | 
				
			||||||
    var completions = std.ArrayList(types.CompletionItem).init(arena.allocator());
 | 
					    var completions = std.ArrayList(types.CompletionItem).init(arena.allocator());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const line_mem_start = @ptrToInt(position.line.ptr) - @ptrToInt(handle.document.mem.ptr);
 | 
					    const line_mem_start = @ptrToInt(position.line.ptr) - @ptrToInt(handle.document.mem.ptr);
 | 
				
			||||||
@ -1080,7 +1080,7 @@ fn completeFieldAccess(arena: *std.heap.ArenaAllocator, id: types.RequestId, han
 | 
				
			|||||||
    });
 | 
					    });
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn completeError(arena: *std.heap.ArenaAllocator, id: types.RequestId, handle: *DocumentStore.Handle, config: Config) !void {
 | 
					fn completeError(arena: *std.heap.ArenaAllocator, id: types.RequestId, handle: *DocumentStore.Handle, config: *const Config) !void {
 | 
				
			||||||
    const completions = try document_store.errorCompletionItems(arena, handle);
 | 
					    const completions = try document_store.errorCompletionItems(arena, handle);
 | 
				
			||||||
    truncateCompletions(completions, config.max_detail_length);
 | 
					    truncateCompletions(completions, config.max_detail_length);
 | 
				
			||||||
    logger.debug("Completing error:", .{});
 | 
					    logger.debug("Completing error:", .{});
 | 
				
			||||||
@ -1096,7 +1096,7 @@ fn completeError(arena: *std.heap.ArenaAllocator, id: types.RequestId, handle: *
 | 
				
			|||||||
    });
 | 
					    });
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn completeDot(arena: *std.heap.ArenaAllocator, id: types.RequestId, handle: *DocumentStore.Handle, config: Config) !void {
 | 
					fn completeDot(arena: *std.heap.ArenaAllocator, id: types.RequestId, handle: *DocumentStore.Handle, config: *const Config) !void {
 | 
				
			||||||
    var completions = try document_store.enumCompletionItems(arena, handle);
 | 
					    var completions = try document_store.enumCompletionItems(arena, handle);
 | 
				
			||||||
    truncateCompletions(completions, config.max_detail_length);
 | 
					    truncateCompletions(completions, config.max_detail_length);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1153,7 +1153,7 @@ fn loadConfigInFolder(folder_path: []const u8) ?Config {
 | 
				
			|||||||
    return loadConfigFile(full_path);
 | 
					    return loadConfigFile(full_path);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn initializeHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: requests.Initialize, config: Config) !void {
 | 
					fn initializeHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: requests.Initialize, config: *const Config) !void {
 | 
				
			||||||
    _ = config;
 | 
					    _ = config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    for (req.params.capabilities.offsetEncoding.value) |encoding| {
 | 
					    for (req.params.capabilities.offsetEncoding.value) |encoding| {
 | 
				
			||||||
@ -1256,13 +1256,26 @@ fn initializeHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req:
 | 
				
			|||||||
        },
 | 
					        },
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (req.params.capabilities.workspace) |workspace| {
 | 
				
			||||||
 | 
					        if (workspace.configuration.value) {
 | 
				
			||||||
 | 
					            try send(arena, types.Request{
 | 
				
			||||||
 | 
					                .method = "workspace/configuration",
 | 
				
			||||||
 | 
					                .params = .{
 | 
				
			||||||
 | 
					                    .ConfigurationParams = .{
 | 
				
			||||||
 | 
					                        .items = &[_]types.ConfigurationParams.ConfigurationItem{},
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    logger.info("zls initialized", .{});
 | 
					    logger.info("zls initialized", .{});
 | 
				
			||||||
    logger.info("{}", .{client_capabilities});
 | 
					    logger.info("{}", .{client_capabilities});
 | 
				
			||||||
    logger.info("Using offset encoding: {s}", .{std.meta.tagName(offset_encoding)});
 | 
					    logger.info("Using offset encoding: {s}", .{std.meta.tagName(offset_encoding)});
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
var keep_running = true;
 | 
					var keep_running = true;
 | 
				
			||||||
fn shutdownHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, config: Config) !void {
 | 
					fn shutdownHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, config: *const Config) !void {
 | 
				
			||||||
    _ = config;
 | 
					    _ = config;
 | 
				
			||||||
    _ = arena;
 | 
					    _ = arena;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1273,7 +1286,7 @@ fn shutdownHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, config:
 | 
				
			|||||||
    try respondGeneric(id, null_result_response);
 | 
					    try respondGeneric(id, null_result_response);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn openDocumentHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: requests.OpenDocument, config: Config) !void {
 | 
					fn openDocumentHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: requests.OpenDocument, config: *const Config) !void {
 | 
				
			||||||
    const handle = try document_store.openDocument(req.params.textDocument.uri, req.params.textDocument.text);
 | 
					    const handle = try document_store.openDocument(req.params.textDocument.uri, req.params.textDocument.text);
 | 
				
			||||||
    try publishDiagnostics(arena, handle.*, config);
 | 
					    try publishDiagnostics(arena, handle.*, config);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1281,7 +1294,7 @@ fn openDocumentHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req
 | 
				
			|||||||
        try semanticTokensFullHandler(arena, id, .{ .params = .{ .textDocument = .{ .uri = req.params.textDocument.uri } } }, config);
 | 
					        try semanticTokensFullHandler(arena, id, .{ .params = .{ .textDocument = .{ .uri = req.params.textDocument.uri } } }, config);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn changeDocumentHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: requests.ChangeDocument, config: Config) !void {
 | 
					fn changeDocumentHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: requests.ChangeDocument, config: *const Config) !void {
 | 
				
			||||||
    _ = id;
 | 
					    _ = id;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const handle = document_store.getHandle(req.params.textDocument.uri) orelse {
 | 
					    const handle = document_store.getHandle(req.params.textDocument.uri) orelse {
 | 
				
			||||||
@ -1293,7 +1306,7 @@ fn changeDocumentHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, r
 | 
				
			|||||||
    try publishDiagnostics(arena, handle.*, config);
 | 
					    try publishDiagnostics(arena, handle.*, config);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn saveDocumentHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: requests.SaveDocument, config: Config) error{OutOfMemory}!void {
 | 
					fn saveDocumentHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: requests.SaveDocument, config: *const Config) error{OutOfMemory}!void {
 | 
				
			||||||
    _ = config;
 | 
					    _ = config;
 | 
				
			||||||
    _ = id;
 | 
					    _ = id;
 | 
				
			||||||
    _ = arena;
 | 
					    _ = arena;
 | 
				
			||||||
@ -1304,14 +1317,14 @@ fn saveDocumentHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req
 | 
				
			|||||||
    try document_store.applySave(handle);
 | 
					    try document_store.applySave(handle);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn closeDocumentHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: requests.CloseDocument, config: Config) error{}!void {
 | 
					fn closeDocumentHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: requests.CloseDocument, config: *const Config) error{}!void {
 | 
				
			||||||
    _ = config;
 | 
					    _ = config;
 | 
				
			||||||
    _ = id;
 | 
					    _ = id;
 | 
				
			||||||
    _ = arena;
 | 
					    _ = arena;
 | 
				
			||||||
    document_store.closeDocument(req.params.textDocument.uri);
 | 
					    document_store.closeDocument(req.params.textDocument.uri);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn semanticTokensFullHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: requests.SemanticTokensFull, config: Config) !void {
 | 
					fn semanticTokensFullHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: requests.SemanticTokensFull, config: *const Config) !void {
 | 
				
			||||||
    if (config.enable_semantic_tokens) blk: {
 | 
					    if (config.enable_semantic_tokens) blk: {
 | 
				
			||||||
        const handle = document_store.getHandle(req.params.textDocument.uri) orelse {
 | 
					        const handle = document_store.getHandle(req.params.textDocument.uri) orelse {
 | 
				
			||||||
            logger.warn("Trying to get semantic tokens of non existent document {s}", .{req.params.textDocument.uri});
 | 
					            logger.warn("Trying to get semantic tokens of non existent document {s}", .{req.params.textDocument.uri});
 | 
				
			||||||
@ -1329,7 +1342,7 @@ fn semanticTokensFullHandler(arena: *std.heap.ArenaAllocator, id: types.RequestI
 | 
				
			|||||||
    return try respondGeneric(id, no_semantic_tokens_response);
 | 
					    return try respondGeneric(id, no_semantic_tokens_response);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn completionHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: requests.Completion, config: Config) !void {
 | 
					fn completionHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: requests.Completion, config: *const Config) !void {
 | 
				
			||||||
    const handle = document_store.getHandle(req.params.textDocument.uri) orelse {
 | 
					    const handle = document_store.getHandle(req.params.textDocument.uri) orelse {
 | 
				
			||||||
        logger.warn("Trying to complete in non existent document {s}", .{req.params.textDocument.uri});
 | 
					        logger.warn("Trying to complete in non existent document {s}", .{req.params.textDocument.uri});
 | 
				
			||||||
        return try respondGeneric(id, no_completions_response);
 | 
					        return try respondGeneric(id, no_completions_response);
 | 
				
			||||||
@ -1352,7 +1365,7 @@ fn completionHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req:
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn signatureHelpHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: requests.SignatureHelp, config: Config) !void {
 | 
					fn signatureHelpHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: requests.SignatureHelp, config: *const Config) !void {
 | 
				
			||||||
    _ = config;
 | 
					    _ = config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const getSignatureInfo = @import("signature_help.zig").getSignatureInfo;
 | 
					    const getSignatureInfo = @import("signature_help.zig").getSignatureInfo;
 | 
				
			||||||
@ -1386,7 +1399,7 @@ fn signatureHelpHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, re
 | 
				
			|||||||
    return try respondGeneric(id, no_signatures_response);
 | 
					    return try respondGeneric(id, no_signatures_response);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn gotoHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: requests.GotoDefinition, config: Config, resolve_alias: bool) !void {
 | 
					fn gotoHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: requests.GotoDefinition, config: *const Config, resolve_alias: bool) !void {
 | 
				
			||||||
    const handle = document_store.getHandle(req.params.textDocument.uri) orelse {
 | 
					    const handle = document_store.getHandle(req.params.textDocument.uri) orelse {
 | 
				
			||||||
        logger.warn("Trying to go to definition in non existent document {s}", .{req.params.textDocument.uri});
 | 
					        logger.warn("Trying to go to definition in non existent document {s}", .{req.params.textDocument.uri});
 | 
				
			||||||
        return try respondGeneric(id, null_result_response);
 | 
					        return try respondGeneric(id, null_result_response);
 | 
				
			||||||
@ -1408,15 +1421,15 @@ fn gotoHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: reques
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn gotoDefinitionHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: requests.GotoDefinition, config: Config) !void {
 | 
					fn gotoDefinitionHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: requests.GotoDefinition, config: *const Config) !void {
 | 
				
			||||||
    try gotoHandler(arena, id, req, config, true);
 | 
					    try gotoHandler(arena, id, req, config, true);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn gotoDeclarationHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: requests.GotoDeclaration, config: Config) !void {
 | 
					fn gotoDeclarationHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: requests.GotoDeclaration, config: *const Config) !void {
 | 
				
			||||||
    try gotoHandler(arena, id, req, config, false);
 | 
					    try gotoHandler(arena, id, req, config, false);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn hoverHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: requests.Hover, config: Config) !void {
 | 
					fn hoverHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: requests.Hover, config: *const Config) !void {
 | 
				
			||||||
    const handle = document_store.getHandle(req.params.textDocument.uri) orelse {
 | 
					    const handle = document_store.getHandle(req.params.textDocument.uri) orelse {
 | 
				
			||||||
        logger.warn("Trying to get hover in non existent document {s}", .{req.params.textDocument.uri});
 | 
					        logger.warn("Trying to get hover in non existent document {s}", .{req.params.textDocument.uri});
 | 
				
			||||||
        return try respondGeneric(id, null_result_response);
 | 
					        return try respondGeneric(id, null_result_response);
 | 
				
			||||||
@ -1437,7 +1450,7 @@ fn hoverHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: reque
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn documentSymbolsHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: requests.DocumentSymbols, config: Config) !void {
 | 
					fn documentSymbolsHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: requests.DocumentSymbols, config: *const Config) !void {
 | 
				
			||||||
    _ = config;
 | 
					    _ = config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const handle = document_store.getHandle(req.params.textDocument.uri) orelse {
 | 
					    const handle = document_store.getHandle(req.params.textDocument.uri) orelse {
 | 
				
			||||||
@ -1447,7 +1460,7 @@ fn documentSymbolsHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId,
 | 
				
			|||||||
    try documentSymbol(arena, id, handle);
 | 
					    try documentSymbol(arena, id, handle);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn formattingHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: requests.Formatting, config: Config) !void {
 | 
					fn formattingHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: requests.Formatting, config: *const Config) !void {
 | 
				
			||||||
    if (config.zig_exe_path) |zig_exe_path| {
 | 
					    if (config.zig_exe_path) |zig_exe_path| {
 | 
				
			||||||
        const handle = document_store.getHandle(req.params.textDocument.uri) orelse {
 | 
					        const handle = document_store.getHandle(req.params.textDocument.uri) orelse {
 | 
				
			||||||
            logger.warn("Trying to got to definition in non existent document {s}", .{req.params.textDocument.uri});
 | 
					            logger.warn("Trying to got to definition in non existent document {s}", .{req.params.textDocument.uri});
 | 
				
			||||||
@ -1489,7 +1502,7 @@ fn formattingHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req:
 | 
				
			|||||||
    return try respondGeneric(id, null_result_response);
 | 
					    return try respondGeneric(id, null_result_response);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn renameHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: requests.Rename, config: Config) !void {
 | 
					fn renameHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: requests.Rename, config: *const Config) !void {
 | 
				
			||||||
    const handle = document_store.getHandle(req.params.textDocument.uri) orelse {
 | 
					    const handle = document_store.getHandle(req.params.textDocument.uri) orelse {
 | 
				
			||||||
        logger.warn("Trying to rename in non existent document {s}", .{req.params.textDocument.uri});
 | 
					        logger.warn("Trying to rename in non existent document {s}", .{req.params.textDocument.uri});
 | 
				
			||||||
        return try respondGeneric(id, null_result_response);
 | 
					        return try respondGeneric(id, null_result_response);
 | 
				
			||||||
@ -1510,7 +1523,18 @@ fn renameHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: requ
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn referencesHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: requests.References, config: Config) !void {
 | 
					fn didChangeConfigurationHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: requests.Configuration, config: *Config) !void {
 | 
				
			||||||
 | 
					    _ = arena;
 | 
				
			||||||
 | 
					    _ = id;
 | 
				
			||||||
 | 
					    inline for (std.meta.fields(Config)) |field| {
 | 
				
			||||||
 | 
					        if (@field(req.params.settings, field.name)) |value| {
 | 
				
			||||||
 | 
					            logger.debug("setting configuration option '{s}' to '{any}'", .{ field.name, value });
 | 
				
			||||||
 | 
					            @field(config, field.name) = value;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					fn referencesHandler(arena: *std.heap.ArenaAllocator, id: types.RequestId, req: requests.References, config: *const Config) !void {
 | 
				
			||||||
    const handle = document_store.getHandle(req.params.textDocument.uri) orelse {
 | 
					    const handle = document_store.getHandle(req.params.textDocument.uri) orelse {
 | 
				
			||||||
        logger.warn("Trying to get references in non existent document {s}", .{req.params.textDocument.uri});
 | 
					        logger.warn("Trying to get references in non existent document {s}", .{req.params.textDocument.uri});
 | 
				
			||||||
        return try respondGeneric(id, null_result_response);
 | 
					        return try respondGeneric(id, null_result_response);
 | 
				
			||||||
@ -1538,7 +1562,7 @@ fn extractErr(val: anytype) anyerror {
 | 
				
			|||||||
    return error.HackDone;
 | 
					    return error.HackDone;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn processJsonRpc(arena: *std.heap.ArenaAllocator, parser: *std.json.Parser, json: []const u8, config: Config) !void {
 | 
					fn processJsonRpc(arena: *std.heap.ArenaAllocator, parser: *std.json.Parser, json: []const u8, config: *Config) !void {
 | 
				
			||||||
    var tree = try parser.parse(json);
 | 
					    var tree = try parser.parse(json);
 | 
				
			||||||
    defer tree.deinit();
 | 
					    defer tree.deinit();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1579,6 +1603,7 @@ fn processJsonRpc(arena: *std.heap.ArenaAllocator, parser: *std.json.Parser, jso
 | 
				
			|||||||
        .{ "textDocument/formatting", requests.Formatting, formattingHandler },
 | 
					        .{ "textDocument/formatting", requests.Formatting, formattingHandler },
 | 
				
			||||||
        .{ "textDocument/rename", requests.Rename, renameHandler },
 | 
					        .{ "textDocument/rename", requests.Rename, renameHandler },
 | 
				
			||||||
        .{ "textDocument/references", requests.References, referencesHandler },
 | 
					        .{ "textDocument/references", requests.References, referencesHandler },
 | 
				
			||||||
 | 
					        .{ "workspace/didChangeConfiguration", requests.Configuration, didChangeConfigurationHandler },
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Hack to avoid `return`ing in the inline for, which causes bugs.
 | 
					    // Hack to avoid `return`ing in the inline for, which causes bugs.
 | 
				
			||||||
@ -1867,7 +1892,7 @@ pub fn main() anyerror!void {
 | 
				
			|||||||
        const buf = try arena.allocator().alloc(u8, headers.content_length);
 | 
					        const buf = try arena.allocator().alloc(u8, headers.content_length);
 | 
				
			||||||
        try reader.readNoEof(buf);
 | 
					        try reader.readNoEof(buf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        try processJsonRpc(&arena, &json_parser, buf, config);
 | 
					        try processJsonRpc(&arena, &json_parser, buf, &config);
 | 
				
			||||||
        json_parser.reset();
 | 
					        json_parser.reset();
 | 
				
			||||||
        arena.deinit();
 | 
					        arena.deinit();
 | 
				
			||||||
        arena.state = .{};
 | 
					        arena.state = .{};
 | 
				
			||||||
 | 
				
			|||||||
@ -147,6 +147,7 @@ const MaybeStringArray = Default([]const []const u8, &.{});
 | 
				
			|||||||
pub const Initialize = struct {
 | 
					pub const Initialize = struct {
 | 
				
			||||||
    pub const ClientCapabilities = struct {
 | 
					    pub const ClientCapabilities = struct {
 | 
				
			||||||
        workspace: ?struct {
 | 
					        workspace: ?struct {
 | 
				
			||||||
 | 
					            configuration: Default(bool, false),
 | 
				
			||||||
            workspaceFolders: Default(bool, false),
 | 
					            workspaceFolders: Default(bool, false),
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        textDocument: ?struct {
 | 
					        textDocument: ?struct {
 | 
				
			||||||
@ -256,3 +257,21 @@ pub const References = struct {
 | 
				
			|||||||
        },
 | 
					        },
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pub const Configuration = struct {
 | 
				
			||||||
 | 
					    params: struct {
 | 
				
			||||||
 | 
					        settings: struct {
 | 
				
			||||||
 | 
					            enable_snippets: ?bool,
 | 
				
			||||||
 | 
					            zig_lib_path: ?[]const u8,
 | 
				
			||||||
 | 
					            zig_exe_path: ?[]const u8,
 | 
				
			||||||
 | 
					            warn_style: ?bool,
 | 
				
			||||||
 | 
					            build_runner_path: ?[]const u8,
 | 
				
			||||||
 | 
					            build_runner_cache_path: ?[]const u8,
 | 
				
			||||||
 | 
					            enable_semantic_tokens: ?bool,
 | 
				
			||||||
 | 
					            operator_completions: ?bool,
 | 
				
			||||||
 | 
					            include_at_in_builtins: ?bool,
 | 
				
			||||||
 | 
					            max_detail_length: ?usize,
 | 
				
			||||||
 | 
					            skip_std_references: ?bool,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
				
			|||||||
@ -43,6 +43,7 @@ pub const ResponseParams = union(enum) {
 | 
				
			|||||||
    Locations: []Location,
 | 
					    Locations: []Location,
 | 
				
			||||||
    WorkspaceEdit: WorkspaceEdit,
 | 
					    WorkspaceEdit: WorkspaceEdit,
 | 
				
			||||||
    InitializeResult: InitializeResult,
 | 
					    InitializeResult: InitializeResult,
 | 
				
			||||||
 | 
					    ConfigurationParams: ConfigurationParams,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// JSONRPC notifications
 | 
					/// JSONRPC notifications
 | 
				
			||||||
@ -74,6 +75,12 @@ pub const Response = struct {
 | 
				
			|||||||
    result: ResponseParams,
 | 
					    result: ResponseParams,
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pub const Request = struct {
 | 
				
			||||||
 | 
					    jsonrpc: string = "2.0",
 | 
				
			||||||
 | 
					    method: []const u8,
 | 
				
			||||||
 | 
					    params: ?ResponseParams,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// Type of a debug message
 | 
					/// Type of a debug message
 | 
				
			||||||
pub const MessageType = enum(i64) {
 | 
					pub const MessageType = enum(i64) {
 | 
				
			||||||
    Error = 1,
 | 
					    Error = 1,
 | 
				
			||||||
@ -369,3 +376,12 @@ const InitializeResult = struct {
 | 
				
			|||||||
        version: ?string = null,
 | 
					        version: ?string = null,
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					pub const ConfigurationParams = struct {
 | 
				
			||||||
 | 
					    items: []const ConfigurationItem,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    pub const ConfigurationItem = struct {
 | 
				
			||||||
 | 
					        scopeUri: ?[]const u8,
 | 
				
			||||||
 | 
					        section: ?[]const u8,
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user