Skip to content

Commit

Permalink
Merge #9744
Browse files Browse the repository at this point in the history
9744: fix: Annotate type hints for pattern name ranges instead of the pattern itself r=Veykril a=Veykril

The current type hints do not go well with `bindings_after_at` which is likely to land with 1.56(rust-lang/rust#85305 🎉very excited for this), hence annotate the names of ident patterns instead of the entire pattern.

This changes where the typehints go for ident patterns that use @ bindings, some example comparisons:

Before:
![Code_82ILMppkve](https://user-images.githubusercontent.com/3757771/127741276-e1dd173b-2964-4df0-abae-860283b2e1be.png)
After:
![Code_tPttN2rJpw](https://user-images.githubusercontent.com/3757771/127741277-e7fc2836-4f31-4c45-a3a9-69cbff3d52d9.png)

This change has no visible effect on patterns without ``@`` bindings.

Co-authored-by: Lukas Wirth <[email protected]>
  • Loading branch information
bors[bot] and Veykril authored Jul 31, 2021
2 parents 6b733ea + f7c7f89 commit a423b30
Showing 1 changed file with 32 additions and 6 deletions.
38 changes: 32 additions & 6 deletions crates/ide/src/inlay_hints.rs
Original file line number Diff line number Diff line change
Expand Up @@ -194,8 +194,12 @@ fn get_bind_pat_hints(
if should_not_display_type_hint(sema, &pat, &ty) {
return None;
}

acc.push(InlayHint {
range: pat.syntax().text_range(),
range: match pat.name() {
Some(name) => name.syntax().text_range(),
None => pat.syntax().text_range(),
},
kind: InlayKind::TypeHint,
label: hint_iterator(sema, &famous_defs, config, &ty)
.unwrap_or_else(|| ty.display_truncated(sema.db, config.max_length).to_string().into()),
Expand Down Expand Up @@ -799,6 +803,28 @@ fn main() {
);
}

#[test]
fn type_hints_bindings_after_at() {
check_types(
r#"
//- minicore: option
fn main() {
let ref foo @ bar @ ref mut baz = 0;
//^^^ &i32
//^^^ i32
//^^^ &mut i32
let [x @ ..] = [0];
//^ [i32; 1]
if let x @ Some(_) = Some(0) {}
//^ Option<i32>
let foo @ (bar, baz) = (3, 3);
//^^^ (i32, i32)
//^^^ i32
//^^^ i32
}"#,
);
}

#[test]
fn default_generic_types_should_not_be_displayed() {
check(
Expand Down Expand Up @@ -839,7 +865,7 @@ impl<T> Iterator for SomeIter<T> {
fn main() {
let mut some_iter = SomeIter::new();
//^^^^^^^^^^^^^ SomeIter<Take<Repeat<i32>>>
//^^^^^^^^^ SomeIter<Take<Repeat<i32>>>
some_iter.push(iter::repeat(2).take(2));
let iter_of_iters = some_iter.take(2);
//^^^^^^^^^^^^^ impl Iterator<Item = impl Iterator<Item = i32>>
Expand Down Expand Up @@ -938,7 +964,7 @@ fn main() {
//^^^^ i32
let test: i32 = 33;
let mut test = 33;
//^^^^^^^^ i32
//^^^^ i32
let _ = 22;
let test = "test";
//^^^^ &str
Expand Down Expand Up @@ -1048,7 +1074,7 @@ impl<T> IntoIterator for Vec<T> {
fn main() {
let mut data = Vec::new();
//^^^^^^^^ Vec<&str>
//^^^^ Vec<&str>
data.push("foo");
for i in
Expand Down Expand Up @@ -1076,7 +1102,7 @@ impl<T> IntoIterator for Vec<T> {
fn main() {
let mut data = Vec::new();
//^^^^^^^^ Vec<&str>
//^^^^ Vec<&str>
data.push("foo");
for i in data {
//^ &str
Expand Down Expand Up @@ -1153,7 +1179,7 @@ fn main() {
r#"
fn main() {
let mut start = 0;
//^^^^^^^^^ i32
//^^^^^ i32
(0..2).for_each(|increment| { start += increment; });
//^^^^^^^^^ i32
Expand Down

0 comments on commit a423b30

Please sign in to comment.