Commit graph

786 commits

Author SHA1 Message Date
Esteban Küber
cd8cfbfb09 review comments 2022-06-02 15:29:20 -07:00
Esteban Küber
ad63f907e9 Make output more specific 2022-06-01 17:46:55 -07:00
Esteban Küber
9b2d80a197 Provide more context when denying invalid type params 2022-06-01 10:41:50 -07:00
Bryysen
f671bc969f Improve error message for E0081
Previously whenever a duplicate discriminant was detected for an Enum,
we would print the discriminant bits in the diagnostic without any
casting. This caused us to display incorrect values for negative
discriminants. After this PR we format the discriminant signedness
correctly. Also reworded some of the original error
messages.
2022-05-28 23:05:45 +02:00
Jack Huey
12a2d7967c Use revisions for NLL in various directories 2022-05-22 15:21:27 -04:00
Matthias Krüger
76f662c963
Rollup merge of #97109 - TaKO8Ki:fix-misleading-cannot-infer-type-for-type-parameter-error, r=oli-obk
Fix misleading `cannot infer type for type parameter` error

closes #93198
2022-05-20 19:54:39 +02:00
Takayuki Maeda
3d0f9fb544 report ambiguous type parameters when their parents are impl or fn
fix ci error

emit err for `impl_item`
2022-05-20 23:04:44 +09:00
gimbles
9e5c24eaf8 Improve u32 to char diagnostic 2022-05-19 20:03:40 +05:30
bors
7355d971a9 Auto merge of #96825 - kckeiks:remove-item-like-visitor-trait, r=cjgillot
Retire `ItemLikeVisitor` trait

Issue #95004
cc `@cjgillot`
2022-05-17 06:51:45 +00:00
Vadim Petrochenkov
4fa24bcb54 rustc: Stricter checking for #[link] attributes 2022-05-15 02:45:47 +03:00
Miguel Guarniz
b1f0209cd1 optimize find_item to fetch Item only when needed
Signed-off-by: Miguel Guarniz <mi9uel9@gmail.com>
2022-05-13 11:46:05 -04:00
Jack Huey
62d0e4cba9 Resolve vars in note_type_err 2022-05-06 23:35:42 -04:00
Jack Huey
1549576732 Point at closure args too 2022-05-06 16:55:53 -04:00
bors
9a251644fa Auto merge of #96268 - jackh726:remove-mutable_borrow_reservation_conflict-lint, r=nikomatsakis
Remove mutable_borrow_reservation_conflict lint and allow the code pattern

This was the only breaking issue with the NLL stabilization PR. Lang team decided to go ahead and allow this.

r? `@nikomatsakis`
Closes #59159
Closes #56254
2022-05-06 12:32:44 +00:00
bors
7c4b476969 Auto merge of #96347 - estebank:issue-96292, r=compiler-errors
Erase type params when suggesting fully qualified path

When suggesting the use of a fully qualified path for a method call that
is ambiguous because it has multiple candidates, erase type params in
the resulting code, as they would result in an error when applied. We
replace them with `_` in the output to rely on inference. There might be
cases where this still produces slighlty incomplete suggestions, but it
otherwise produces many more errors in relatively common cases.

Fix #96292
2022-04-30 18:44:01 +00:00
Camille GILLOT
b711723d41 Bless tests. 2022-04-29 17:46:57 +02:00
Oli Scherer
3568bdc6cd Revert "add DefId to unsafety violations and display function path in E0133"
This reverts commit 8b8f6653cf.
2022-04-26 14:49:28 +00:00
Emil Gardström
2e47271cb8
only show a simple description in E0133 span label 2022-04-24 18:33:07 +02:00
Emil Gardström
8b8f6653cf
add DefId to unsafety violations and display function path in E0133
this enables consumers to access the function definition that was reported to be unsafe
2022-04-24 18:33:06 +02:00
Esteban Küber
1e1f33f584 Use more targetted suggestion span for fully qualified path 2022-04-23 12:44:52 -07:00
Takayuki Maeda
547cb2722b make E0117 error clear 2022-04-21 16:47:01 +09:00
Jack Huey
2300401fb0 Remove mutable_borrow_reservation_conflict lint 2022-04-20 22:10:46 -04:00
Robin Appelman
decc04dbfb show suggestion to replace generic bounds with associated types in more cases 2022-04-17 00:44:36 +02:00
Jack Huey
b6c87c555f Implementation for 65853
This attempts to bring better error messages to invalid method calls, by applying some heuristics to identify common mistakes.

The algorithm is inspired by Levenshtein distance and longest common sub-sequence.   In essence, we treat the types of the function, and the types of the arguments you provided as two "words" and compute the edits to get from one to the other.

We then modify that algorithm to detect 4 cases:

 - A function input is missing
 - An extra argument was provided
 - The type of an argument is straight up invalid
 - Two arguments have been swapped
 - A subset of the arguments have been shuffled

(We detect the last two as separate cases so that we can detect two swaps, instead of 4 parameters permuted.)

It helps to understand this argument by paying special attention to terminology: "inputs" refers to the inputs being *expected* by the function, and "arguments" refers to what has been provided at the call site.

The basic sketch of the algorithm is as follows:

 - Construct a boolean grid, with a row for each argument, and a column for each input.  The cell [i, j] is true if the i'th argument could satisfy the j'th input.
 - If we find an argument that could satisfy no inputs, provided for an input that can't be satisfied by any other argument, we consider this an "invalid type".
 - Extra arguments are those that can't satisfy any input, provided for an input that *could* be satisfied by another argument.
 - Missing inputs are inputs that can't be satisfied by any argument, where the provided argument could satisfy another input
 - Swapped / Permuted arguments are identified with a cycle detection algorithm.

As each issue is found, we remove the relevant inputs / arguments and check for more issues.  If we find no issues, we match up any "valid" arguments, and start again.

Note that there's a lot of extra complexity:
 - We try to stay efficient on the happy path, only computing the diagonal until we find a problem, and then filling in the rest of the matrix.
 - Closure arguments are wrapped in a tuple and need to be unwrapped
 - We need to resolve closure types after the rest, to allow the most specific type constraints
 - We need to handle imported C functions that might be variadic in their inputs.

I tried to document a lot of this in comments in the code and keep the naming clear.
2022-04-16 02:26:56 -04:00
Maybe Waffle
8412d5dc5c --bless tests 2022-04-10 16:45:09 +04:00
Dylan DPC
661b0e5b32
Rollup merge of #95525 - ohno418:suggest-derivable-trait-E0277, r=compiler-errors
Suggest derivable trait on E0277 error

Closes https://github.com/rust-lang/rust/issues/95099 .
2022-04-05 15:56:49 +02:00
David Wood
a88717cef0 macros: support translatable labels
Extends support for generating `DiagnosticMessage::FluentIdentifier`
messages from `SessionDiagnostic` derive to `#[label]`.

Signed-off-by: David Wood <david.wood@huawei.com>
2022-04-05 07:01:03 +01:00
ohno418
0d2a00058b Suggest derivable trait on E0277 2022-04-05 11:14:32 +09:00
lcnr
00cf7af44a rework error messages for incorrect inherent impls 2022-03-30 11:23:58 +02:00
lcnr
36a3ebde96 fix behavior for empty impls 2022-03-30 11:23:58 +02:00
lcnr
983c12f7f6 update ui tests 2022-03-30 11:23:58 +02:00
Ralf Jung
f93a146433 interpret/memory: simplify check_and_deref_ptr 2022-03-22 20:19:30 -04:00
lcnr
e8890aad62 move adt_const_params to its own tracking issue 2022-03-21 16:33:42 +01:00
Matthias Krüger
ec09e70ee1
Rollup merge of #94739 - estebank:suggest-let-else, r=oli-obk
Suggest `if let`/`let_else` for refutable pat in `let`

r? `````@oli-obk`````
2022-03-09 23:14:11 +01:00
bors
10dccdc7fc Auto merge of #94515 - estebank:tweak-move-error, r=davidtwco
Tweak move error

Point at method definition that causes type to be consumed.

Fix #94056.
2022-03-09 08:58:47 +00:00
Esteban Kuber
0d92752b8a Suggest if let/let_else for refutable pat in let 2022-03-08 16:32:08 +00:00
Esteban Kuber
6f45f73adc Change wording of suggestion to add missing match arm 2022-03-08 00:20:41 +00:00
Esteban Kuber
ab4feea50d Point at uncovered variants in enum definition in note instead of a span_label
This makes the order of the output always consistent:

1. Place of the `match` missing arms
2. The `enum` definition span
3. The structured suggestion to add a fallthrough arm
2022-03-08 00:19:08 +00:00
Esteban Kuber
2383858f34 When finding a match expr with a single arm that requires more, suggest it
Given

```rust
match Some(42) {
    Some(0) => {}
}
```

suggest

```rust
match Some(42) {
    Some(0) => {}
    None | Some(_) => todo!(),
}
```
2022-03-08 00:18:24 +00:00
Esteban Kuber
02a3830f24 When encountering a match expr with no arms, suggest it
Given

```rust
match Some(42) {}
```

suggest

```rust
match Some(42) { None | Some(_) => todo!(), }
```
2022-03-08 00:18:23 +00:00
Esteban Kuber
98752776b8 Tweak move error
Point at method definition that causes type to be consumed.

Fix #94056.
2022-03-03 21:21:57 +00:00
Michael Goulet
bb548a918a Remove in-band lifetimes 2022-02-24 18:50:33 -08:00
Matthias Krüger
58bfe72f52
Rollup merge of #91939 - GKFX:feature-91866, r=cjgillot
Clarify error on casting larger integers to char

Closes #91836 with changes to E0604.md and a `span_help`.
2022-02-06 04:13:29 +01:00
George Bateman
badb81a612
#91939: integer to char cast error, make more targeted 2022-01-25 23:46:56 +00:00
lcnr
b2d8f0c77d generic_arg_infer: placeholder in signature err 2022-01-18 12:23:43 +01:00
Tomasz Miąsko
61c233bac3 Remove ui tests for LLVM-style inline assembly 2022-01-12 18:51:31 +01:00
TmLev
406d6d4028 docs(error-codes): Add long error explanation for E0227 2021-12-28 15:46:20 +03:00
Esteban Kuber
5e1972eba7 Tweak assoc type obligation spans
* Point at RHS of associated type in obligation span
* Point at `impl` assoc type on projection error
* Reduce verbosity of recursive obligations
* Point at source of binding lifetime obligation
* Tweak "required bound" note
* Tweak "expected... found opaque (return) type" labels
* Point at set type in impl assoc type WF errors
2021-12-11 02:32:15 +00:00
Lucas Kent
abd704b844 Remove all migrate.nll.stderr files 2021-11-30 12:05:34 +11:00
Esteban Küber
37a11a96a1 On type mismatch caused by assignment, point at assignee
* Do not emit unnecessary E0308 after E0070
* Show fewer errors on `while let` missing `let`
* Hide redundant E0308 on `while let` missing `let`
* Point at binding definition when possible on invalid assignment
* do not point at closure twice
* do not suggest `if let` for literals in lhs
* account for parameter types
2021-11-25 18:04:33 +00:00