mirror of
https://github.com/rust-lang/rust.git
synced 2025-04-15 05:26:47 +00:00
Auto merge of #107584 - matthiaskrgr:rollup-vav4ljz, r=matthiaskrgr
Rollup of 5 pull requests Successful merges: - #107201 (Remove confusing 'while checking' note from opaque future type mismatches) - #107312 (Add Style Guide rules for let-else statements) - #107488 (Fix syntax in `-Zunpretty-expanded` output for derived `PartialEq`.) - #107531 (Inline CSS background images directly into the CSS) - #107576 (Add proc-macro boilerplate to crt-static test) Failed merges: r? `@ghost` `@rustbot` modify labels: rollup
This commit is contained in:
commit
a9985cf172
@ -29,16 +29,30 @@ pub fn expand_deriving_partial_eq(
|
||||
cx.span_bug(field.span, "not exactly 2 arguments in `derive(PartialEq)`");
|
||||
};
|
||||
|
||||
// We received `&T` arguments. Convert them to `T` by
|
||||
// stripping `&` or adding `*`. This isn't necessary for
|
||||
// type checking, but it results in much better error
|
||||
// messages if something goes wrong.
|
||||
// We received arguments of type `&T`. Convert them to type `T` by stripping
|
||||
// any leading `&` or adding `*`. This isn't necessary for type checking, but
|
||||
// it results in better error messages if something goes wrong.
|
||||
//
|
||||
// Note: for arguments that look like `&{ x }`, which occur with packed
|
||||
// structs, this would cause expressions like `{ self.x } == { other.x }`,
|
||||
// which isn't valid Rust syntax. This wouldn't break compilation because these
|
||||
// AST nodes are constructed within the compiler. But it would mean that code
|
||||
// printed by `-Zunpretty=expanded` (or `cargo expand`) would have invalid
|
||||
// syntax, which would be suboptimal. So we wrap these in parens, giving
|
||||
// `({ self.x }) == ({ other.x })`, which is valid syntax.
|
||||
let convert = |expr: &P<Expr>| {
|
||||
if let ExprKind::AddrOf(BorrowKind::Ref, Mutability::Not, inner) =
|
||||
&expr.kind
|
||||
{
|
||||
inner.clone()
|
||||
if let ExprKind::Block(..) = &inner.kind {
|
||||
// `&{ x }` form: remove the `&`, add parens.
|
||||
cx.expr_paren(field.span, inner.clone())
|
||||
} else {
|
||||
// `&x` form: remove the `&`.
|
||||
inner.clone()
|
||||
}
|
||||
} else {
|
||||
// No leading `&`: add a leading `*`.
|
||||
cx.expr_deref(field.span, expr.clone())
|
||||
}
|
||||
};
|
||||
|
@ -272,6 +272,10 @@ impl<'a> ExtCtxt<'a> {
|
||||
self.expr(sp, ast::ExprKind::AddrOf(ast::BorrowKind::Ref, ast::Mutability::Not, e))
|
||||
}
|
||||
|
||||
pub fn expr_paren(&self, sp: Span, e: P<ast::Expr>) -> P<ast::Expr> {
|
||||
self.expr(sp, ast::ExprKind::Paren(e))
|
||||
}
|
||||
|
||||
pub fn expr_call(
|
||||
&self,
|
||||
span: Span,
|
||||
|
@ -60,7 +60,7 @@ use crate::traits::{
|
||||
|
||||
use rustc_data_structures::fx::{FxIndexMap, FxIndexSet};
|
||||
use rustc_errors::{pluralize, struct_span_err, Diagnostic, ErrorGuaranteed, IntoDiagnosticArg};
|
||||
use rustc_errors::{Applicability, DiagnosticBuilder, DiagnosticStyledString, MultiSpan};
|
||||
use rustc_errors::{Applicability, DiagnosticBuilder, DiagnosticStyledString};
|
||||
use rustc_hir as hir;
|
||||
use rustc_hir::def::DefKind;
|
||||
use rustc_hir::def_id::{DefId, LocalDefId};
|
||||
@ -1470,51 +1470,17 @@ impl<'tcx> TypeErrCtxt<'_, 'tcx> {
|
||||
for (key, values) in types.iter() {
|
||||
let count = values.len();
|
||||
let kind = key.descr();
|
||||
let mut returned_async_output_error = false;
|
||||
for &sp in values {
|
||||
if sp.is_desugaring(DesugaringKind::Async) && !returned_async_output_error {
|
||||
if [sp] != err.span.primary_spans() {
|
||||
let mut span: MultiSpan = sp.into();
|
||||
span.push_span_label(
|
||||
sp,
|
||||
format!(
|
||||
"checked the `Output` of this `async fn`, {}{} {}{}",
|
||||
if count > 1 { "one of the " } else { "" },
|
||||
target,
|
||||
kind,
|
||||
pluralize!(count),
|
||||
),
|
||||
);
|
||||
err.span_note(
|
||||
span,
|
||||
"while checking the return type of the `async fn`",
|
||||
);
|
||||
} else {
|
||||
err.span_label(
|
||||
sp,
|
||||
format!(
|
||||
"checked the `Output` of this `async fn`, {}{} {}{}",
|
||||
if count > 1 { "one of the " } else { "" },
|
||||
target,
|
||||
kind,
|
||||
pluralize!(count),
|
||||
),
|
||||
);
|
||||
err.note("while checking the return type of the `async fn`");
|
||||
}
|
||||
returned_async_output_error = true;
|
||||
} else {
|
||||
err.span_label(
|
||||
sp,
|
||||
format!(
|
||||
"{}{} {}{}",
|
||||
if count == 1 { "the " } else { "one of the " },
|
||||
target,
|
||||
kind,
|
||||
pluralize!(count),
|
||||
),
|
||||
);
|
||||
}
|
||||
err.span_label(
|
||||
sp,
|
||||
format!(
|
||||
"{}{} {}{}",
|
||||
if count == 1 { "the " } else { "one of the " },
|
||||
target,
|
||||
kind,
|
||||
pluralize!(count),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1537,7 +1503,11 @@ impl<'tcx> TypeErrCtxt<'_, 'tcx> {
|
||||
// |
|
||||
// = note: expected unit type `()`
|
||||
// found closure `[closure@$DIR/issue-20862.rs:2:5: 2:14 x:_]`
|
||||
if !self.ignore_span.overlaps(span) {
|
||||
//
|
||||
// Also ignore opaque `Future`s that come from async fns.
|
||||
if !self.ignore_span.overlaps(span)
|
||||
&& !span.is_desugaring(DesugaringKind::Async)
|
||||
{
|
||||
self.types.entry(kind).or_default().insert(span);
|
||||
}
|
||||
}
|
||||
|
@ -99,6 +99,84 @@ let Foo {
|
||||
);
|
||||
```
|
||||
|
||||
#### else blocks (let-else statements)
|
||||
|
||||
If a let statement contains an `else` component, also known as a let-else statement,
|
||||
then the `else` component should be formatted according to the same rules as the `else` block
|
||||
in [control flow expressions (i.e. if-else, and if-let-else expressions)](./expressions.md#control-flow-expressions).
|
||||
Apply the same formatting rules to the components preceding
|
||||
the `else` block (i.e. the `let pattern: Type = initializer_expr ...` portion)
|
||||
as described [above](#let-statements)
|
||||
|
||||
Similarly to if-else expressions, if the initializer
|
||||
expression is multi-lined, then the `else` keyword and opening brace of the block (i.e. `else {`)
|
||||
should be put on the same line as the end of the initializer
|
||||
expression with a preceding space if all the following are true:
|
||||
|
||||
* The initializer expression ends with one or more closing
|
||||
parentheses, square brackets, and/or braces
|
||||
* There is nothing else on that line
|
||||
* That line is not indented beyond the indent of the first line containing the `let` keyword
|
||||
|
||||
For example:
|
||||
|
||||
```rust
|
||||
let Some(x) = y.foo(
|
||||
"abc",
|
||||
fairly_long_identifier,
|
||||
"def",
|
||||
"123456",
|
||||
"string",
|
||||
"cheese",
|
||||
) else {
|
||||
bar()
|
||||
}
|
||||
```
|
||||
|
||||
Otherwise, the `else` keyword and opening brace should be placed on the next line after the end of the initializer expression, and should not be indented (the `else` keyword should be aligned with the `let` keyword).
|
||||
|
||||
For example:
|
||||
|
||||
```rust
|
||||
let Some(x) = abcdef()
|
||||
.foo(
|
||||
"abc",
|
||||
some_really_really_really_long_ident,
|
||||
"ident",
|
||||
"123456",
|
||||
)
|
||||
.bar()
|
||||
.baz()
|
||||
.qux("fffffffffffffffff")
|
||||
else {
|
||||
foo_bar()
|
||||
}
|
||||
```
|
||||
|
||||
##### Single line let-else statements
|
||||
|
||||
The entire let-else statement may be formatted on a single line if all the following are true:
|
||||
|
||||
* the entire statement is *short*
|
||||
* the `else` block contains a single-line expression and no statements
|
||||
* the `else` block contains no comments
|
||||
* the let statement components preceding the `else` block can be formatted on a single line
|
||||
|
||||
```rust
|
||||
let Some(1) = opt else { return };
|
||||
|
||||
let Some(1) = opt else {
|
||||
return;
|
||||
};
|
||||
|
||||
let Some(1) = opt else {
|
||||
// nope
|
||||
return
|
||||
};
|
||||
```
|
||||
|
||||
Formatters may allow users to configure the value of the threshold
|
||||
used to determine whether a let-else statement is *short*.
|
||||
|
||||
### Macros in statement position
|
||||
|
||||
|
@ -814,8 +814,11 @@ so that we can apply CSS-filters to change the arrow color in themes */
|
||||
background-repeat: no-repeat;
|
||||
background-size: 20px;
|
||||
background-position: calc(100% - 2px) 56%;
|
||||
/* image is black color */
|
||||
background-image: url("down-arrow-927217e04c7463ac.svg");
|
||||
/* down arrow (image is black color) */
|
||||
background-image: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" \
|
||||
width="128" height="128" viewBox="-30 -20 176 176"><path d="M111,40.5L64,87.499L17,40.5" \
|
||||
fill="none" stroke="black" strike-linecap="square" stroke-miterlimit="10" stroke-width="12"/> \
|
||||
</svg>');
|
||||
/* changes the arrow image color */
|
||||
filter: var(--crate-search-div-filter);
|
||||
}
|
||||
@ -1444,7 +1447,10 @@ details.toggle > summary.hideme > span {
|
||||
}
|
||||
|
||||
details.toggle > summary::before {
|
||||
background: url("toggle-plus-1092eb4930d581b0.svg") no-repeat top left;
|
||||
/* toggle plus */
|
||||
background: url('data:image/svg+xml,<svg width="17" height="17" \
|
||||
shape-rendering="crispEdges" stroke="black" fill="none" xmlns="http://www.w3.org/2000/svg"><path \
|
||||
d="M5 2.5H2.5v12H5m7-12h2.5v12H12M5 8.5h7M8.5 12V8.625v0V5"/></svg>') no-repeat top left;
|
||||
content: "";
|
||||
cursor: pointer;
|
||||
width: 16px;
|
||||
@ -1522,7 +1528,10 @@ details.toggle[open] > summary.hideme > span {
|
||||
}
|
||||
|
||||
details.toggle[open] > summary::before {
|
||||
background: url("toggle-minus-31bbd6e4c77f5c96.svg") no-repeat top left;
|
||||
/* toggle minus */
|
||||
background: url('data:image/svg+xml,<svg width="17" height="17" \
|
||||
shape-rendering="crispEdges" stroke="black" fill="none" xmlns="http://www.w3.org/2000/svg"><path \
|
||||
d="M5 2.5H2.5v12H5m7-12h2.5v12H12M5 8.5h7"/></svg>') no-repeat top left;
|
||||
}
|
||||
|
||||
details.toggle[open] > summary::after {
|
||||
|
@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="Layer_1" width="128" height="128" enable-background="new 0 0 128 128" version="1.1" viewBox="-30 -20 176 176" xml:space="preserve"><g><line x1="111" x2="64" y1="40.5" y2="87.499" fill="none" stroke="#000000" stroke-linecap="square" stroke-miterlimit="10" stroke-width="12"/><line x1="64" x2="17" y1="87.499" y2="40.5" fill="none" stroke="#000000" stroke-linecap="square" stroke-miterlimit="10" stroke-width="12"/></g></svg>
|
Before Width: | Height: | Size: 510 B |
@ -1 +0,0 @@
|
||||
<svg width="17" height="17" shape-rendering="crispEdges" stroke="#000" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M5 2.5H2.5v12H5m7-12h2.5v12H12M5 8.5h7"/></svg>
|
Before Width: | Height: | Size: 174 B |
@ -1 +0,0 @@
|
||||
<svg width="17" height="17" shape-rendering="crispEdges" stroke="#000" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M5 2.5H2.5v12H5m7-12h2.5v12H12M5 8.5h7M8.5 12V8.625v0V5"/></svg>
|
Before Width: | Height: | Size: 191 B |
@ -102,9 +102,6 @@ static_files! {
|
||||
scrape_examples_js => "static/js/scrape-examples.js",
|
||||
wheel_svg => "static/images/wheel.svg",
|
||||
clipboard_svg => "static/images/clipboard.svg",
|
||||
down_arrow_svg => "static/images/down-arrow.svg",
|
||||
toggle_minus_png => "static/images/toggle-minus.svg",
|
||||
toggle_plus_png => "static/images/toggle-plus.svg",
|
||||
copyright => "static/COPYRIGHT.txt",
|
||||
license_apache => "static/LICENSE-APACHE.txt",
|
||||
license_mit => "static/LICENSE-MIT.txt",
|
||||
|
@ -6,11 +6,6 @@ LL | take_u32(x)
|
||||
| |
|
||||
| arguments to this function are incorrect
|
||||
|
|
||||
note: while checking the return type of the `async fn`
|
||||
--> $DIR/dont-suggest-missing-await.rs:7:24
|
||||
|
|
||||
LL | async fn make_u32() -> u32 {
|
||||
| ^^^ checked the `Output` of this `async fn`, found opaque type
|
||||
= note: expected type `u32`
|
||||
found opaque type `impl Future<Output = u32>`
|
||||
note: function defined here
|
||||
|
@ -21,16 +21,6 @@ LL | fun(one(), two());
|
||||
| |
|
||||
| arguments to this function are incorrect
|
||||
|
|
||||
note: while checking the return type of the `async fn`
|
||||
--> $DIR/generator-desc.rs:5:16
|
||||
|
|
||||
LL | async fn one() {}
|
||||
| ^ checked the `Output` of this `async fn`, expected opaque type
|
||||
note: while checking the return type of the `async fn`
|
||||
--> $DIR/generator-desc.rs:6:16
|
||||
|
|
||||
LL | async fn two() {}
|
||||
| ^ checked the `Output` of this `async fn`, found opaque type
|
||||
= note: expected opaque type `impl Future<Output = ()>` (opaque type at <$DIR/generator-desc.rs:5:16>)
|
||||
found opaque type `impl Future<Output = ()>` (opaque type at <$DIR/generator-desc.rs:6:16>)
|
||||
= help: consider `await`ing on both `Future`s
|
||||
|
@ -54,9 +54,6 @@ async fn struct_() -> Struct {
|
||||
}
|
||||
|
||||
async fn tuple() -> Tuple {
|
||||
//~^ NOTE checked the `Output` of this `async fn`, expected opaque type
|
||||
//~| NOTE while checking the return type of the `async fn`
|
||||
//~| NOTE in this expansion of desugaring of `async` block or function
|
||||
Tuple(1i32)
|
||||
}
|
||||
|
||||
|
@ -11,7 +11,7 @@ LL | foo().await?;
|
||||
| ++++++
|
||||
|
||||
error[E0277]: the `?` operator can only be applied to values that implement `Try`
|
||||
--> $DIR/issue-61076.rs:65:5
|
||||
--> $DIR/issue-61076.rs:62:5
|
||||
|
|
||||
LL | t?;
|
||||
| ^^ the `?` operator cannot be applied to type `T`
|
||||
@ -23,7 +23,7 @@ LL | t.await?;
|
||||
| ++++++
|
||||
|
||||
error[E0609]: no field `0` on type `impl Future<Output = Tuple>`
|
||||
--> $DIR/issue-61076.rs:74:26
|
||||
--> $DIR/issue-61076.rs:71:26
|
||||
|
|
||||
LL | let _: i32 = tuple().0;
|
||||
| ^ field not available in `impl Future`, but it is available in its `Output`
|
||||
@ -34,7 +34,7 @@ LL | let _: i32 = tuple().await.0;
|
||||
| ++++++
|
||||
|
||||
error[E0609]: no field `a` on type `impl Future<Output = Struct>`
|
||||
--> $DIR/issue-61076.rs:78:28
|
||||
--> $DIR/issue-61076.rs:75:28
|
||||
|
|
||||
LL | let _: i32 = struct_().a;
|
||||
| ^ field not available in `impl Future`, but it is available in its `Output`
|
||||
@ -45,7 +45,7 @@ LL | let _: i32 = struct_().await.a;
|
||||
| ++++++
|
||||
|
||||
error[E0599]: no method named `method` found for opaque type `impl Future<Output = Struct>` in the current scope
|
||||
--> $DIR/issue-61076.rs:82:15
|
||||
--> $DIR/issue-61076.rs:79:15
|
||||
|
|
||||
LL | struct_().method();
|
||||
| ^^^^^^ method not found in `impl Future<Output = Struct>`
|
||||
@ -56,7 +56,7 @@ LL | struct_().await.method();
|
||||
| ++++++
|
||||
|
||||
error[E0308]: mismatched types
|
||||
--> $DIR/issue-61076.rs:91:9
|
||||
--> $DIR/issue-61076.rs:88:9
|
||||
|
|
||||
LL | match tuple() {
|
||||
| ------- this expression has type `impl Future<Output = Tuple>`
|
||||
@ -64,11 +64,6 @@ LL |
|
||||
LL | Tuple(_) => {}
|
||||
| ^^^^^^^^ expected opaque type, found `Tuple`
|
||||
|
|
||||
note: while checking the return type of the `async fn`
|
||||
--> $DIR/issue-61076.rs:56:21
|
||||
|
|
||||
LL | async fn tuple() -> Tuple {
|
||||
| ^^^^^ checked the `Output` of this `async fn`, expected opaque type
|
||||
= note: expected opaque type `impl Future<Output = Tuple>`
|
||||
found struct `Tuple`
|
||||
help: consider `await`ing on the `Future`
|
||||
|
@ -4,11 +4,6 @@ error[E0271]: expected `callback` to be a fn item that returns `Pin<Box<dyn Futu
|
||||
LL | StructAsync { callback }.await;
|
||||
| ^^^^^^^^ expected `Pin<Box<dyn Future<Output = ()>>>`, found opaque type
|
||||
|
|
||||
note: while checking the return type of the `async fn`
|
||||
--> $DIR/issue-98634.rs:24:21
|
||||
|
|
||||
LL | async fn callback() {}
|
||||
| ^ checked the `Output` of this `async fn`, found opaque type
|
||||
= note: expected struct `Pin<Box<(dyn Future<Output = ()> + 'static)>>`
|
||||
found opaque type `impl Future<Output = ()>`
|
||||
note: required by a bound in `StructAsync`
|
||||
@ -23,11 +18,6 @@ error[E0271]: expected `callback` to be a fn item that returns `Pin<Box<dyn Futu
|
||||
LL | StructAsync { callback }.await;
|
||||
| ^^^^^^^^^^^^^^^^^^^^^^^^ expected `Pin<Box<dyn Future<Output = ()>>>`, found opaque type
|
||||
|
|
||||
note: while checking the return type of the `async fn`
|
||||
--> $DIR/issue-98634.rs:24:21
|
||||
|
|
||||
LL | async fn callback() {}
|
||||
| ^ checked the `Output` of this `async fn`, found opaque type
|
||||
= note: expected struct `Pin<Box<(dyn Future<Output = ()> + 'static)>>`
|
||||
found opaque type `impl Future<Output = ()>`
|
||||
note: required by a bound in `StructAsync`
|
||||
@ -42,11 +32,6 @@ error[E0271]: expected `callback` to be a fn item that returns `Pin<Box<dyn Futu
|
||||
LL | StructAsync { callback }.await;
|
||||
| ^^^^^^ expected `Pin<Box<dyn Future<Output = ()>>>`, found opaque type
|
||||
|
|
||||
note: while checking the return type of the `async fn`
|
||||
--> $DIR/issue-98634.rs:24:21
|
||||
|
|
||||
LL | async fn callback() {}
|
||||
| ^ checked the `Output` of this `async fn`, found opaque type
|
||||
= note: expected struct `Pin<Box<(dyn Future<Output = ()> + 'static)>>`
|
||||
found opaque type `impl Future<Output = ()>`
|
||||
note: required by a bound in `StructAsync`
|
||||
|
@ -8,11 +8,6 @@ LL | std::mem::size_of_val(foo());
|
||||
| | help: consider borrowing here: `&foo()`
|
||||
| arguments to this function are incorrect
|
||||
|
|
||||
note: while checking the return type of the `async fn`
|
||||
--> $DIR/issue-102206.rs:3:16
|
||||
|
|
||||
LL | async fn foo() {}
|
||||
| ^ checked the `Output` of this `async fn`, found opaque type
|
||||
= note: expected reference `&_`
|
||||
found opaque type `impl Future<Output = ()>`
|
||||
note: function defined here
|
||||
|
@ -6,11 +6,6 @@ LL | take_u32(x)
|
||||
| |
|
||||
| arguments to this function are incorrect
|
||||
|
|
||||
note: while checking the return type of the `async fn`
|
||||
--> $DIR/suggest-missing-await-closure.rs:8:24
|
||||
|
|
||||
LL | async fn make_u32() -> u32 {
|
||||
| ^^^ checked the `Output` of this `async fn`, found opaque type
|
||||
= note: expected type `u32`
|
||||
found opaque type `impl Future<Output = u32>`
|
||||
note: function defined here
|
||||
|
@ -6,11 +6,6 @@ LL | take_u32(x)
|
||||
| |
|
||||
| arguments to this function are incorrect
|
||||
|
|
||||
note: while checking the return type of the `async fn`
|
||||
--> $DIR/suggest-missing-await.rs:5:24
|
||||
|
|
||||
LL | async fn make_u32() -> u32 {
|
||||
| ^^^ checked the `Output` of this `async fn`, found opaque type
|
||||
= note: expected type `u32`
|
||||
found opaque type `impl Future<Output = u32>`
|
||||
note: function defined here
|
||||
@ -29,11 +24,6 @@ error[E0308]: mismatched types
|
||||
LL | dummy()
|
||||
| ^^^^^^^ expected `()`, found opaque type
|
||||
|
|
||||
note: while checking the return type of the `async fn`
|
||||
--> $DIR/suggest-missing-await.rs:18:18
|
||||
|
|
||||
LL | async fn dummy() {}
|
||||
| ^ checked the `Output` of this `async fn`, found opaque type
|
||||
= note: expected unit type `()`
|
||||
found opaque type `impl Future<Output = ()>`
|
||||
help: consider `await`ing on the `Future`
|
||||
@ -60,11 +50,6 @@ LL | |
|
||||
LL | | };
|
||||
| |_____- `if` and `else` have incompatible types
|
||||
|
|
||||
note: while checking the return type of the `async fn`
|
||||
--> $DIR/suggest-missing-await.rs:18:18
|
||||
|
|
||||
LL | async fn dummy() {}
|
||||
| ^ checked the `Output` of this `async fn`, expected opaque type
|
||||
= note: expected opaque type `impl Future<Output = ()>`
|
||||
found unit type `()`
|
||||
help: consider `await`ing on the `Future`
|
||||
@ -87,11 +72,6 @@ LL | |
|
||||
LL | | };
|
||||
| |_____- `match` arms have incompatible types
|
||||
|
|
||||
note: while checking the return type of the `async fn`
|
||||
--> $DIR/suggest-missing-await.rs:18:18
|
||||
|
|
||||
LL | async fn dummy() {}
|
||||
| ^ checked the `Output` of this `async fn`, expected opaque type
|
||||
= note: expected opaque type `impl Future<Output = ()>`
|
||||
found unit type `()`
|
||||
help: consider `await`ing on the `Future`
|
||||
@ -108,11 +88,6 @@ LL | let _x = match dummy() {
|
||||
LL | () => {}
|
||||
| ^^ expected opaque type, found `()`
|
||||
|
|
||||
note: while checking the return type of the `async fn`
|
||||
--> $DIR/suggest-missing-await.rs:18:18
|
||||
|
|
||||
LL | async fn dummy() {}
|
||||
| ^ checked the `Output` of this `async fn`, expected opaque type
|
||||
= note: expected opaque type `impl Future<Output = ()>`
|
||||
found unit type `()`
|
||||
help: consider `await`ing on the `Future`
|
||||
@ -129,11 +104,6 @@ LL | match dummy_result() {
|
||||
LL | Ok(_) => {}
|
||||
| ^^^^^ expected opaque type, found `Result<_, _>`
|
||||
|
|
||||
note: while checking the return type of the `async fn`
|
||||
--> $DIR/suggest-missing-await.rs:57:28
|
||||
|
|
||||
LL | async fn dummy_result() -> Result<(), ()> {
|
||||
| ^^^^^^^^^^^^^^ checked the `Output` of this `async fn`, expected opaque type
|
||||
= note: expected opaque type `impl Future<Output = Result<(), ()>>`
|
||||
found enum `Result<_, _>`
|
||||
help: consider `await`ing on the `Future`
|
||||
@ -150,11 +120,6 @@ LL | match dummy_result() {
|
||||
LL | Err(_) => {}
|
||||
| ^^^^^^ expected opaque type, found `Result<_, _>`
|
||||
|
|
||||
note: while checking the return type of the `async fn`
|
||||
--> $DIR/suggest-missing-await.rs:57:28
|
||||
|
|
||||
LL | async fn dummy_result() -> Result<(), ()> {
|
||||
| ^^^^^^^^^^^^^^ checked the `Output` of this `async fn`, expected opaque type
|
||||
= note: expected opaque type `impl Future<Output = Result<(), ()>>`
|
||||
found enum `Result<_, _>`
|
||||
help: consider `await`ing on the `Future`
|
||||
|
@ -209,7 +209,7 @@ impl ::core::marker::StructuralPartialEq for PackedPoint { }
|
||||
impl ::core::cmp::PartialEq for PackedPoint {
|
||||
#[inline]
|
||||
fn eq(&self, other: &PackedPoint) -> bool {
|
||||
{ self.x } == { other.x } && { self.y } == { other.y }
|
||||
({ self.x }) == ({ other.x }) && ({ self.y }) == ({ other.y })
|
||||
}
|
||||
}
|
||||
#[automatically_derived]
|
||||
@ -718,8 +718,8 @@ impl<T: ::core::cmp::PartialEq + ::core::marker::Copy + Trait,
|
||||
::core::marker::Copy {
|
||||
#[inline]
|
||||
fn eq(&self, other: &PackedGeneric<T, U>) -> bool {
|
||||
{ self.0 } == { other.0 } && { self.1 } == { other.1 } &&
|
||||
{ self.2 } == { other.2 }
|
||||
({ self.0 }) == ({ other.0 }) && ({ self.1 }) == ({ other.1 }) &&
|
||||
({ self.2 }) == ({ other.2 })
|
||||
}
|
||||
}
|
||||
#[automatically_derived]
|
||||
|
@ -24,16 +24,6 @@ LL | async fn owo(_: u8) {}
|
||||
| expected `()`, found `u8`
|
||||
| help: change the parameter type to match the trait: `()`
|
||||
|
|
||||
note: while checking the return type of the `async fn`
|
||||
--> $DIR/method-signature-matches.rs:20:25
|
||||
|
|
||||
LL | async fn owo(_: u8) {}
|
||||
| ^ checked the `Output` of this `async fn`, expected opaque type
|
||||
note: while checking the return type of the `async fn`
|
||||
--> $DIR/method-signature-matches.rs:20:25
|
||||
|
|
||||
LL | async fn owo(_: u8) {}
|
||||
| ^ checked the `Output` of this `async fn`, found opaque type
|
||||
note: type in trait
|
||||
--> $DIR/method-signature-matches.rs:16:21
|
||||
|
|
||||
|
@ -6,11 +6,6 @@ LL | convert_result(foo())
|
||||
| |
|
||||
| arguments to this function are incorrect
|
||||
|
|
||||
note: while checking the return type of the `async fn`
|
||||
--> $DIR/issue-102605.rs:3:19
|
||||
|
|
||||
LL | async fn foo() -> Result<(), String> {
|
||||
| ^^^^^^^^^^^^^^^^^^ checked the `Output` of this `async fn`, found opaque type
|
||||
= note: expected enum `Result<(), _>`
|
||||
found opaque type `impl Future<Output = Result<(), String>>`
|
||||
note: function defined here
|
||||
|
@ -4,11 +4,6 @@ error[E0308]: mismatched types
|
||||
LL | t.and_then(|t| -> _ { bar(t) });
|
||||
| ^^^^^^ expected `Result<_, Error>`, found opaque type
|
||||
|
|
||||
note: while checking the return type of the `async fn`
|
||||
--> $DIR/issue-99914.rs:13:23
|
||||
|
|
||||
LL | async fn bar(t: Okay) {}
|
||||
| ^ checked the `Output` of this `async fn`, found opaque type
|
||||
= note: expected enum `Result<_, Error>`
|
||||
found opaque type `impl Future<Output = ()>`
|
||||
help: try wrapping the expression in `Ok`
|
||||
|
@ -5,6 +5,9 @@
|
||||
// ignore-wasm32
|
||||
// ignore-sgx no support for proc-macro crate type
|
||||
// build-pass
|
||||
// force-host
|
||||
// no-prefer-dynamic
|
||||
|
||||
#![crate_type = "proc-macro"]
|
||||
|
||||
// FIXME: This don't work when crate-type is specified by attribute
|
||||
|
@ -15,18 +15,9 @@ fn extra_semicolon() {
|
||||
};
|
||||
}
|
||||
|
||||
async fn async_dummy() {} //~ NOTE checked the `Output` of this `async fn`, found opaque type
|
||||
//~| NOTE while checking the return type of the `async fn`
|
||||
//~| NOTE in this expansion of desugaring of `async` block or function
|
||||
//~| NOTE checked the `Output` of this `async fn`, expected opaque type
|
||||
//~| NOTE while checking the return type of the `async fn`
|
||||
//~| NOTE in this expansion of desugaring of `async` block or function
|
||||
async fn async_dummy2() {} //~ NOTE checked the `Output` of this `async fn`, found opaque type
|
||||
//~| NOTE checked the `Output` of this `async fn`, found opaque type
|
||||
//~| NOTE while checking the return type of the `async fn`
|
||||
//~| NOTE in this expansion of desugaring of `async` block or function
|
||||
//~| NOTE while checking the return type of the `async fn`
|
||||
//~| NOTE in this expansion of desugaring of `async` block or function
|
||||
async fn async_dummy() {}
|
||||
|
||||
async fn async_dummy2() {}
|
||||
|
||||
async fn async_extra_semicolon_same() {
|
||||
let _ = if true {
|
||||
|
@ -1,5 +1,5 @@
|
||||
error[E0308]: `if` and `else` have incompatible types
|
||||
--> $DIR/if-then-neeing-semi.rs:37:9
|
||||
--> $DIR/if-then-neeing-semi.rs:28:9
|
||||
|
|
||||
LL | let _ = if true {
|
||||
| _____________-
|
||||
@ -15,11 +15,6 @@ LL | |
|
||||
LL | | };
|
||||
| |_____- `if` and `else` have incompatible types
|
||||
|
|
||||
note: while checking the return type of the `async fn`
|
||||
--> $DIR/if-then-neeing-semi.rs:18:24
|
||||
|
|
||||
LL | async fn async_dummy() {}
|
||||
| ^ checked the `Output` of this `async fn`, found opaque type
|
||||
= note: expected unit type `()`
|
||||
found opaque type `impl Future<Output = ()>`
|
||||
help: consider `await`ing on the `Future`
|
||||
@ -33,7 +28,7 @@ LL + async_dummy()
|
||||
|
|
||||
|
||||
error[E0308]: `if` and `else` have incompatible types
|
||||
--> $DIR/if-then-neeing-semi.rs:50:9
|
||||
--> $DIR/if-then-neeing-semi.rs:41:9
|
||||
|
|
||||
LL | let _ = if true {
|
||||
| _____________-
|
||||
@ -49,11 +44,6 @@ LL | |
|
||||
LL | | };
|
||||
| |_____- `if` and `else` have incompatible types
|
||||
|
|
||||
note: while checking the return type of the `async fn`
|
||||
--> $DIR/if-then-neeing-semi.rs:24:25
|
||||
|
|
||||
LL | async fn async_dummy2() {}
|
||||
| ^ checked the `Output` of this `async fn`, found opaque type
|
||||
= note: expected unit type `()`
|
||||
found opaque type `impl Future<Output = ()>`
|
||||
help: consider `await`ing on the `Future`
|
||||
@ -69,7 +59,7 @@ LL ~ Box::new(async_dummy2())
|
||||
|
|
||||
|
||||
error[E0308]: `if` and `else` have incompatible types
|
||||
--> $DIR/if-then-neeing-semi.rs:63:9
|
||||
--> $DIR/if-then-neeing-semi.rs:54:9
|
||||
|
|
||||
LL | let _ = if true {
|
||||
| _____________-
|
||||
@ -85,18 +75,8 @@ LL | |
|
||||
LL | | };
|
||||
| |_____- `if` and `else` have incompatible types
|
||||
|
|
||||
note: while checking the return type of the `async fn`
|
||||
--> $DIR/if-then-neeing-semi.rs:18:24
|
||||
|
|
||||
LL | async fn async_dummy() {}
|
||||
| ^ checked the `Output` of this `async fn`, expected opaque type
|
||||
note: while checking the return type of the `async fn`
|
||||
--> $DIR/if-then-neeing-semi.rs:24:25
|
||||
|
|
||||
LL | async fn async_dummy2() {}
|
||||
| ^ checked the `Output` of this `async fn`, found opaque type
|
||||
= note: expected opaque type `impl Future<Output = ()>` (opaque type at <$DIR/if-then-neeing-semi.rs:18:24>)
|
||||
found opaque type `impl Future<Output = ()>` (opaque type at <$DIR/if-then-neeing-semi.rs:24:25>)
|
||||
found opaque type `impl Future<Output = ()>` (opaque type at <$DIR/if-then-neeing-semi.rs:20:25>)
|
||||
= note: distinct uses of `impl Trait` result in different opaque types
|
||||
help: consider `await`ing on both `Future`s
|
||||
|
|
||||
|
@ -14,11 +14,6 @@ LL | | _ => cx.answer_str("hi"),
|
||||
LL | | }
|
||||
| |_____- `match` arms have incompatible types
|
||||
|
|
||||
note: while checking the return type of the `async fn`
|
||||
--> $DIR/auxiliary/issue-81839.rs:6:49
|
||||
|
|
||||
LL | pub async fn answer_str(&self, _s: &str) -> Test {
|
||||
| ^^^^ checked the `Output` of this `async fn`, found opaque type
|
||||
= note: expected unit type `()`
|
||||
found opaque type `impl Future<Output = Test>`
|
||||
|
||||
|
@ -13,18 +13,9 @@ fn extra_semicolon() {
|
||||
};
|
||||
}
|
||||
|
||||
async fn async_dummy() {} //~ NOTE checked the `Output` of this `async fn`, found opaque type
|
||||
//~| NOTE while checking the return type of the `async fn`
|
||||
//~| NOTE in this expansion of desugaring of `async` block or function
|
||||
//~| NOTE checked the `Output` of this `async fn`, expected opaque type
|
||||
//~| NOTE while checking the return type of the `async fn`
|
||||
//~| NOTE in this expansion of desugaring of `async` block or function
|
||||
async fn async_dummy2() {} //~ NOTE checked the `Output` of this `async fn`, found opaque type
|
||||
//~| NOTE checked the `Output` of this `async fn`, found opaque type
|
||||
//~| NOTE while checking the return type of the `async fn`
|
||||
//~| NOTE in this expansion of desugaring of `async` block or function
|
||||
//~| NOTE while checking the return type of the `async fn`
|
||||
//~| NOTE in this expansion of desugaring of `async` block or function
|
||||
async fn async_dummy() {}
|
||||
|
||||
async fn async_dummy2() {}
|
||||
|
||||
async fn async_extra_semicolon_same() {
|
||||
let _ = match true { //~ NOTE `match` arms have incompatible types
|
||||
|
@ -1,5 +1,5 @@
|
||||
error[E0308]: `match` arms have incompatible types
|
||||
--> $DIR/match-prev-arm-needing-semi.rs:35:18
|
||||
--> $DIR/match-prev-arm-needing-semi.rs:26:18
|
||||
|
|
||||
LL | let _ = match true {
|
||||
| _____________-
|
||||
@ -15,11 +15,6 @@ LL | |
|
||||
LL | | };
|
||||
| |_____- `match` arms have incompatible types
|
||||
|
|
||||
note: while checking the return type of the `async fn`
|
||||
--> $DIR/match-prev-arm-needing-semi.rs:16:24
|
||||
|
|
||||
LL | async fn async_dummy() {}
|
||||
| ^ checked the `Output` of this `async fn`, found opaque type
|
||||
= note: expected unit type `()`
|
||||
found opaque type `impl Future<Output = ()>`
|
||||
help: consider `await`ing on the `Future`
|
||||
@ -33,7 +28,7 @@ LL + async_dummy()
|
||||
|
|
||||
|
||||
error[E0308]: `match` arms have incompatible types
|
||||
--> $DIR/match-prev-arm-needing-semi.rs:48:18
|
||||
--> $DIR/match-prev-arm-needing-semi.rs:39:18
|
||||
|
|
||||
LL | let _ = match true {
|
||||
| _____________-
|
||||
@ -49,11 +44,6 @@ LL | |
|
||||
LL | | };
|
||||
| |_____- `match` arms have incompatible types
|
||||
|
|
||||
note: while checking the return type of the `async fn`
|
||||
--> $DIR/match-prev-arm-needing-semi.rs:22:25
|
||||
|
|
||||
LL | async fn async_dummy2() {}
|
||||
| ^ checked the `Output` of this `async fn`, found opaque type
|
||||
= note: expected unit type `()`
|
||||
found opaque type `impl Future<Output = ()>`
|
||||
help: consider `await`ing on the `Future`
|
||||
@ -69,7 +59,7 @@ LL ~ false => Box::new(async_dummy2()),
|
||||
|
|
||||
|
||||
error[E0308]: `match` arms have incompatible types
|
||||
--> $DIR/match-prev-arm-needing-semi.rs:59:18
|
||||
--> $DIR/match-prev-arm-needing-semi.rs:50:18
|
||||
|
|
||||
LL | let _ = match true {
|
||||
| _____________-
|
||||
@ -83,18 +73,8 @@ LL | |
|
||||
LL | | };
|
||||
| |_____- `match` arms have incompatible types
|
||||
|
|
||||
note: while checking the return type of the `async fn`
|
||||
--> $DIR/match-prev-arm-needing-semi.rs:16:24
|
||||
|
|
||||
LL | async fn async_dummy() {}
|
||||
| ^ checked the `Output` of this `async fn`, expected opaque type
|
||||
note: while checking the return type of the `async fn`
|
||||
--> $DIR/match-prev-arm-needing-semi.rs:22:25
|
||||
|
|
||||
LL | async fn async_dummy2() {}
|
||||
| ^ checked the `Output` of this `async fn`, found opaque type
|
||||
= note: expected opaque type `impl Future<Output = ()>` (opaque type at <$DIR/match-prev-arm-needing-semi.rs:16:24>)
|
||||
found opaque type `impl Future<Output = ()>` (opaque type at <$DIR/match-prev-arm-needing-semi.rs:22:25>)
|
||||
found opaque type `impl Future<Output = ()>` (opaque type at <$DIR/match-prev-arm-needing-semi.rs:18:25>)
|
||||
= note: distinct uses of `impl Trait` result in different opaque types
|
||||
help: consider `await`ing on both `Future`s
|
||||
|
|
||||
|
@ -4,11 +4,6 @@ error[E0271]: expected `test` to be a fn item that returns `Pin<Box<dyn Future<O
|
||||
LL | Box::new(test) as AsyncFnPtr;
|
||||
| ^^^^^^^^^^^^^^ expected `Pin<Box<dyn Future<Output = ()>>>`, found opaque type
|
||||
|
|
||||
note: while checking the return type of the `async fn`
|
||||
--> $DIR/issue-98604.rs:5:17
|
||||
|
|
||||
LL | async fn test() {}
|
||||
| ^ checked the `Output` of this `async fn`, found opaque type
|
||||
= note: expected struct `Pin<Box<(dyn Future<Output = ()> + 'static)>>`
|
||||
found opaque type `impl Future<Output = ()>`
|
||||
= note: required for the cast from `fn() -> impl Future<Output = ()> {test}` to the object type `dyn Fn() -> Pin<Box<(dyn Future<Output = ()> + 'static)>>`
|
||||
|
Loading…
Reference in New Issue
Block a user