Fix various bugs
This commit is contained in:
parent
b71585da1d
commit
213366f029
@ -438,19 +438,16 @@ fn resolveDerefType(
|
||||
else => return null,
|
||||
};
|
||||
|
||||
if (deref_node.cast(ast.Node.SimplePrefixOp)) |pop| {
|
||||
if (deref_node.tag == .PtrType) {
|
||||
const op_token_id = deref.handle.tree.token_ids[pop.op_token];
|
||||
switch (op_token_id) {
|
||||
.Asterisk => {
|
||||
return ((try resolveTypeOfNodeInternal(store, arena, .{
|
||||
.node = pop.rhs,
|
||||
.handle = deref.handle,
|
||||
}, bound_type_params)) orelse return null).instanceTypeVal();
|
||||
},
|
||||
.LBracket, .AsteriskAsterisk => return null,
|
||||
else => unreachable,
|
||||
}
|
||||
if (deref_node.castTag(.PtrType)) |ptr_type| {
|
||||
switch (deref.handle.tree.token_ids[ptr_type.op_token]) {
|
||||
.Asterisk => {
|
||||
return ((try resolveTypeOfNodeInternal(store, arena, .{
|
||||
.node = ptr_type.rhs,
|
||||
.handle = deref.handle,
|
||||
}, bound_type_params)) orelse return null).instanceTypeVal();
|
||||
},
|
||||
.LBracket, .AsteriskAsterisk => return null,
|
||||
else => unreachable,
|
||||
}
|
||||
}
|
||||
return null;
|
||||
@ -824,7 +821,7 @@ pub fn resolveTypeOfNodeInternal(
|
||||
},
|
||||
.FnProto => {
|
||||
// This is a function type
|
||||
if (node.castTag(.FnProto).?.trailer_flags.has("name_token")) {
|
||||
if (!node.castTag(.FnProto).?.trailer_flags.has("name_token")) {
|
||||
return TypeWithHandle.typeVal(node_handle);
|
||||
}
|
||||
return TypeWithHandle{
|
||||
@ -1010,7 +1007,7 @@ pub fn getFieldAccessType(
|
||||
tokenizer: *std.zig.Tokenizer,
|
||||
) !?FieldAccessReturn {
|
||||
var current_type = TypeWithHandle.typeVal(.{
|
||||
.node = &handle.tree.root_node.base,
|
||||
.node = undefined,
|
||||
.handle = handle,
|
||||
});
|
||||
|
||||
|
15
src/main.zig
15
src/main.zig
@ -428,16 +428,11 @@ fn nodeToCompletion(
|
||||
}
|
||||
|
||||
const ptr_type = node.castTag(.PtrType).?;
|
||||
if (ptr_type.rhs.cast(std.zig.ast.Node.SimplePrefixOp)) |child_pop| {
|
||||
switch (ptr_type.rhs.tag) {
|
||||
.ArrayType => {
|
||||
try list.append(.{
|
||||
.label = "len",
|
||||
.kind = .Field,
|
||||
});
|
||||
},
|
||||
else => {},
|
||||
}
|
||||
if (ptr_type.rhs.castTag(.ArrayType) != null) {
|
||||
try list.append(.{
|
||||
.label = "len",
|
||||
.kind = .Field,
|
||||
});
|
||||
} else if (unwrapped) |actual_type| {
|
||||
try typeToCompletion(arena, list, .{ .original = actual_type }, orig_handle, config);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user