diff options
author | Phil Ellison <[email protected]> | 2021-01-01 21:40:11 +0000 |
---|---|---|
committer | Phil Ellison <[email protected]> | 2021-01-23 07:40:25 +0000 |
commit | 65a5ea581d547c36e98b4a3c5a99671ad5d4c117 (patch) | |
tree | 844d804814648344af7ec2a2fe1a334001eeef81 /crates/hir_ty/src/diagnostics.rs | |
parent | 7c691f51f9974572e1e56c0e368b973ed3e58365 (diff) |
Update tests to register the required standard library types
Diffstat (limited to 'crates/hir_ty/src/diagnostics.rs')
-rw-r--r-- | crates/hir_ty/src/diagnostics.rs | 48 |
1 files changed, 38 insertions, 10 deletions
diff --git a/crates/hir_ty/src/diagnostics.rs b/crates/hir_ty/src/diagnostics.rs index 6eaa1beb8..323c5f963 100644 --- a/crates/hir_ty/src/diagnostics.rs +++ b/crates/hir_ty/src/diagnostics.rs | |||
@@ -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 | #[test] | 701 | #[test] |
674 | fn replace_filter_map_next_with_find_map() { | 702 | fn replace_filter_map_next_with_find_map2() { |
675 | check_diagnostics( | 703 | check_diagnostics(&add_filter_map_with_find_next_boilerplate( |
676 | r#" | 704 | r#" |
677 | fn foo() { | 705 | fn foo() { |
678 | let m = [1, 2, 3].iter().filter_map(|x| if *x == 2 { Some (4) } else { None }).next(); | 706 | let m = [1, 2, 3].iter().filter_map(|x| if *x == 2 { Some (4) } else { None }).next(); |
679 | //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ replace filter_map(..).next() with find_map(..) | 707 | //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ replace filter_map(..).next() with find_map(..) |
680 | } | 708 | } |
681 | "#, | 709 | "#, |
682 | ); | 710 | )); |
683 | } | 711 | } |
684 | 712 | ||
685 | #[test] | 713 | #[test] |
686 | fn replace_filter_map_next_with_find_map_no_diagnostic_without_next() { | 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 | r#" | 716 | r#" |
689 | fn foo() { | 717 | fn foo() { |
690 | let m = [1, 2, 3] | 718 | let m = [1, 2, 3] |
@@ -693,12 +721,12 @@ fn foo() { break; } | |||
693 | .len(); | 721 | .len(); |
694 | } | 722 | } |
695 | "#, | 723 | "#, |
696 | ); | 724 | )); |
697 | } | 725 | } |
698 | 726 | ||
699 | #[test] | 727 | #[test] |
700 | fn replace_filter_map_next_with_find_map_no_diagnostic_with_intervening_methods() { | 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 | r#" | 730 | r#" |
703 | fn foo() { | 731 | fn foo() { |
704 | let m = [1, 2, 3] | 732 | let m = [1, 2, 3] |
@@ -708,12 +736,12 @@ fn foo() { break; } | |||
708 | .len(); | 736 | .len(); |
709 | } | 737 | } |
710 | "#, | 738 | "#, |
711 | ); | 739 | )); |
712 | } | 740 | } |
713 | 741 | ||
714 | #[test] | 742 | #[test] |
715 | fn replace_filter_map_next_with_find_map_no_diagnostic_if_not_in_chain() { | 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 | r#" | 745 | r#" |
718 | fn foo() { | 746 | fn foo() { |
719 | let m = [1, 2, 3] | 747 | let m = [1, 2, 3] |
@@ -722,6 +750,6 @@ fn foo() { break; } | |||
722 | let n = m.next(); | 750 | let n = m.next(); |
723 | } | 751 | } |
724 | "#, | 752 | "#, |
725 | ); | 753 | )); |
726 | } | 754 | } |
727 | } | 755 | } |