Commit Graph

475 Commits

Author SHA1 Message Date
Zack M. Davis
3645b0626c #[must_use] for functions (RFC 1940)
The return value of a function annotated with `must_use`, must be used.

This is in the matter of #43302.
2017-08-08 11:31:42 -07:00
Guillaume Gomez
f94157eb61 Handle type aliases as well 2017-08-06 20:46:32 +02:00
Guillaume Gomez
09420fc206 Fix union unused fields check 2017-08-06 18:49:33 +02:00
Guillaume Gomez
90f54d00d3 Improve union unused field detection 2017-08-06 17:19:15 +02:00
Guillaume Gomez
46fe8e9966 Don't warn on unused field on union 2017-08-05 22:02:45 +02:00
bors
dae8864dbe Auto merge of #43600 - scalexm:issue-35976, r=nikomatsakis
Add a more precise error message for issue #35976

When trying to perform static dispatch on something which derefs to a trait object, and the target trait is not in scope, we had confusing error messages if the target method had a `Self: Sized` bound. We add a more precise error message in this case: "consider using trait ...".

Fixes #35976.

r? @nikomatsakis
2017-08-04 15:03:00 +00:00
bors
f2a5af7a4c Auto merge of #43442 - zackmdavis:note_available_field_names_if_levenshtein_fails, r=nikomatsakis
field does not exist error: note fields if Levenshtein suggestion fails

When trying to access or initialize a nonexistent field, if we can't infer what
field was meant (by virtue of the purported field in the source being a small
Levenshtein distance away from an actual field, suggestive of a typo), issue a
note listing all the available fields. To reduce terminal clutter, we don't
issue the note when we have a `find_best_match_for_name` Levenshtein
suggestion: the suggestion is probably right.

The third argument of the call to `find_best_match_for_name` is changed to
`None`, accepting the default maximum Levenshtein distance of one-third of the
identifier supplied for correction. The previous value of `Some(name.len())`
was overzealous, inappropriately very Levenshtein-distant suggestions when the
attempted field access could not plausibly be a mere typo. For example, if a
struct has fields `mule` and `phone`, but I type `.donkey`, I'd rather the
error have a note listing that the available fields are, in fact, `mule` and
`phone` (which is the behavior induced by this patch) rather than the error
asking "did you mean `phone`?" (which is the behavior on master). The "only
find fits with at least one matching letter" comment was accurate when it was
first introduced in 09d992471 (January 2015), but is a vicious lie in its
present context before a call to `find_best_match_for_name` and must be
destroyed (replacing every letter is within a Levenshtein distance of name.len()).

The present author claims that this suffices to resolve #42599.
2017-08-04 10:13:55 +00:00
scalexm
2e8e75f50f Tweak error message 2017-08-03 14:40:40 +02:00
bors
c2407516ff Auto merge of #43568 - arielb1:constant-recovery, r=eddyb
trans::mir::constant - fix assignment error recovery

trans::mir::constant - fix assignment error recovery

We used to not store anything when the RHS of an assignment returned an error, which caused ICEs downstream.

Fixes #43197.
2017-08-01 14:20:23 +00:00
bors
6e8452ee4f Auto merge of #43552 - petrochenkov:instab, r=jseyfried
resolve: Try to fix instability in import suggestions

cc https://github.com/rust-lang/rust/pull/42033

`lookup_import_candidates` walks module graph in DFS order and skips modules that were already visited (which is correct because there can be cycles).
However it means that if we visited `std::prelude::v1::Result::Ok` first, we will never visit `std::result::Result::Ok` because `Result` will be skipped as already visited (note: enums are also modules here), and otherwise, if we visited `std::result::Result::Ok` first, we will never get to `std::prelude::v1::Result::Ok`.
What child module of `std` (`prelude` or `result`) we will visit first, depends on randomized hashing, so we have instability in diagnostics.

With this patch modules' children are visited in stable order in `lookup_import_candidates`, this should fix the issue, but let's see what Travis will say.

r? @oli-obk
2017-08-01 06:05:34 +00:00
Zack M. Davis
2dbfa3995e limit and delimit available fields in note
Also, don't show the note if no fields are available (usually due to
privacy).
2017-07-31 18:45:02 -07:00
Ariel Ben-Yehuda
93db1f9923 trans::mir::constant - fix assignment error recovery
We used to not store anything when the RHS of an assignment returned an
error, which caused ICEs downstream.

Fixes #43197.
2017-07-31 18:09:02 +03:00
bors
477e9f0171 Auto merge of #43543 - petrochenkov:32330, r=nikomatsakis
Cleanup some remains of `hr_lifetime_in_assoc_type` compatibility lint

r? @nikomatsakis
2017-07-30 12:48:20 +00:00
Vadim Petrochenkov
a6993d6469 resolve: Fix instability in import suggestions 2017-07-30 12:27:57 +03:00
Vadim Petrochenkov
80cf3f99f4 Cleanup some remains of hr_lifetime_in_assoc_type compatibility lint 2017-07-29 17:50:42 +03:00
gaurikholkar
cb93cc6299 changing E0623 error message 2017-07-29 17:40:16 +05:30
gaurikholkar
4fb1808ab6 Adding E0623, to detect missing lifetimes when both regions are anonymous 2017-07-28 08:51:58 +05:30
Vadim Petrochenkov
1e8a7f68e9 Avoid duplicated errors for generic arguments in macro paths 2017-07-27 23:01:17 +03:00
Vadim Petrochenkov
128f565dae Give span to angle bracketed generic arguments 2017-07-27 22:59:35 +03:00
bors
f60d373422 Auto merge of #43489 - petrochenkov:mutref, r=GuillaumeGomez
Better diagnostics and recovery for `mut ref` in patterns

Fixes https://github.com/rust-lang/rust/issues/43286
Supersedes https://github.com/rust-lang/rust/pull/43451

r? @GuillaumeGomez
2017-07-27 11:40:12 +00:00
bors
da4d49002d Auto merge of #43479 - ivanbakel:loop_borrow_msg, r=estebank
Extended error message for mut borrow conflicts in loops

RFC issue: https://github.com/rust-lang/rfcs/issues/2080

The error message for multiple mutable borrows on the same value over loop iterations now makes it clear that the conflict comes from the borrow outlasting the loop. The wording of the error is based on the special case of the moved-value error for a value moved in a loop. Following the example of that error, the code remains the same for the special case.

This is mainly because I felt the current message is confusing in the loop case : https://github.com/rust-lang/rust/issues/43437. It's not clear that the two conflicting borrows are in different iterations of the loop, and instead it just looks like the compiler has an issue with a single line.
2017-07-27 07:54:15 +00:00
Isaac van Bakel
688852047c Added tests for new loop borrow message
One set of tests is to ensure the current message is correct.
The other set is to check the messages are generated correctly for every
type of loop.
2017-07-27 02:43:11 +01:00
Vadim Petrochenkov
dda30f6902 Better diagnostics and recovery for mut ref in patterns 2017-07-26 18:59:07 +03:00
Mark Simulacrum
b583392058 Rollup merge of #43447 - estebank:import-span, r=nikomatsakis
Point at path segment on module not found

Point at the correct path segment on a import statement where a module
doesn't exist.

New output:

```rust
error[E0432]: unresolved import `std::bar`
 --> <anon>:1:10
  |
1 | use std::bar::{foo1, foo2};
  |          ^^^ Could not find `bar` in `std`
```

instead of:

```rust
error[E0432]: unresolved import `std::bar::foo1`
 --> <anon>:1:16
  |
1 | use std::bar::{foo1, foo2};
  |                ^^^^ Could not find `bar` in `std`

error[E0432]: unresolved import `std::bar::foo2`
 --> <anon>:1:22
  |
1 | use std::bar::{foo1, foo2};
  |                      ^^^^ Could not find `bar` in `std`
```

Fix #43040.
2017-07-26 06:15:02 -06:00
Mark Simulacrum
b5b7266b78 Rollup merge of #42959 - SimonSapin:nonzero-checked, r=sfackler
Make the "main" constructors of NonZero/Shared/Unique return Option

Per discussion in https://github.com/rust-lang/rust/issues/27730#issuecomment-303939441.

This is a breaking change to unstable APIs.

The old behavior is still available under the name `new_unchecked`. Note that only that one can be `const fn`, since `if` is currently not allowed in constant contexts.

In the case of `NonZero` this requires adding a new `is_zero` method to the `Zeroable` trait. I mildly dislike this, but it’s not much worse than having a `Zeroable` trait in the first place. `Zeroable` and `NonZero` are both unstable, this can be reworked later.
2017-07-26 06:15:01 -06:00
Esteban Küber
552ff07758 Point at path segment on module not found
Point at the correct path segment on a import statement where a module
doesn't exist.

New output:

```rust
error[E0432]: unresolved import `std::bar`
 --> <anon>:1:10
  |
1 | use std::bar::{foo1, foo2};
  |          ^^^ Could not find `bar` in `std`
```

instead of:

```rust
error[E0432]: unresolved import `std::bar::foo1`
 --> <anon>:1:16
  |
1 | use std::bar::{foo1, foo2};
  |                ^^^^ Could not find `bar` in `std`

error[E0432]: unresolved import `std::bar::foo2`
 --> <anon>:1:22
  |
1 | use std::bar::{foo1, foo2};
  |                      ^^^^ Could not find `bar` in `std`
```
2017-07-25 21:25:43 -07:00
Zack M. Davis
bf7e91f61d field does not exist error: note fields if Levenshtein suggestion fails
When trying to access or initialize a nonexistent field, if we can't infer what
field was meant (by virtue of the purported field in the source being a small
Levenshtein distance away from an actual field, suggestive of a typo), issue a
note listing all the available fields. To reduce terminal clutter, we don't
issue the note when we have a `find_best_match_for_name` Levenshtein
suggestion: the suggestion is probably right.

The third argument of the call to `find_best_match_for_name` is changed to
`None`, accepting the default maximum Levenshtein distance of one-third of the
identifier supplied for correction. The previous value of `Some(name.len())`
was overzealous, inappropriately very Levenshtein-distant suggestions when the
attempted field access could not plausibly be a mere typo. For example, if a
struct has fields `mule` and `phone`, but I type `.donkey`, I'd rather the
error have a note listing that the available fields are, in fact, `mule` and
`phone` (which is the behavior induced by this patch) rather than the error
asking "did you mean `phone`?" (which is the behavior on master). The "only
find fits with at least one matching letter" comment was accurate when it was
first introduced in 09d992471 (January 2015), but is a vicious lie in its
present context before a call to `find_best_match_for_name` and must be
destroyed (replacing every letter is a Levenshtein distance of name.len()).

The present author claims that this suffices to resolve #42599.
2017-07-23 14:38:09 -07:00
bors
afe145d227 Auto merge of #43096 - estebank:ascription-help, r=nikomatsakis
Point at `:` when using it instead of `;`

When triggering type ascription in such a way that we can infer a
statement end was intended, add a suggestion for the change. Always
point out the reason for the expectation of a type is due to type
ascription.

Fix #42057, #41928.
2017-07-23 20:56:20 +00:00
bors
f3e26a02eb Auto merge of #43386 - oli-obk:suggestions, r=nikomatsakis
Adjust new suggestions to the suggestion guidelines

Addresses https://github.com/rust-lang/rust/pull/42033#discussion_r127694915

guidelines are https://github.com/rust-lang/rust/blob/master//src/librustc_errors/diagnostic.rs#L212-L224
2017-07-23 18:13:20 +00:00
Simon Sapin
0d1864b8cf Remove unnecessary unsafe in test/ui/print_type_sizes/nullable.rs 2017-07-22 20:38:40 +02:00
Simon Sapin
ff7f220a43 Don’t create NonZero(0) in test/ui/print_type_sizes/nullable.rs 2017-07-22 20:38:40 +02:00
Simon Sapin
0a08ad0443 Rename {NonZero,Shared,Unique}::new to new_unchecked 2017-07-22 20:38:16 +02:00
bors
35f64996ad Auto merge of #43352 - estebank:macro-span-replacement, r=petrochenkov
Use the macro structure spans instead of the invocation

Fix #42104, CC #2887.
2017-07-22 13:30:19 +00:00
bors
066a0ae99b Auto merge of #43343 - petrochenkov:methlife3, r=estebank
Add an extra note to `late_bound_lifetime_arguments` error/lint

Fixes https://github.com/rust-lang/rust/issues/42868#issuecomment-316368538
2017-07-22 08:36:11 +00:00
bors
f0b07cac2f Auto merge of #43323 - perryprog:master, r=estebank
Less verbose output for unused arguments

Closes #37718

This is my first contribution to rust, so sorry if I'm missing anything!

The output now looks like this:
<img width="831" alt="screen shot 2017-07-18 at 5 01 32 pm" src="https://user-images.githubusercontent.com/12972285/28347566-dbfa9962-6c05-11e7-8730-c2e8062a04cc.png">

It's not the prettiest, but whenever #41850 gets resolved, this should be able to be improved.

**EDIT:** This also does not seem
r? @Mark-Simulacrum
2017-07-22 04:41:10 +00:00
Perry Fraser
5c10db3f94 More tests 2017-07-21 18:11:44 -04:00
Oliver Schneider
401ab612c2 Adjust new suggestions to the suggestion guidelines 2017-07-21 13:59:17 +02:00
Esteban Küber
09c712dae3 Fix test 2017-07-20 21:28:53 -07:00
Esteban Küber
e99d309c56 Use the macro structure spans instead of the invocation 2017-07-20 21:27:22 -07:00
bors
1beaea26ff Auto merge of #43251 - gaurikholkar:span_reorder, r=nikomatsakis
Reorder span suggestions to appear below main labels

A fix to #41698

r? @nikomatsakis
2017-07-20 03:36:14 +00:00
Vadim Petrochenkov
18d9701645 Add an extra note to late_bound_lifetime_arguments error/lint 2017-07-19 23:12:58 +03:00
bors
582af6e1ad Auto merge of #43178 - zackmdavis:some_suggestion, r=eddyb
suggest one-argument enum variant to fix type mismatch when applicable

Following @est31's [suggestion](https://github.com/rust-lang/rust/issues/42764#issuecomment-309680886).

![some_suggestion](https://user-images.githubusercontent.com/1076988/28101064-ee83f51e-667a-11e7-9e4f-d8f9eb2fb6c3.png)

Resolves #42764.
2017-07-19 20:12:56 +00:00
Perry Fraser
0fcb4fca19 Change the error message for multiple unused print params 2017-07-18 22:06:24 -04:00
Esteban Küber
e39bcecf79 Handle type ascription cases with a method call instead of a type 2017-07-18 13:33:36 -07:00
gaurikholkar
26a8357f5c reorder span labels 2017-07-18 00:07:37 +05:30
Esteban Küber
faf90351b7 Add flag to hide code on inline suggestions
Now there's a way to add suggestions that hide the suggested code when
presented inline, to avoid weird wording when short code snippets are
added at the end.
2017-07-17 09:27:51 -07:00
bors
028569ab1b Auto merge of #43266 - feadoor:issue-43253-exclusive-range-warning, r=nikomatsakis
Fix `range_covered_by_constructor` for exclusive ranges.

This resolves #43253
2017-07-17 13:31:37 +00:00
Oliver Schneider
eb7f429ea5 Move resolve diagnostic instability to compile-fail
The produced paths aren't stable between builds, since
reporting paths inside resolve, before resolve is finished
might produce paths resolved to type aliases instead of
the concrete type.

Compile-fail tests can match just parts of messages, so they
don't "suffer" from this issue.

This is just a workaround, the instability should be fixed
in the future.
2017-07-17 10:16:08 +02:00
Oliver Schneider
a9d9a4aab4
Change some helps to suggestions 2017-07-17 10:03:37 +02:00
Oliver Schneider
4a286639e8
Move some tests from compile-fail to ui 2017-07-17 08:38:54 +02:00