From 604267088c9ef6afa021807b437dab22d72dfc99 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Wed, 16 Jun 2021 22:48:48 +0300 Subject: internal: add iterator to minicore --- crates/hir_ty/src/tests/regression.rs | 47 ++++++----------------------------- crates/test_utils/src/minicore.rs | 30 ++++++++++++++++++++++ 2 files changed, 38 insertions(+), 39 deletions(-) diff --git a/crates/hir_ty/src/tests/regression.rs b/crates/hir_ty/src/tests/regression.rs index 1edec1615..e0ad41fb9 100644 --- a/crates/hir_ty/src/tests/regression.rs +++ b/crates/hir_ty/src/tests/regression.rs @@ -418,48 +418,17 @@ fn issue_2705() { fn issue_2683_chars_impl() { check_types( r#" -//- /main.rs crate:main deps:std +//- minicore: iterator +pub struct Chars<'a> {} +impl<'a> Iterator for Chars<'a> { + type Item = char; + fn next(&mut self) -> Option {} +} + fn test() { - let chars: std::str::Chars<'_>; + let chars: Chars<'_>; (chars.next(), chars.nth(1)); } //^ (Option, Option) - -//- /std.rs crate:std -#[prelude_import] -use self::prelude::rust_2018::*; -pub mod prelude { - pub mod rust_2018 { - pub use crate::iter::Iterator; - pub use crate::option::Option; - } -} - -pub mod iter { - pub use self::traits::Iterator; - pub mod traits { - pub use self::iterator::Iterator; - - pub mod iterator { - pub trait Iterator { - type Item; - fn next(&mut self) -> Option; - fn nth(&mut self, n: usize) -> Option {} - } - } - } -} - -pub mod option { - pub enum Option {} -} - -pub mod str { - pub struct Chars<'a> {} - impl<'a> Iterator for Chars<'a> { - type Item = char; - fn next(&mut self) -> Option {} - } -} "#, ); } diff --git a/crates/test_utils/src/minicore.rs b/crates/test_utils/src/minicore.rs index e04ca58d2..011d460be 100644 --- a/crates/test_utils/src/minicore.rs +++ b/crates/test_utils/src/minicore.rs @@ -20,6 +20,7 @@ //! future: pin //! option: //! result: +//! iterator: option pub mod marker { // region:sized @@ -206,9 +207,38 @@ pub mod task { } // endregion:future +// region:iterator +pub mod iter { + mod traits { + mod iterator { + pub trait Iterator { + type Item; + #[lang = "next"] + fn next(&mut self) -> Option; + fn nth(&mut self, n: usize) -> Option { + loop {} + } + } + } + mod collect { + pub trait IntoIterator { + type Item; + type IntoIter: Iterator; + #[lang = "into_iter"] + fn into_iter(self) -> Self::IntoIter; + } + } + pub use self::collect::IntoIterator; + pub use self::iterator::Iterator; + } + pub use self::traits::{IntoIterator, Iterator}; +} +// endregion:iterator + pub mod prelude { pub mod v1 { pub use crate::{ + iter::{IntoIterator, Iterator}, // :iterator marker::Sized, // :sized ops::{Fn, FnMut, FnOnce}, // :fn option::Option::{self, None, Some}, // :option -- cgit v1.2.3