Commit graph

536 commits

Author SHA1 Message Date
Dylan DPC
69a1ac3891
Rollup merge of #72848 - camelid:fix-72815, r=varkor
Correct generic parameter ordering in error note for E0747

Fixes #72815.

r? @varkor
2020-06-03 02:39:05 +02:00
Yuki Okushi
8a68fc6ff4
Rollup merge of #72775 - JohnTitor:await-sugg, r=estebank
Return early to avoid ICE

Fixes #72766
2020-06-02 13:07:12 +09:00
camelid
718d28cf85 Correct generic parameter ordering in error note 2020-05-31 20:45:08 -07:00
Ralf Jung
65a02f1841
Rollup merge of #72668 - awoimbee:give-fn-parenthetical-notation-parentheses, r=estebank
Fix missing parentheses Fn notation error

Fixes  #72611
Well, fixes the error output, I think E0658 is the right error to throw in this case so I didn't change that
2020-05-30 23:08:53 +02:00
Esteban Küber
83f6f22358 Tweak wording and spans of 'static dyn Trait/impl Trait requirements 2020-05-30 10:22:27 -07:00
Esteban Küber
224ad326ea Account for enclosing item when suggesting new lifetime name 2020-05-30 10:22:27 -07:00
Esteban Küber
8f7ee34379 Tweak type parameter errors to reduce verbosity 2020-05-30 10:22:26 -07:00
Esteban Küber
731ea85f21 review comment: tweak wording and account for span overlap 2020-05-30 10:22:26 -07:00
Esteban Küber
65f492be12 Account for returned dyn Trait evaluating to 'static lifetime
Provide a suggestion for `dyn Trait + '_` when possible.
2020-05-30 10:22:26 -07:00
Esteban Küber
a724d9a4fb Fix NLL output 2020-05-30 10:21:58 -07:00
Esteban Küber
99d9ccd547 Improve output of argument anonymous borrow missing annotation involving opaque return type
Go from

```
error[E0495]: cannot infer an appropriate lifetime due to conflicting requirements
  --> file8.rs:22:5
   |
22 | /     move || {
23 | |         *dest = g.get();
24 | |     }
   | |_____^
   |
note: first, the lifetime cannot outlive the anonymous lifetime #1 defined on the function body at 18:1...
  --> file8.rs:18:1
   |
18 | / fn bat<'a, G: 'a, T>(g: G, dest: &mut T) -> impl FnOnce() + '_ + 'a
19 | | where
20 | |     G: Get<T>
21 | | {
...  |
24 | |     }
25 | | }
   | |_^
note: ...so that the types are compatible
  --> file8.rs:22:5
   |
22 | /     move || { //~ ERROR cannot infer an appropriate lifetime
23 | |         *dest = g.get();
24 | |     }
   | |_____^
   = note: expected  `&mut T`
              found  `&mut T`
note: but, the lifetime must be valid for the lifetime `'a` as defined on the function body at 18:8...
  --> file8.rs:18:8
   |
18 | fn bat<'a, G: 'a, T>(g: G, dest: &mut T) -> impl FnOnce() + '_ + 'a
   |        ^^
note: ...so that return value is valid for the call
  --> file8.rs:18:45
   |
18 | fn bat<'a, G: 'a, T>(g: G, dest: &mut T) -> impl FnOnce() + '_ + 'a
   |                                             ^^^^^^^^^^^^^^^^^^^^^^^
```

to

```
error[E0621]: explicit lifetime required in the type of `dest`
  --> file8.rs:18:45
   |
18 | fn bat<'a, G: 'a, T>(g: G, dest: &mut T) -> impl FnOnce() + '_ + 'a
   |                                  ------     ^^^^^^^^^^^^^^^^^^^^^^^ lifetime `'a` required
   |                                  |
   |                                  help: add explicit lifetime `'a` to the type of `dest`: `&'a mut T`
   ```
2020-05-30 10:21:58 -07:00
Esteban Küber
f49ebbb891 Account for missing lifetime in opaque return type
When encountering an opaque closure return type that needs to bound a
lifetime to the function's arguments, including borrows and type params,
provide appropriate suggestions that lead to working code.

Get the user from

```rust
fn foo<G, T>(g: G, dest: &mut T) -> impl FnOnce()
where
    G: Get<T>
{
    move || {
        *dest = g.get();
    }
}
```

to

```rust
fn foo<'a, G: 'a, T>(g: G, dest: &'a mut T) -> impl FnOnce() +'a
where
    G: Get<T>
{
    move || {
        *dest = g.get();
    }
}
```
2020-05-30 10:19:41 -07:00
Arthur Woimbée
c54d4fe93f Test ui suggestion fn trait notation 2020-05-30 18:40:42 +02:00
Yuki Okushi
77503578e1
Return early to avoid ICE 2020-05-30 18:48:54 +09:00
Dylan MacKenzie
4d9e9c6d4e Bless other example of #71394 2020-05-22 13:34:41 -07:00
Dylan MacKenzie
8ea828be2f Add regression test for #71394 2020-05-22 13:34:41 -07:00
Ralf Jung
62d4e9eedd
Rollup merge of #72306 - Aaron1011:feature/turbo-spacing, r=petrochenkov
Break tokens before checking if they are 'probably equal'

Fixes #68489
Fixes #70987

When checking two `TokenStreams` to see if they are 'probably equal',
we ignore the `IsJoint` information associated with each `TokenTree`.
However, the `IsJoint` information determines whether adjacent tokens
will be 'glued' (if possible) when construction the `TokenStream` - e.g.
`[Gt Gt]` can be 'glued' to `BinOp(Shr)`.

Since we are ignoring the `IsJoint` information, 'glued' and 'unglued'
tokens are equivalent for determining if two `TokenStreams` are
'probably equal'. Therefore, we need to 'unglue' all tokens in the
stream to avoid false negatives (which cause us to throw out the cached
tokens, losing span information).
2020-05-22 11:32:23 +02:00
Ralf Jung
dc65fd4f6a
Rollup merge of #72149 - estebank:icemation, r=eddyb
Don't `type_of` on trait assoc ty without default

Fix #72076.
2020-05-21 21:10:38 +02:00
Aaron Hill
633293fc3a
Fix tests 2020-05-20 15:33:58 -04:00
Dylan DPC
746b8ca083
Rollup merge of #72127 - jademcgough:long-error-explanation-E0228, r=petrochenkov
add long error explanation for E0228

Add long explanation for the E0228 error code
Part of #61137

Let me know if this is wrong at all (or can be written more clearly), I'm still learning Rust.
2020-05-14 18:21:51 +02:00
Jade McGough
5320bd986b add long error explanation for E0228 2020-05-12 17:09:09 -07:00
Esteban Küber
45738e8cd1 Increase verbosity of bound restriction suggestions
- Make the bound restriction suggestion `span_suggestion_verbose`.
- Fix whitespace typo.
2020-05-12 11:19:07 -07:00
Esteban Küber
a3f30bbc2d Don't type_of on trait assoc ty without default
Fix #72076.
2020-05-12 10:56:26 -07:00
Dylan DPC
705671ef49
Rollup merge of #72019 - matthewjasper:dont-skip-binder, r=davidtwco
Fix debug assertion in error code

Closes #70813
2020-05-11 22:20:54 +02:00
Matthew Jasper
619c6055e7 Fix debug assertion in error code 2020-05-08 17:25:44 +01:00
Andy Russell
9f88d75710
reword "possible candidate" import suggestion 2020-05-07 00:33:25 -04:00
Esteban Küber
de3b4d4dae fix rebase 2020-05-03 14:23:20 -07:00
Esteban Küber
31b3566196 When a projection is expected, suggest constraining or calling method 2020-05-02 18:24:07 -07:00
Esteban Küber
3a795fba03 On type mismatch involving associated type, suggest constraint
When an associated type is found when a specific type was expected, if
possible provide a structured suggestion constraining the associated
type in a bound.

```
error[E0271]: type mismatch resolving `<T as Foo>::Y == i32`
  --> $DIR/associated-types-multiple-types-one-trait.rs:13:5
   |
LL |     want_y(t);
   |     ^^^^^^ expected `i32`, found associated type
...
LL | fn want_y<T:Foo<Y=i32>>(t: &T) { }
   |                 ----- required by this bound in `want_y`
   |
   = note:         expected type `i32`
           found associated type `<T as Foo>::Y`
help: consider constraining the associated type `<T as Foo>::Y` to `i32`
   |
LL | fn have_x_want_y<T:Foo<X=u32, Y = i32>>(t: &T)
   |                             ^^^^^^^^^
```

```
error[E0308]: mismatched types
  --> $DIR/trait-with-missing-associated-type-restriction.rs:12:9
   |
LL |     qux(x.func())
   |         ^^^^^^^^ expected `usize`, found associated type
   |
   = note:         expected type `usize`
           found associated type `<impl Trait as Trait>::A`
help: consider constraining the associated type `<impl Trait as Trait>::A` to `usize`
   |
LL | fn foo(x: impl Trait<A = usize>) {
   |                     ^^^^^^^^^^
```
2020-05-02 18:23:46 -07:00
Esteban Küber
b3a8f212f8 Uncomment test code for failure to use Box::pin
Close #69083.
2020-05-01 16:53:20 -07:00
Dylan DPC
d9c1f5cf4f
Rollup merge of #71311 - estebank:fn-type-param, r=varkor
On `FnDef` type annotation suggestion, use fn-pointer output

Address the last point in #71209.
2020-04-28 13:12:09 +02:00
Esteban Küber
322b2045f2 Revert old span change 2020-04-22 12:12:33 -07:00
Esteban Küber
1f43fc0209 Tweak wording 2020-04-22 12:12:33 -07:00
Esteban Küber
13c1daeb2f Tweak 'static suggestion code
Fix #71196.
2020-04-22 12:12:33 -07:00
Esteban Küber
c47bb6debd On FnDef type annotation suggestion, use fn-pointer output
Partly addresses #71209.
2020-04-18 20:51:11 -07:00
Esteban Küber
d9a5419ef4 Add label to item source of bound obligation 2020-04-18 17:19:53 -07:00
Esteban Küber
ce936e9336 Do not emit note for projected derived obligations 2020-04-18 16:37:08 -07:00
Esteban Küber
6bc55c701f Remove AssocTypeBound and propagate bound Spans 2020-04-18 16:37:08 -07:00
Yuki Okushi
ef07cf4518
Remove FnCtxt::impl_self_ty 2020-04-13 11:36:37 +09:00
Esteban Küber
984aac6eed fix rebase 2020-04-11 14:59:15 -07:00
Esteban Küber
1e3bdc08c9 Try to use the first char in the trait name as type param 2020-04-11 14:34:01 -07:00
Esteban Küber
01169572a2 Account for existing names when suggesting adding a type param 2020-04-11 14:34:01 -07:00
Esteban Küber
c85fde126e Account for type params with bounds 2020-04-11 14:34:01 -07:00
Esteban Küber
9d83cc8331 Handle impl Trait where Trait has an assoc type with missing bounds
Fix #69638.
2020-04-11 14:34:01 -07:00
Mazdak Farrokhzad
1fe86f47d8
Rollup merge of #69745 - estebank:predicate-obligations-3, r=nikomatsakis,eddyb
Use `PredicateObligation`s instead of `Predicate`s

Keep more information about trait binding failures. Use more specific spans by pointing at bindings that introduce obligations.

Subset of #69709.

r? @eddyb
2020-04-10 18:15:16 +02:00
Esteban Küber
d605a9d969 Small tweaks to required bound span 2020-04-08 14:40:51 -07:00
Esteban Küber
bd7ea5441e Use PredicateObligations instead of Predicates
Keep more information about trait binding failures.
2020-04-08 14:40:45 -07:00
Dylan DPC
268f09f9e6
Rollup merge of #70912 - estebank:reduce-type-param-sugg-verbosity, r=davidtwco
Do not suggest adding type param when `use` is already suggested

Fix #70365, cc #70572.
2020-04-08 23:33:46 +02:00
Esteban Küber
a3e54b59f9 Do not suggest adding type param when use is already suggested
Fix #70365, cc #70572.
2020-04-07 18:07:26 -07:00
Mazdak Farrokhzad
eea91c308f
Rollup merge of #70519 - estebank:constraints-before-args-spans, r=Centril
Tweak output of type params and constraints in the wrong order

r? @Centril @varkor
2020-04-06 04:24:15 +02:00