Fix inferred error set return types
This commit is contained in:
parent
e2f4bbf2f3
commit
53c37765c0
@ -63,6 +63,7 @@ The following options are currently available.
|
|||||||
| `build_runner_cache_path` | `?[]const u8` | `null` | Path to a directroy that will be used as zig's cache when running `zig run build_runner.zig ...`. `null` is equivalent to `${KnownFloders.Cache}/zls` |
|
| `build_runner_cache_path` | `?[]const u8` | `null` | Path to a directroy that will be used as zig's cache when running `zig run build_runner.zig ...`. `null` is equivalent to `${KnownFloders.Cache}/zls` |
|
||||||
| `enable_semantic_tokens` | `bool` | `true` | Enables semantic token support when the client also supports it. |
|
| `enable_semantic_tokens` | `bool` | `true` | Enables semantic token support when the client also supports it. |
|
||||||
| `operator_completions` | `bool` | `true` | Enables `*` and `?` operators in completion lists. |
|
| `operator_completions` | `bool` | `true` | Enables `*` and `?` operators in completion lists. |
|
||||||
|
| `skip_std_references` | `bool` | `false` | When true, skips searching for references in std. Improves lookup speed for functions in user's code. Renaming and go-to-definition will continue to work as is.
|
||||||
|
|
||||||
## Features
|
## Features
|
||||||
|
|
||||||
|
@ -467,8 +467,24 @@ pub fn resolveReturnType(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (fn_decl.ast.return_type == 0) return null;
|
if (fn_decl.ast.return_type == 0) return null;
|
||||||
return ((try resolveTypeOfNodeInternal(store, arena, .{
|
const return_type = fn_decl.ast.return_type;
|
||||||
.node = fn_decl.ast.return_type,
|
|
||||||
|
const is_inferred_error = tree.tokens.items(.tag)[tree.firstToken(return_type) - 1] == .bang;
|
||||||
|
return if (is_inferred_error) block: {
|
||||||
|
const child_type = (try resolveTypeOfNodeInternal(store, arena, .{
|
||||||
|
.node = return_type,
|
||||||
|
.handle = handle,
|
||||||
|
}, bound_type_params)) orelse return null;
|
||||||
|
const child_type_node = switch (child_type.type.data) {
|
||||||
|
.other => |n| n,
|
||||||
|
else => return null,
|
||||||
|
};
|
||||||
|
break :block TypeWithHandle{
|
||||||
|
.type = .{ .data = .{ .error_union = child_type_node }, .is_type_val = false },
|
||||||
|
.handle = child_type.handle,
|
||||||
|
};
|
||||||
|
} else ((try resolveTypeOfNodeInternal(store, arena, .{
|
||||||
|
.node = return_type,
|
||||||
.handle = handle,
|
.handle = handle,
|
||||||
}, bound_type_params)) orelse return null).instanceTypeVal();
|
}, bound_type_params)) orelse return null).instanceTypeVal();
|
||||||
}
|
}
|
||||||
@ -509,6 +525,7 @@ fn resolveUnwrapErrorType(
|
|||||||
},
|
},
|
||||||
.primitive, .slice, .pointer => return null,
|
.primitive, .slice, .pointer => return null,
|
||||||
};
|
};
|
||||||
|
|
||||||
if (rhs.handle.tree.nodes.items(.tag)[rhs_node] == .error_union) {
|
if (rhs.handle.tree.nodes.items(.tag)[rhs_node] == .error_union) {
|
||||||
return ((try resolveTypeOfNodeInternal(store, arena, .{
|
return ((try resolveTypeOfNodeInternal(store, arena, .{
|
||||||
.node = rhs.handle.tree.nodes.items(.data)[rhs_node].rhs,
|
.node = rhs.handle.tree.nodes.items(.data)[rhs_node].rhs,
|
||||||
|
@ -366,7 +366,6 @@ fn nodeToCompletion(
|
|||||||
.arena = arena,
|
.arena = arena,
|
||||||
.orig_handle = orig_handle,
|
.orig_handle = orig_handle,
|
||||||
};
|
};
|
||||||
logger.debug("eklafgaef", .{});
|
|
||||||
try analysis.iterateSymbolsContainer(&document_store, arena, node_handle, orig_handle, declToCompletion, context, !is_type_val);
|
try analysis.iterateSymbolsContainer(&document_store, arena, node_handle, orig_handle, declToCompletion, context, !is_type_val);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -623,9 +622,8 @@ fn hoverSymbol(
|
|||||||
const first_token = param.first_doc_comment orelse
|
const first_token = param.first_doc_comment orelse
|
||||||
param.comptime_noalias orelse
|
param.comptime_noalias orelse
|
||||||
param.name_token orelse
|
param.name_token orelse
|
||||||
param.anytype_ellipsis3 orelse
|
|
||||||
tree.firstToken(param.type_expr);
|
tree.firstToken(param.type_expr);
|
||||||
const last_token = tree.lastToken(param.type_expr);
|
const last_token = tree.lastToken(param.anytype_ellipsis3 orelse param.type_expr);
|
||||||
|
|
||||||
const start = offsets.tokenLocation(tree, first_token).start;
|
const start = offsets.tokenLocation(tree, first_token).start;
|
||||||
const end = offsets.tokenLocation(tree, last_token).end;
|
const end = offsets.tokenLocation(tree, last_token).end;
|
||||||
|
Loading…
Reference in New Issue
Block a user