diff options
-rw-r--r-- | crates/ide/src/inlay_hints.rs | 62 |
1 files changed, 39 insertions, 23 deletions
diff --git a/crates/ide/src/inlay_hints.rs b/crates/ide/src/inlay_hints.rs index 7d716577e..08ef49a27 100644 --- a/crates/ide/src/inlay_hints.rs +++ b/crates/ide/src/inlay_hints.rs | |||
@@ -228,6 +228,8 @@ fn hint_iterator( | |||
228 | _ => None, | 228 | _ => None, |
229 | })?; | 229 | })?; |
230 | if let Some(ty) = ty.normalize_trait_assoc_type(db, iter_trait, &[], assoc_type_item) { | 230 | if let Some(ty) = ty.normalize_trait_assoc_type(db, iter_trait, &[], assoc_type_item) { |
231 | // TODO kb also check for the iterator impls for this ty | ||
232 | dbg!(ty.display(db).to_string()); | ||
231 | const LABEL_START: &str = "impl Iterator<Item = "; | 233 | const LABEL_START: &str = "impl Iterator<Item = "; |
232 | const LABEL_END: &str = ">"; | 234 | const LABEL_END: &str = ">"; |
233 | 235 | ||
@@ -1002,18 +1004,6 @@ fn main() { | |||
1002 | 1004 | ||
1003 | println!("Unit expr"); | 1005 | println!("Unit expr"); |
1004 | } | 1006 | } |
1005 | |||
1006 | //- /alloc.rs crate:alloc deps:core | ||
1007 | mod collections { | ||
1008 | struct Vec<T> {} | ||
1009 | impl<T> Vec<T> { | ||
1010 | fn new() -> Self { Vec {} } | ||
1011 | fn push(&mut self, t: T) { } | ||
1012 | } | ||
1013 | impl<T> IntoIterator for Vec<T> { | ||
1014 | type Item=T; | ||
1015 | } | ||
1016 | } | ||
1017 | "#, | 1007 | "#, |
1018 | ); | 1008 | ); |
1019 | } | 1009 | } |
@@ -1043,17 +1033,6 @@ fn main() { | |||
1043 | //^ &str | 1033 | //^ &str |
1044 | } | 1034 | } |
1045 | } | 1035 | } |
1046 | //- /alloc.rs crate:alloc deps:core | ||
1047 | mod collections { | ||
1048 | struct Vec<T> {} | ||
1049 | impl<T> Vec<T> { | ||
1050 | fn new() -> Self { Vec {} } | ||
1051 | fn push(&mut self, t: T) { } | ||
1052 | } | ||
1053 | impl<T> IntoIterator for Vec<T> { | ||
1054 | type Item=T; | ||
1055 | } | ||
1056 | } | ||
1057 | "#, | 1036 | "#, |
1058 | ); | 1037 | ); |
1059 | } | 1038 | } |
@@ -1183,4 +1162,41 @@ fn main() { | |||
1183 | "#]], | 1162 | "#]], |
1184 | ); | 1163 | ); |
1185 | } | 1164 | } |
1165 | |||
1166 | #[test] | ||
1167 | fn shorten_iterators_in_associated_params() { | ||
1168 | check_with_config( | ||
1169 | InlayHintsConfig { | ||
1170 | parameter_hints: false, | ||
1171 | type_hints: true, | ||
1172 | chaining_hints: true, | ||
1173 | max_length: None, | ||
1174 | }, | ||
1175 | r#" | ||
1176 | use core::iter; | ||
1177 | |||
1178 | pub struct SomeIter<T> {} | ||
1179 | |||
1180 | impl<T> SomeIter<T> { | ||
1181 | pub fn new() -> Self { SomeIter {} } | ||
1182 | pub fn push(&mut self, t: T) {} | ||
1183 | } | ||
1184 | |||
1185 | impl<T> Iterator for SomeIter<T> { | ||
1186 | type Item = T; | ||
1187 | fn next(&mut self) -> Option<Self::Item> { | ||
1188 | None | ||
1189 | } | ||
1190 | } | ||
1191 | |||
1192 | fn main() { | ||
1193 | let mut some_iter = SomeIter::new(); | ||
1194 | //^^^^^^^^^^^^^ SomeIter<Take<Repeat<i32>>> | ||
1195 | some_iter.push(iter::repeat(2).take(2)); | ||
1196 | let zz = some_iter.take(2); | ||
1197 | //^^ impl Iterator<Item = Take<Repeat<i32>>> | ||
1198 | } | ||
1199 | "#, | ||
1200 | ); | ||
1201 | } | ||
1186 | } | 1202 | } |