diff options
Diffstat (limited to 'crates/hir_def/src/nameres/tests')
-rw-r--r-- | crates/hir_def/src/nameres/tests/macros.rs | 51 |
1 files changed, 50 insertions, 1 deletions
diff --git a/crates/hir_def/src/nameres/tests/macros.rs b/crates/hir_def/src/nameres/tests/macros.rs index c37f915ab..6eb5f97be 100644 --- a/crates/hir_def/src/nameres/tests/macros.rs +++ b/crates/hir_def/src/nameres/tests/macros.rs | |||
@@ -686,6 +686,56 @@ pub trait Clone {} | |||
686 | } | 686 | } |
687 | 687 | ||
688 | #[test] | 688 | #[test] |
689 | fn builtin_derive_with_unresolved_attributes_fall_back() { | ||
690 | // Tests that we still resolve derives after ignoring an unresolved attribute. | ||
691 | cov_mark::check!(unresolved_attribute_fallback); | ||
692 | let map = compute_crate_def_map( | ||
693 | r#" | ||
694 | //- /main.rs crate:main deps:core | ||
695 | use core::Clone; | ||
696 | |||
697 | #[derive(Clone)] | ||
698 | #[unresolved] | ||
699 | struct Foo; | ||
700 | |||
701 | //- /core.rs crate:core | ||
702 | #[rustc_builtin_macro] | ||
703 | pub macro Clone {} | ||
704 | "#, | ||
705 | ); | ||
706 | assert_eq!(map.modules[map.root].scope.impls().len(), 1); | ||
707 | } | ||
708 | |||
709 | #[test] | ||
710 | fn unresolved_attributes_fall_back_track_per_file_moditems() { | ||
711 | // Tests that we track per-file ModItems when ignoring an unresolved attribute. | ||
712 | // Just tracking the `ModItem` leads to `Foo` getting ignored. | ||
713 | |||
714 | check( | ||
715 | r#" | ||
716 | //- /main.rs crate:main | ||
717 | |||
718 | mod submod; | ||
719 | |||
720 | #[unresolved] | ||
721 | struct Foo; | ||
722 | |||
723 | //- /submod.rs | ||
724 | #[unresolved] | ||
725 | struct Bar; | ||
726 | "#, | ||
727 | expect![[r#" | ||
728 | crate | ||
729 | Foo: t v | ||
730 | submod: t | ||
731 | |||
732 | crate::submod | ||
733 | Bar: t v | ||
734 | "#]], | ||
735 | ); | ||
736 | } | ||
737 | |||
738 | #[test] | ||
689 | fn macro_expansion_overflow() { | 739 | fn macro_expansion_overflow() { |
690 | cov_mark::check!(macro_expansion_overflow); | 740 | cov_mark::check!(macro_expansion_overflow); |
691 | check( | 741 | check( |
@@ -842,7 +892,6 @@ fn collects_derive_helpers() { | |||
842 | fn resolve_macro_def() { | 892 | fn resolve_macro_def() { |
843 | check( | 893 | check( |
844 | r#" | 894 | r#" |
845 | //- /lib.rs | ||
846 | pub macro structs($($i:ident),*) { | 895 | pub macro structs($($i:ident),*) { |
847 | $(struct $i { field: u32 } )* | 896 | $(struct $i { field: u32 } )* |
848 | } | 897 | } |