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