-
Notifications
You must be signed in to change notification settings - Fork 13k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Error message for closure that requires |_|
is vague
#104690
Comments
Filter's predicate must be a type that implements a block created with Adding https://doc.rust-lang.org/stable/std/option/enum.Option.html#method.filter |
Coming back because I also think there's a cleaner way to do this: let blerg = if template.target_path.exists() {
std::fs::read_to_string(&template.target_path).unwrap().trim() == contents.trim()
} else {
false
}; |
With some help from social friends https://ruby.social/@Schneems/109384543463801280. I've got some more language to explain what's happening versus what I was expecting. I Intended to use a closure with no arguments, but
especially:
Was confusing to me. Because in my head, I looked at the docs and I think in this case, I would have like to be drawn to this section:
Maybe something like
Which gets me a different error message and eventually leads me to
I don't know how difficult such detection/suggestion would be. |
Rollup merge of rust-lang#117106 - estebank:issue-27300, r=petrochenkov When expecting closure argument but finding block provide suggestion Detect if there is a potential typo where the `{` meant to open the closure body was written before the body. ``` error[E0277]: expected a `FnOnce<({integer},)>` closure, found `Option<usize>` --> $DIR/ruby_style_closure_successful_parse.rs:3:31 | LL | let p = Some(45).and_then({|x| | ______________________--------_^ | | | | | required by a bound introduced by this call LL | | 1 + 1; LL | | Some(x * 2) | | ----------- this tail expression is of type `Option<usize>` LL | | }); | |_____^ expected an `FnOnce<({integer},)>` closure, found `Option<usize>` | = help: the trait `FnOnce<({integer},)>` is not implemented for `Option<usize>` note: required by a bound in `Option::<T>::and_then` --> $SRC_DIR/core/src/option.rs:LL:COL help: you might have meant to open the closure body instead of placing a closure within a block | LL - let p = Some(45).and_then({|x| LL + let p = Some(45).and_then(|x| { | ``` Detect the potential typo where the closure header is missing. ``` error[E0277]: expected a `FnOnce<(&bool,)>` closure, found `bool` --> $DIR/block_instead_of_closure_in_arg.rs:3:23 | LL | Some(true).filter({ | _________________------_^ | | | | | required by a bound introduced by this call LL | |/ if number % 2 == 0 { LL | || number == 0 LL | || } else { LL | || number != 0 LL | || } | ||_________- this tail expression is of type `bool` LL | | }); | |______^ expected an `FnOnce<(&bool,)>` closure, found `bool` | = help: the trait `for<'a> FnOnce<(&'a bool,)>` is not implemented for `bool` note: required by a bound in `Option::<T>::filter` --> $SRC_DIR/core/src/option.rs:LL:COL help: you might have meant to create the closure instead of a block | LL | Some(true).filter(|_| { | +++ ``` Partially address rust-lang#27300. Fix rust-lang#104690.
Given the following code: https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=2fecf0a7fbaba8101daba7d1a1ec1837
The current output is:
Should reference:
As this is the correct code that compiles:
Using
If it helps, I'm trying to find a way to conditionally read in a file only if it exists. I was experimenting with this format:
Also worth mentioning in the explanation
|_|
does not show up at all:The text was updated successfully, but these errors were encountered: