Sema: suggest using try/catch/if on method call on error union

This commit is contained in:
Wooster 2023-07-30 11:10:41 +02:00 committed by wooster0
parent 9ae43567a3
commit f14cf13ff8
2 changed files with 24 additions and 0 deletions

View File

@ -27888,6 +27888,9 @@ fn fieldCallBind(
const decl = mod.declPtr(decl_idx);
try mod.errNoteNonLazy(decl.srcLoc(mod), msg, "'{}' is not a member function", .{field_name.fmt(ip)});
}
if (concrete_ty.zigTypeTag(mod) == .ErrorUnion) {
try sema.errNote(block, src, msg, "consider using 'try', 'catch', or 'if'", .{});
}
break :msg msg;
};
return sema.failWithOwnedErrorMsg(block, msg);

View File

@ -0,0 +1,21 @@
const X = struct {
fn init() !X {
return error.a;
}
fn a(x: X) void {
_ = x;
}
};
export fn entry() void {
const x = X.init();
x.a();
}
// error
// backend=stage2
// target=native
//
// :13:6: error: no field or member function named 'a' in '@typeInfo(@typeInfo(@TypeOf(tmp.X.init)).Fn.return_type.?).ErrorUnion.error_set!tmp.X'
// :13:6: note: consider using 'try', 'catch', or 'if'