Fixed errors after upstream merge
This commit is contained in:
		
							parent
							
								
									2c5cc2b48f
								
							
						
					
					
						commit
						07a44bc0ed
					
				@ -274,7 +274,7 @@ pub fn resolveTypeOfNode(analysis_ctx: *AnalysisContext, node: *ast.Node) ?*ast.
 | 
			
		||||
            const suffix_op = node.cast(ast.Node.SuffixOp).?;
 | 
			
		||||
            switch (suffix_op.op) {
 | 
			
		||||
                .Call, .StructInitializer => {
 | 
			
		||||
                	const func_decl = resolveTypeOfNode(analysis_ctx, suffix_op.lhs.node) orelse return null;
 | 
			
		||||
                    const func_decl = resolveTypeOfNode(analysis_ctx, suffix_op.lhs.node) orelse return null;
 | 
			
		||||
 | 
			
		||||
                    if (func_decl.id == .FnProto) {
 | 
			
		||||
                        const func = node.cast(ast.Node.FnProto).?;
 | 
			
		||||
 | 
			
		||||
@ -52,7 +52,10 @@ pub fn init(self: *DocumentStore, allocator: *std.mem.Allocator, zig_lib_path: ?
 | 
			
		||||
fn newDocument(self: *DocumentStore, uri: []const u8, text: []u8) !*Handle {
 | 
			
		||||
    std.debug.warn("Opened document: {}\n", .{uri});
 | 
			
		||||
 | 
			
		||||
    var handle = Handle{
 | 
			
		||||
    var handle = try self.allocator.create(Handle);
 | 
			
		||||
    errdefer self.allocator.destroy(handle);
 | 
			
		||||
 | 
			
		||||
    handle.* = Handle{
 | 
			
		||||
        .count = 1,
 | 
			
		||||
        .import_uris = std.ArrayList([]const u8).init(self.allocator),
 | 
			
		||||
        .document = .{
 | 
			
		||||
@ -61,9 +64,9 @@ fn newDocument(self: *DocumentStore, uri: []const u8, text: []u8) !*Handle {
 | 
			
		||||
            .mem = text,
 | 
			
		||||
        },
 | 
			
		||||
    };
 | 
			
		||||
    try self.checkSanity(&handle);
 | 
			
		||||
    try self.checkSanity(handle);
 | 
			
		||||
    const kv = try self.handles.getOrPutValue(uri, handle);
 | 
			
		||||
    return &kv.value;
 | 
			
		||||
    return kv.value;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub fn openDocument(self: *DocumentStore, uri: []const u8, text: []const u8) !*Handle {
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										71
									
								
								src/main.zig
									
									
									
									
									
								
							
							
						
						
									
										71
									
								
								src/main.zig
									
									
									
									
									
								
							@ -298,6 +298,15 @@ fn completeGlobal(id: i64, pos_index: usize, handle: DocumentStore.Handle, confi
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn nodePosition(tree: *std.zig.ast.Tree, node: *std.zig.ast.Node) types.Position {
 | 
			
		||||
    const location = tree.tokenLocation(0, node.firstToken());
 | 
			
		||||
 | 
			
		||||
    return types.Position{
 | 
			
		||||
        .line = @intCast(i64, location.line),
 | 
			
		||||
        .character = @intCast(i64, location.column),
 | 
			
		||||
    };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
fn completeFieldAccess(id: i64, handle: *DocumentStore.Handle, position: types.Position, line_start_idx: usize, config: Config) !void {
 | 
			
		||||
    var arena = std.heap.ArenaAllocator.init(allocator);
 | 
			
		||||
    defer arena.deinit();
 | 
			
		||||
@ -312,49 +321,37 @@ fn completeFieldAccess(id: i64, handle: *DocumentStore.Handle, position: types.P
 | 
			
		||||
 | 
			
		||||
    // var decls = try analysis.declsFromIndex(&arena.allocator, analysis_ctx.tree, try handle.document.positionToIndex(position));
 | 
			
		||||
    if (analysis.getFieldAccessTypeNode(&analysis_ctx, &tokenizer)) |node| {
 | 
			
		||||
        var index: usize = 0;
 | 
			
		||||
        while (node.iterate(index)) |child_node| {
 | 
			
		||||
            if (analysis.isNodePublic(analysis_ctx.tree, child_node)) {
 | 
			
		||||
                // TODO: Not great to allocate it again and again inside a loop
 | 
			
		||||
                // Creating a new context, so that we don't destroy the tree that is iterated above when resolving imports
 | 
			
		||||
                const initial_handle = analysis_ctx.handle;
 | 
			
		||||
                std.debug.warn("\ncompleteFieldAccess calling resolveTypeOfNode for {}\n", .{analysis_ctx.tree.getNodeSource(child_node)});
 | 
			
		||||
                var node_analysis_ctx = (try document_store.analysisContext(initial_handle, &arena)) orelse {
 | 
			
		||||
                    return send(types.Response{
 | 
			
		||||
                        .id = .{ .Integer = id },
 | 
			
		||||
                        .result = .{
 | 
			
		||||
                            .CompletionList = .{
 | 
			
		||||
                                .isIncomplete = true,
 | 
			
		||||
                                .items = completions.items,
 | 
			
		||||
                            },
 | 
			
		||||
                        },
 | 
			
		||||
                    });
 | 
			
		||||
                };
 | 
			
		||||
                defer node_analysis_ctx.deinit();
 | 
			
		||||
        try nodeToCompletion(&completions, analysis_ctx.tree, node, config);
 | 
			
		||||
        // var index: usize = 0;
 | 
			
		||||
        // while (node.iterate(index)) |child_node| {
 | 
			
		||||
        //     if (analysis.isNodePublic(analysis_ctx.tree, child_node)) {
 | 
			
		||||
        //         // TODO: Not great to allocate it again and again inside a loop
 | 
			
		||||
        //         // Creating a new context, so that we don't destroy the tree that is iterated above when resolving imports
 | 
			
		||||
        //         const initial_handle = analysis_ctx.handle;
 | 
			
		||||
        //         std.debug.warn("\ncompleteFieldAccess calling resolveTypeOfNode for {}\n", .{analysis_ctx.tree.getNodeSource(child_node)});
 | 
			
		||||
        //         var node_analysis_ctx = try document_store.analysisContext(initial_handle, &arena, nodePosition(analysis_ctx.tree, node));
 | 
			
		||||
        //         defer node_analysis_ctx.deinit();
 | 
			
		||||
 | 
			
		||||
                const resolved_node = analysis.resolveTypeOfNode(&node_analysis_ctx, child_node);
 | 
			
		||||
                if (resolved_node) |n| {
 | 
			
		||||
                    std.debug.warn("completeFieldAccess resolveTypeOfNode result = {}\n", .{resolved_node});
 | 
			
		||||
                }
 | 
			
		||||
        //         const resolved_node = analysis.resolveTypeOfNode(&node_analysis_ctx, child_node);
 | 
			
		||||
        //         if (resolved_node) |n| {
 | 
			
		||||
        //             std.debug.warn("completeFieldAccess resolveTypeOfNode result = {}\n", .{resolved_node});
 | 
			
		||||
        //         }
 | 
			
		||||
 | 
			
		||||
                const completion_node: struct { node: *std.zig.ast.Node, context: *DocumentStore.AnalysisContext } = blk: {
 | 
			
		||||
                    if (resolved_node) |n| {
 | 
			
		||||
                        break :blk .{ .node = n, .context = &node_analysis_ctx };
 | 
			
		||||
                    }
 | 
			
		||||
        //         const completion_node: struct { node: *std.zig.ast.Node, context: *DocumentStore.AnalysisContext } = blk: {
 | 
			
		||||
        //             if (resolved_node) |n| {
 | 
			
		||||
        //                 break :blk .{ .node = n, .context = &node_analysis_ctx };
 | 
			
		||||
        //             }
 | 
			
		||||
 | 
			
		||||
                    break :blk .{ .node = child_node, .context = &analysis_ctx };
 | 
			
		||||
                };
 | 
			
		||||
        //             break :blk .{ .node = child_node, .context = &analysis_ctx };
 | 
			
		||||
        //         };
 | 
			
		||||
 | 
			
		||||
                std.debug.warn("completeFieldAccess resolved_node = {}\n", .{completion_node.context.tree.getNodeSource(completion_node.node)});
 | 
			
		||||
        //         std.debug.warn("completeFieldAccess resolved_node = {}\n", .{completion_node.context.tree.getNodeSource(completion_node.node)});
 | 
			
		||||
 | 
			
		||||
                if (try nodeToCompletion(&arena.allocator, completion_node.context.tree, completion_node.node, config)) |completion| {
 | 
			
		||||
                    try completions.append(completion);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            index += 1;
 | 
			
		||||
        }
 | 
			
		||||
        //         try nodeToCompletion(&completions, completion_node.context.tree, completion_node.node, config);
 | 
			
		||||
        //     }
 | 
			
		||||
        //     index += 1;
 | 
			
		||||
        // }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    try send(types.Response{
 | 
			
		||||
        .id = .{ .Integer = id },
 | 
			
		||||
        .result = .{
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user