Commit graph

28 commits

Author SHA1 Message Date
Camelid
ed6232927b typeck: Emit structured suggestions for tuple struct syntax
And tuple variant syntax, but that didn't fit in the subject :)

Now the fact that these are suggestions is exposed both to the layout
engine and to IDEs and rustfix for automatic application.
2021-02-04 11:58:55 -08:00
Camelid
8a6831a7fd Say "doesn't" instead of "wouldn't" in convert message 2020-09-29 19:27:58 -07:00
Camelid
094f14c554 Add article after "to"
Also added missing backtick in "you can cast" message.
2020-09-29 10:30:42 -07:00
Camelid
549f861f7d Use correct article in help message for conversion or cast
Before it always used `an`; now it uses the correct article for the type.
2020-09-27 13:51:08 -07:00
Ayaz Hafiz
d7277df3ac
fixup! Note numeric literals that can never fit in an expected type 2020-06-16 20:05:55 -07:00
Ayaz Hafiz
f0d36891b6
fixup! Note numeric literals that can never fit in an expected type 2020-06-16 06:55:24 -07:00
Ayaz Hafiz
2b936bb5a2
fixup! Note numeric literals that can never fit in an expected type 2020-06-13 22:31:31 -07:00
Ayaz Hafiz
afbbd383cc
Note numeric literals that can never fit in an expected type
re https://github.com/rust-lang/rust/pull/72380#discussion_r438289385

Given the toy code

```rust
fn is_positive(n: usize) {
  n > -1_isize;
}
```

We currently get a type mismatch error like the following:

```
error[E0308]: mismatched types
 --> src/main.rs:2:9
  |
2 |     n > -1_isize;
  |         ^^^^^^^^ expected `usize`, found `isize`
  |
help: you can convert an `isize` to `usize` and panic if the converted value wouldn't fit
  |
2 |     n > (-1_isize).try_into().unwrap();
  |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
```

But clearly, `-1` can never fit into a `usize`, so the suggestion will
always panic. A more useful message would tell the user that the value
can never fit in the expected type:

```
error[E0308]: mismatched types
 --> test.rs:2:9
  |
2 |     n > -1_isize;
  |         ^^^^^^^^ expected `usize`, found `isize`
  |
note: `-1_isize` can never fit into `usize`
 --> test.rs:2:9
  |
2 |     n > -1_isize;
  |         ^^^^^^^^
```

Which is what this commit implements.

I only added this check for negative literals because

- Currently we can only perform such a check for literals (constant
  value propagation is outside the scope of the typechecker at this
  point)
- A lint error for out-of-range numeric literals is already emitted

IMO it makes more sense to put this check in librustc_lint, but as far
as I can tell the typecheck pass happens before the lint pass, so I've
added it here.

r? @estebank
2020-06-13 16:22:24 -07:00
Ayaz Hafiz
0c02f8aea9
fixup! Provide suggestion to convert numeric op LHS rather than unwrapping RHS 2020-06-11 09:04:27 -07:00
Ayaz Hafiz
e243f62317
Provide suggestion to convert numeric op LHS rather than unwrapping RHS
Given a code

```rust
fn foo(x: u8, y: u32) -> bool {
    x > y
}
fn main() {}
```

it could be more helpful to provide a suggestion to do "u32::from(x)"
rather than "y.try_into().unwrap()", since the latter may panic.

We do this by passing the LHS of a binary expression up the stack into
the coercion checker.

Closes #73145
2020-06-11 09:04:24 -07:00
Bastian Kauschke
ecb593379c refactor check_for_cast 2020-05-20 16:08:09 +02:00
Samrat Man Singh
a6033e33e7 Fix numeric-cast tests for new into suggestion
Remove `integer-into.rs` since the numeric-cast tests already cover
these cases.
2020-04-28 21:40:03 +05:30
Yashhwanth Ram
5ffc1abc92 Add blessed tests after compiler message fix 2020-04-12 12:15:07 +05:30
Esteban Küber
34f03c01f6 Point at type in let assignment on type errors 2019-11-21 19:24:31 -08:00
Esteban Küber
6f8f70624b Surround types with backticks in type errors 2019-11-18 11:03:04 -08:00
Esteban Küber
0baf61bfdb Increase spacing for suggestions in diagnostics
Make the spacing between the code snippet and verbose structured
suggestions consistent with note and help messages.
2019-10-24 12:26:01 -07:00
Cedric
b72b1ac062 fix indentation 2019-06-19 19:47:52 +02:00
Cedric
70e52f8418 provide variant definition on tuple struct unknow field error 2019-06-19 11:09:17 +02:00
Cedric
c917ba325f adt hint pointing to adt span 2019-06-19 10:07:07 +02:00
Cedric
f7ecf1c548 suggest tuple struct syntax 2019-06-17 20:04:26 +02:00
Esteban Küber
1e2af7d935 Reword casting message 2019-05-03 10:41:26 -07:00
Esteban Küber
31eb5cc730 Account for const fns to avoid incorrect suggestions 2019-04-29 17:14:31 -07:00
Esteban Küber
4e84b619f4 Add test 2019-04-29 14:38:26 -07:00
Esteban Küber
4b1297baf7 Suggest try_into when possible 2019-04-29 14:38:26 -07:00
Andy Russell
b6f148c8bd
hide --explain hint if error has no extended info 2019-04-18 13:29:28 -04:00
Andy Russell
b392c5e3c1
use the identifier span for missing struct field 2019-03-16 13:14:01 -04:00
Mark Rousskov
2a663555dd Remove licenses 2018-12-25 21:08:33 -07:00
David Wood
3fc7ab2373
Merged migrated compile-fail tests and ui tests. Fixes #46841. 2018-08-14 11:12:09 +02:00