Merge pull request #648 from Techatrix/dev
Refactor builtin_completions
This commit is contained in:
		
						commit
						eaa19d8a13
					
				@ -26,6 +26,7 @@ config: Config,
 | 
			
		||||
allocator: std.mem.Allocator = undefined,
 | 
			
		||||
arena: std.heap.ArenaAllocator = undefined,
 | 
			
		||||
document_store: DocumentStore = undefined,
 | 
			
		||||
builtin_completions: ?std.ArrayListUnmanaged(types.CompletionItem) = null,
 | 
			
		||||
client_capabilities: ClientCapabilities = .{},
 | 
			
		||||
offset_encoding: offsets.Encoding = .utf16,
 | 
			
		||||
keep_running: bool = true,
 | 
			
		||||
@ -1387,39 +1388,33 @@ fn completeLabel(
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var builtin_completions: ?[]types.CompletionItem = null;
 | 
			
		||||
fn populateBuiltinCompletions(builtin_completions: *std.ArrayListUnmanaged(types.CompletionItem), config: Config) !void {
 | 
			
		||||
    for (data.builtins) |builtin| {
 | 
			
		||||
        const insert_text = if (config.enable_snippets) builtin.snippet else builtin.name;
 | 
			
		||||
        builtin_completions.appendAssumeCapacity(.{
 | 
			
		||||
            .label = builtin.name,
 | 
			
		||||
            .kind = .Function,
 | 
			
		||||
            .filterText = builtin.name[1..],
 | 
			
		||||
            .detail = builtin.signature,
 | 
			
		||||
            .insertText = if (config.include_at_in_builtins) insert_text else insert_text[1..],
 | 
			
		||||
            .insertTextFormat = if (config.enable_snippets) .Snippet else .PlainText,
 | 
			
		||||
            .documentation = .{
 | 
			
		||||
                .kind = .Markdown,
 | 
			
		||||
                .value = builtin.documentation,
 | 
			
		||||
            },
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    truncateCompletions(builtin_completions.items, config.max_detail_length);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn completeBuiltin(server: *Server, writer: anytype, id: types.RequestId) !void {
 | 
			
		||||
    const tracy_zone = tracy.trace(@src());
 | 
			
		||||
    defer tracy_zone.end();
 | 
			
		||||
 | 
			
		||||
    if (builtin_completions == null) {
 | 
			
		||||
        builtin_completions = try server.allocator.alloc(types.CompletionItem, data.builtins.len);
 | 
			
		||||
        for (data.builtins) |builtin, idx| {
 | 
			
		||||
            builtin_completions.?[idx] = types.CompletionItem{
 | 
			
		||||
                .label = builtin.name,
 | 
			
		||||
                .kind = .Function,
 | 
			
		||||
                .filterText = builtin.name[1..],
 | 
			
		||||
                .detail = builtin.signature,
 | 
			
		||||
                .documentation = .{
 | 
			
		||||
                    .kind = .Markdown,
 | 
			
		||||
                    .value = builtin.documentation,
 | 
			
		||||
                },
 | 
			
		||||
            };
 | 
			
		||||
 | 
			
		||||
            var insert_text: []const u8 = undefined;
 | 
			
		||||
            if (server.config.enable_snippets) {
 | 
			
		||||
                insert_text = builtin.snippet;
 | 
			
		||||
                builtin_completions.?[idx].insertTextFormat = .Snippet;
 | 
			
		||||
            } else {
 | 
			
		||||
                insert_text = builtin.name;
 | 
			
		||||
            }
 | 
			
		||||
            builtin_completions.?[idx].insertText =
 | 
			
		||||
                if (server.config.include_at_in_builtins)
 | 
			
		||||
                insert_text
 | 
			
		||||
            else
 | 
			
		||||
                insert_text[1..];
 | 
			
		||||
        }
 | 
			
		||||
        truncateCompletions(builtin_completions.?, server.config.max_detail_length);
 | 
			
		||||
    if (server.builtin_completions == null) {
 | 
			
		||||
        server.builtin_completions = try std.ArrayListUnmanaged(types.CompletionItem).initCapacity(server.allocator, data.builtins.len);
 | 
			
		||||
        try populateBuiltinCompletions(&server.builtin_completions.?, server.config);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    try send(writer, server.arena.allocator(), types.Response{
 | 
			
		||||
@ -1427,7 +1422,7 @@ fn completeBuiltin(server: *Server, writer: anytype, id: types.RequestId) !void
 | 
			
		||||
        .result = .{
 | 
			
		||||
            .CompletionList = .{
 | 
			
		||||
                .isIncomplete = false,
 | 
			
		||||
                .items = builtin_completions.?,
 | 
			
		||||
                .items = server.builtin_completions.?.items,
 | 
			
		||||
            },
 | 
			
		||||
        },
 | 
			
		||||
    });
 | 
			
		||||
@ -2642,7 +2637,7 @@ pub fn deinit(server: *Server) void {
 | 
			
		||||
    const config_parse_options = std.json.ParseOptions{ .allocator = server.allocator };
 | 
			
		||||
    defer std.json.parseFree(Config, server.config, config_parse_options);
 | 
			
		||||
 | 
			
		||||
    if (builtin_completions) |compls| {
 | 
			
		||||
        server.allocator.free(compls);
 | 
			
		||||
    if (server.builtin_completions) |*compls| {
 | 
			
		||||
        compls.deinit(server.allocator);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user