Skip to content

Commit 0cb4514

Browse files
authored
Merge pull request #440 from dtolnay/result
Improve placement of diagnostic on Result without Display impl
2 parents 3db709c + 5d16467 commit 0cb4514

File tree

2 files changed

+7
-5
lines changed

2 files changed

+7
-5
lines changed

macro/src/expand.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -670,12 +670,14 @@ fn expand_rust_function_shim_super(
670670
let args = sig.args.iter().map(|arg| quote!(#arg));
671671
let all_args = receiver.chain(args);
672672

673-
let ret = if sig.throws {
673+
let ret = if let Some((result, _langle, rangle)) = sig.throws_tokens {
674674
let ok = match &sig.ret {
675675
Some(ret) => quote!(#ret),
676676
None => quote!(()),
677677
};
678-
quote!(-> ::std::result::Result<#ok, impl ::std::fmt::Display>)
678+
let impl_trait = quote_spanned!(result.span=> impl);
679+
let display = quote_spanned!(rangle.span=> ::std::fmt::Display);
680+
quote!(-> ::std::result::Result<#ok, #impl_trait #display>)
679681
} else {
680682
expand_return_type(&sig.ret)
681683
};

tests/ui/result_no_display.stderr

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
error[E0277]: `NonError` doesn't implement `std::fmt::Display`
2-
--> $DIR/result_no_display.rs:1:1
2+
--> $DIR/result_no_display.rs:4:19
33
|
4-
1 | #[cxx::bridge]
5-
| ^^^^^^^^^^^^^^ `NonError` cannot be formatted with the default formatter
4+
4 | fn f() -> Result<()>;
5+
| ^^^^^^^^^^ `NonError` cannot be formatted with the default formatter
66
|
77
= help: the trait `std::fmt::Display` is not implemented for `NonError`
88
= note: in format strings you may be able to use `{:?}` (or {:#?} for pretty-print) instead

0 commit comments

Comments
 (0)