Free json parser state, compute builtin completions at comptime
This commit is contained in:
		
							parent
							
								
									a7e4d0b5e3
								
							
						
					
					
						commit
						c5d3d7902e
					
				
							
								
								
									
										47
									
								
								src/main.zig
									
									
									
									
									
								
							
							
						
						
									
										47
									
								
								src/main.zig
									
									
									
									
									
								
							@ -223,11 +223,39 @@ pub fn completeGlobal(id: i64, document: types.TextDocument) !void {
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
// Compute builtin completions at comptime.
 | 
			
		||||
const builtin_completions = block: {
 | 
			
		||||
    @setEvalBranchQuota(3_500);
 | 
			
		||||
    var temp: [data.builtins.len]types.CompletionItem = undefined;
 | 
			
		||||
 | 
			
		||||
    for (data.builtins) |builtin, i| {
 | 
			
		||||
        var cutoff = std.mem.indexOf(u8, builtin, "(") orelse builtin.len;
 | 
			
		||||
        temp[i] = types.CompletionItem{
 | 
			
		||||
            .label = builtin[0..cutoff],
 | 
			
		||||
            .kind = types.CompletionItemKind.Function,
 | 
			
		||||
 | 
			
		||||
            .filterText = builtin[1..cutoff],
 | 
			
		||||
            .insertText = builtin[1..],
 | 
			
		||||
            .insertTextFormat = types.InsertTextFormat.Snippet,
 | 
			
		||||
            .detail = data.builtin_details[i],
 | 
			
		||||
            .documentation = types.MarkupContent{
 | 
			
		||||
                .kind = types.MarkupKind.Markdown,
 | 
			
		||||
                .value = data.builtin_docs[i]
 | 
			
		||||
            }
 | 
			
		||||
        };
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    break :block temp;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// pub fn signature
 | 
			
		||||
 | 
			
		||||
pub fn processJsonRpc(json: []const u8) !void {
 | 
			
		||||
 | 
			
		||||
    var parser = std.json.Parser.init(allocator, false);
 | 
			
		||||
    defer parser.deinit();
 | 
			
		||||
 | 
			
		||||
    var tree = try parser.parse(json);
 | 
			
		||||
    defer tree.deinit();
 | 
			
		||||
 | 
			
		||||
@ -310,25 +338,6 @@ pub fn processJsonRpc(json: []const u8) !void {
 | 
			
		||||
            const char = document.text[pos_index];
 | 
			
		||||
            
 | 
			
		||||
            if (char == '@') {
 | 
			
		||||
                var builtin_completions: [data.builtins.len]types.CompletionItem = undefined;
 | 
			
		||||
 | 
			
		||||
                for (data.builtins) |builtin, i| {
 | 
			
		||||
                    var cutoff = std.mem.indexOf(u8, builtin, "(") orelse builtin.len;
 | 
			
		||||
                    builtin_completions[i] = types.CompletionItem{
 | 
			
		||||
                        .label = builtin[0..cutoff],
 | 
			
		||||
                        .kind = types.CompletionItemKind.Function,
 | 
			
		||||
                        
 | 
			
		||||
                        .filterText = builtin[1..cutoff],
 | 
			
		||||
                        .insertText = builtin[1..],
 | 
			
		||||
                        .insertTextFormat = types.InsertTextFormat.Snippet,
 | 
			
		||||
                        .detail = data.builtin_details[i],
 | 
			
		||||
                        .documentation = types.MarkupContent{
 | 
			
		||||
                            .kind = types.MarkupKind.Markdown,
 | 
			
		||||
                            .value = data.builtin_docs[i]
 | 
			
		||||
                        }
 | 
			
		||||
                    };
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                try send(types.Response{
 | 
			
		||||
                    .id = .{.Integer = id},
 | 
			
		||||
                    .result = types.ResponseParams{
 | 
			
		||||
 | 
			
		||||
@ -203,7 +203,7 @@ pub const MarkupContent = struct {
 | 
			
		||||
 | 
			
		||||
pub const CompletionList = struct {
 | 
			
		||||
    isIncomplete: Bool,
 | 
			
		||||
    items: []CompletionItem,
 | 
			
		||||
    items: []const CompletionItem,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
pub const CompletionItemKind = enum(Integer) {
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user