From c42cdff3d2ed2e30add09dd0d602181b6f83534d Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Thu, 17 Jun 2021 11:28:44 +0300 Subject: internal: minimize minicore We want to keep minicore small, so let's split out iterator adapters and sources into a separate `iterators` region, and use them only when needed. --- crates/ide/src/inlay_hints.rs | 6 +- .../src/handlers/replace_for_loop_with_for_each.rs | 78 +++++++--------------- crates/test_utils/src/minicore.rs | 11 ++- 3 files changed, 36 insertions(+), 59 deletions(-) diff --git a/crates/ide/src/inlay_hints.rs b/crates/ide/src/inlay_hints.rs index a6ba3d734..335d57a0d 100644 --- a/crates/ide/src/inlay_hints.rs +++ b/crates/ide/src/inlay_hints.rs @@ -818,7 +818,7 @@ fn main() { fn shorten_iterators_in_associated_params() { check_types( r#" -//- minicore: iterator +//- minicore: iterators use core::iter; pub struct SomeIter {} @@ -1126,7 +1126,7 @@ fn main() { fn shorten_iterator_hints() { check_types( r#" -//- minicore: iterator +//- minicore: iterators use core::iter; struct MyIter; @@ -1357,7 +1357,7 @@ fn main() { max_length: None, }, r#" -//- minicore: iterator +//- minicore: iterators use core::iter; struct MyIter; diff --git a/crates/ide_assists/src/handlers/replace_for_loop_with_for_each.rs b/crates/ide_assists/src/handlers/replace_for_loop_with_for_each.rs index 8e571723d..5f2aa016f 100644 --- a/crates/ide_assists/src/handlers/replace_for_loop_with_for_each.rs +++ b/crates/ide_assists/src/handlers/replace_for_loop_with_for_each.rs @@ -186,18 +186,14 @@ fn main() { fn test_for_borrowed() { check_assist( replace_for_loop_with_for_each, - r" -//- minicore: iterator -struct Iter; -impl Iterator for Iter { - type Item = usize; - fn next(&mut self) -> Option { None } -} + r#" +//- minicore: iterators +use core::iter::{Repeat, repeat}; struct S; impl S { - fn iter(&self) -> Iter { Iter } - fn iter_mut(&mut self) -> Iter { Iter } + fn iter(&self) -> Repeat { repeat(92) } + fn iter_mut(&mut self) -> Repeat { repeat(92) } } fn main() { @@ -206,18 +202,14 @@ fn main() { let a = v * 2; } } -", - r" -struct Iter; -impl Iterator for Iter { - type Item = usize; - fn next(&mut self) -> Option { None } -} +"#, + r#" +use core::iter::{Repeat, repeat}; struct S; impl S { - fn iter(&self) -> Iter { Iter } - fn iter_mut(&mut self) -> Iter { Iter } + fn iter(&self) -> Repeat { repeat(92) } + fn iter_mut(&mut self) -> Repeat { repeat(92) } } fn main() { @@ -226,7 +218,7 @@ fn main() { let a = v * 2; }); } -", +"#, ) } @@ -259,18 +251,14 @@ fn main() { fn test_for_borrowed_mut() { check_assist( replace_for_loop_with_for_each, - r" -//- minicore: iterator -struct Iter; -impl Iterator for Iter { - type Item = usize; - fn next(&mut self) -> Option { None } -} + r#" +//- minicore: iterators +use core::iter::{Repeat, repeat}; struct S; impl S { - fn iter(&self) -> Iter { Iter } - fn iter_mut(&mut self) -> Iter { Iter } + fn iter(&self) -> Repeat { repeat(92) } + fn iter_mut(&mut self) -> Repeat { repeat(92) } } fn main() { @@ -279,18 +267,14 @@ fn main() { let a = v * 2; } } -", - r" -struct Iter; -impl Iterator for Iter { - type Item = usize; - fn next(&mut self) -> Option { None } -} +"#, + r#" +use core::iter::{Repeat, repeat}; struct S; impl S { - fn iter(&self) -> Iter { Iter } - fn iter_mut(&mut self) -> Iter { Iter } + fn iter(&self) -> Repeat { repeat(92) } + fn iter_mut(&mut self) -> Repeat { repeat(92) } } fn main() { @@ -299,7 +283,7 @@ fn main() { let a = v * 2; }); } -", +"#, ) } @@ -332,28 +316,16 @@ fn main() { check_assist( replace_for_loop_with_for_each, r#" -//- minicore: iterator -struct Iter; -impl Iterator for Iter { - type Item = usize; - fn next(&mut self) -> Option { None } -} - +//- minicore: iterators fn main() { - for$0 a in Iter.take(1) { + for$0 a in core::iter::repeat(92).take(1) { println!("{}", a); } } "#, r#" -struct Iter; -impl Iterator for Iter { - type Item = usize; - fn next(&mut self) -> Option { None } -} - fn main() { - Iter.take(1).for_each(|a| { + core::iter::repeat(92).take(1).for_each(|a| { println!("{}", a); }); } diff --git a/crates/test_utils/src/minicore.rs b/crates/test_utils/src/minicore.rs index 1a0573d7a..e6d2301c7 100644 --- a/crates/test_utils/src/minicore.rs +++ b/crates/test_utils/src/minicore.rs @@ -21,6 +21,7 @@ //! option: //! result: //! iterator: option +//! iterators: iterator pub mod marker { // region:sized @@ -209,6 +210,7 @@ pub mod task { // region:iterator pub mod iter { + // region:iterators mod adapters { pub struct Take { iter: I, @@ -249,6 +251,7 @@ pub mod iter { pub use self::repeat::{repeat, Repeat}; } pub use self::sources::{repeat, Repeat}; + // endregion:iterators mod traits { mod iterator { @@ -261,15 +264,17 @@ pub mod iter { fn nth(&mut self, n: usize) -> Option { loop {} } - fn take(self, n: usize) -> crate::iter::Take { - loop {} - } fn by_ref(&mut self) -> &mut Self where Self: Sized, { self } + // region:iterators + fn take(self, n: usize) -> crate::iter::Take { + loop {} + } + // endregion:iterators } impl Iterator for &mut I { type Item = I::Item; -- cgit v1.2.3