@@ -670,21 +670,49 @@ fn foo() { break; }
670
670
) ;
671
671
}
672
672
673
+ // Register the required standard library types to make the tests work
674
+ fn add_filter_map_with_find_next_boilerplate ( body : & str ) -> String {
675
+ let prefix = r#"
676
+ //- /main.rs crate:main deps:core
677
+ use core::iter::Iterator;
678
+ use core::option::Option::{self, Some, None};
679
+ "# ;
680
+ let suffix = r#"
681
+ //- /core/lib.rs crate:core
682
+ pub mod option {
683
+ pub enum Option<T> { Some(T), None }
684
+ }
685
+ pub mod iter {
686
+ pub trait Iterator {
687
+ type Item;
688
+ fn filter_map<B, F>(self, f: F) -> FilterMap where F: FnMut(Self::Item) -> Option<B> { FilterMap }
689
+ fn next(&mut self) -> Option<Self::Item>;
690
+ }
691
+ pub struct FilterMap {}
692
+ impl Iterator for FilterMap {
693
+ type Item = i32;
694
+ fn next(&mut self) -> i32 { 7 }
695
+ }
696
+ }
697
+ "# ;
698
+ format ! ( "{}{}{}" , prefix, body, suffix)
699
+ }
700
+
673
701
#[ test]
674
- fn replace_filter_map_next_with_find_map ( ) {
675
- check_diagnostics (
702
+ fn replace_filter_map_next_with_find_map2 ( ) {
703
+ check_diagnostics ( & add_filter_map_with_find_next_boilerplate (
676
704
r#"
677
705
fn foo() {
678
706
let m = [1, 2, 3].iter().filter_map(|x| if *x == 2 { Some (4) } else { None }).next();
679
707
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ replace filter_map(..).next() with find_map(..)
680
708
}
681
- "# ,
682
- ) ;
709
+ "# ,
710
+ ) ) ;
683
711
}
684
712
685
713
#[ test]
686
714
fn replace_filter_map_next_with_find_map_no_diagnostic_without_next ( ) {
687
- check_diagnostics (
715
+ check_diagnostics ( & add_filter_map_with_find_next_boilerplate (
688
716
r#"
689
717
fn foo() {
690
718
let m = [1, 2, 3]
@@ -693,12 +721,12 @@ fn foo() { break; }
693
721
.len();
694
722
}
695
723
"# ,
696
- ) ;
724
+ ) ) ;
697
725
}
698
726
699
727
#[ test]
700
728
fn replace_filter_map_next_with_find_map_no_diagnostic_with_intervening_methods ( ) {
701
- check_diagnostics (
729
+ check_diagnostics ( & add_filter_map_with_find_next_boilerplate (
702
730
r#"
703
731
fn foo() {
704
732
let m = [1, 2, 3]
@@ -708,12 +736,12 @@ fn foo() { break; }
708
736
.len();
709
737
}
710
738
"# ,
711
- ) ;
739
+ ) ) ;
712
740
}
713
741
714
742
#[ test]
715
743
fn replace_filter_map_next_with_find_map_no_diagnostic_if_not_in_chain ( ) {
716
- check_diagnostics (
744
+ check_diagnostics ( & add_filter_map_with_find_next_boilerplate (
717
745
r#"
718
746
fn foo() {
719
747
let m = [1, 2, 3]
@@ -722,6 +750,6 @@ fn foo() { break; }
722
750
let n = m.next();
723
751
}
724
752
"# ,
725
- ) ;
753
+ ) ) ;
726
754
}
727
755
}
0 commit comments