Rollup merge of #97798 - WaffleLapkin:allow_for_suggestions_that_are_quite_far_away_from_each_other, r=estebank

Hide irrelevant lines in suggestions to allow for suggestions that are far from each other to be shown

This is an attempt to fix suggestions one part of which is 6 lines or more far from the first. I've noticed "the problem" (of not showing some parts of the suggestion) here: https://github.com/rust-lang/rust/pull/97759#discussion_r889689230.

I'm not sure about the implementation (this big closure is just bad and makes already complicated code even more so), but I want to at least discuss the result.

Here is an example of how this changes the output:

Before:
```text
help: consider enclosing expression in a block
  |
3 ~     'l: { match () { () => break 'l,
4 |
5 |
6 |
7 |
8 |
...
```

After:
```text
help: consider enclosing expression in a block
  |
3 ~     'l: { match () { () => break 'l,
4 |
...
31|
32~ } };
  |
```

r? `@estebank`
`@rustbot` label +A-diagnostics +A-suggestion-diagnostics
This commit is contained in:
Dylan DPC 2022-06-17 12:21:48 +02:00 committed by GitHub
commit 51e2d6a4a9
12 changed files with 102 additions and 21 deletions

View file

@ -56,7 +56,25 @@ LL | if s == "43" {
LL ~ return 43;
LL | }
LL | s == "42"
LL | } {
LL ~ return 45;
LL | }
LL | match s.len() {
LL ~ 10 => 2,
LL | 20 => {
...
LL | if foo() {
LL ~ return 20;
LL | }
LL | println!("foo");
LL ~ 3
LL | };
LL | }
LL ~ 20
LL | },
LL ~ 40 => 30,
LL ~ _ => 1,
|
error: using `Option.and_then(|x| Some(y))`, which is more succinctly expressed as `map(|x| y)`
--> $DIR/bind_instead_of_map_multipart.rs:61:13

View file

@ -98,7 +98,8 @@ LL + id: e_id,
LL + name: "Player 1".to_string(),
LL + some_data: vec![0x12, 0x34, 0x56, 0x78, 0x90],
LL + };
...
LL + process_data(pack);
|
error: all if blocks contain the same code at both the start and the end
--> $DIR/shared_at_top_and_bottom.rs:94:5

View file

@ -28,7 +28,8 @@ LL + v
LL + } else {
LL + v2
LL + }
...
LL + });
|
error: usage of `contains_key` followed by `insert` on a `HashMap`
--> $DIR/entry.rs:38:5
@ -50,7 +51,8 @@ LL + v
LL + } else {
LL + v2
LL + }
...
LL + });
|
error: usage of `contains_key` followed by `insert` on a `HashMap`
--> $DIR/entry.rs:47:5
@ -72,7 +74,9 @@ LL + e.insert(v);
LL + } else {
LL + e.insert(v2);
LL + return;
...
LL + }
LL + }
|
error: usage of `contains_key` followed by `insert` on a `HashMap`
--> $DIR/entry.rs:57:5
@ -111,7 +115,11 @@ LL + 1 if true => {
LL + v
LL + },
LL + _ => {
...
LL + v2
LL + },
LL + }
LL + });
|
error: usage of `contains_key` followed by `insert` on a `HashMap`
--> $DIR/entry.rs:75:5
@ -133,7 +141,9 @@ LL + 0 => foo(),
LL + _ => {
LL + e.insert(v2);
LL + },
...
LL + };
LL + }
|
error: usage of `contains_key` followed by `insert` on a `HashMap`
--> $DIR/entry.rs:85:5
@ -155,7 +165,26 @@ LL + match 0 {
LL + 0 if false => {
LL + v
LL + },
...
LL + 1 => {
LL + foo();
LL + v
LL + },
LL + 2 | 3 => {
LL + for _ in 0..2 {
LL + foo();
LL + }
LL + if true {
LL + v
LL + } else {
LL + v2
LL + }
LL + },
LL + _ => {
LL + v2
LL + },
LL + }
LL + });
|
error: usage of `contains_key` followed by `insert` on a `HashMap`
--> $DIR/entry.rs:119:5

View file

@ -17,7 +17,9 @@ LL + e.insert(v);
LL + }
LL + std::collections::hash_map::Entry::Occupied(mut e) => {
LL + e.insert(v2);
...
LL + }
LL + }
|
error: usage of `contains_key` followed by `insert` on a `HashMap`
--> $DIR/entry_with_else.rs:22:5
@ -37,7 +39,9 @@ LL + e.insert(v);
LL + }
LL + std::collections::hash_map::Entry::Vacant(e) => {
LL + e.insert(v2);
...
LL + }
LL + }
|
error: usage of `contains_key` followed by `insert` on a `HashMap`
--> $DIR/entry_with_else.rs:28:5
@ -95,7 +99,9 @@ LL + e.insert(v);
LL + }
LL + std::collections::hash_map::Entry::Occupied(mut e) => {
LL + e.insert(v2);
...
LL + }
LL + }
|
error: usage of `contains_key` followed by `insert` on a `HashMap`
--> $DIR/entry_with_else.rs:46:5
@ -115,7 +121,10 @@ LL + if true { Some(e.insert(v)) } else { Some(e.insert(v2)) }
LL + }
LL + std::collections::hash_map::Entry::Vacant(e) => {
LL + e.insert(v);
...
LL + None
LL + }
LL ~ };
|
error: usage of `contains_key` followed by `insert` on a `HashMap`
--> $DIR/entry_with_else.rs:52:5

View file

@ -32,7 +32,8 @@ LL + .map(|i| i * 2)
LL + .filter(|i| i % 2 == 0)
LL + .map(|_| ())
LL + .next()
...
LL + .unwrap();
|
error: this let-binding has unit value
--> $DIR/let_unit.rs:80:5

View file

@ -122,7 +122,14 @@ LL + let a = 42;
LL + let b = 21;
LL + if a < b {
LL + let c = 21;
...
LL + let d = 42;
LL + if c < d {
LL + let _ = 42;
LL + }
LL + }
LL + 42
LL + }
|
error: this function can be simplified using the `async fn` syntax
--> $DIR/manual_async_fn.rs:92:1

View file

@ -19,7 +19,8 @@ LL + return;
LL + } else {
LL + println!("{}", v);
LL + }
...
LL + }
|
help: ...and replace `return` with `continue`
|
LL | continue;

View file

@ -117,7 +117,8 @@ LL + Self::new()
LL + }
LL + }
LL +
...
LL ~ impl<T> Foo<T> {
|
error: aborting due to 7 previous errors

View file

@ -56,7 +56,8 @@ LL | let f = e.clone(); // OK
LL | let g = x;
LL ~ let h = g.to_owned();
LL | let i = (e).clone();
...
LL ~ x.to_owned()
|
error: writing `&String` instead of `&str` involves a new object where a slice will do
--> $DIR/ptr_arg.rs:57:18

View file

@ -188,7 +188,9 @@ LL + _ => mutex2.lock().unwrap(),
LL + }
LL + .s
LL + .len()
...
LL + > 1;
LL ~ match value
|
error: temporary with significant drop in match scrutinee
--> $DIR/significant_drop_in_scrutinee.rs:397:11
@ -211,7 +213,10 @@ LL + } else {
LL + mutex2.lock().unwrap()
LL + }
LL + .s
...
LL + .len()
LL + > 1;
LL ~ match value
|
error: temporary with significant drop in match scrutinee
--> $DIR/significant_drop_in_scrutinee.rs:451:11

View file

@ -137,7 +137,13 @@ LL + foo(1);
LL + };
LL + {
LL + foo(2);
...
LL + foo(3);
LL + };
LL + taking_multiple_units(
LL + (),
LL + (),
LL ~ );
|
error: passing a unit value to a function
--> $DIR/unit_arg.rs:85:13

View file

@ -23,7 +23,8 @@ LL | if a {
LL | Some(-1);
LL ~ 2
LL | } else {
...
LL ~ return 1337;
|
error: this function's return value is unnecessarily wrapped by `Option`
--> $DIR/unnecessary_wraps.rs:21:1
@ -122,7 +123,8 @@ LL | if a {
LL | Some(());
LL ~
LL | } else {
...
LL ~ return ;
|
error: this function's return value is unnecessary
--> $DIR/unnecessary_wraps.rs:117:1