aboutsummaryrefslogtreecommitdiff
path: root/crates/hir_def/src/nameres/tests
diff options
context:
space:
mode:
Diffstat (limited to 'crates/hir_def/src/nameres/tests')
-rw-r--r--crates/hir_def/src/nameres/tests/macros.rs51
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]
689fn 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]
710fn 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]
689fn macro_expansion_overflow() { 739fn 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() {
842fn resolve_macro_def() { 892fn resolve_macro_def() {
843 check( 893 check(
844 r#" 894 r#"
845//- /lib.rs
846pub macro structs($($i:ident),*) { 895pub macro structs($($i:ident),*) {
847 $(struct $i { field: u32 } )* 896 $(struct $i { field: u32 } )*
848} 897}