mirror of
https://github.com/rust-lang/rust-analyzer
synced 2025-01-23 10:25:06 +00:00
94 lines
1.5 KiB
Rust
94 lines
1.5 KiB
Rust
use super::*;
|
|
|
|
#[test]
|
|
fn macro_rules_are_globally_visible() {
|
|
let map = def_map(
|
|
"
|
|
//- /lib.rs
|
|
macro_rules! structs {
|
|
($($i:ident),*) => {
|
|
$(struct $i { field: u32 } )*
|
|
}
|
|
}
|
|
structs!(Foo);
|
|
mod nested;
|
|
|
|
//- /nested.rs
|
|
structs!(Bar, Baz);
|
|
",
|
|
);
|
|
assert_snapshot_matches!(map, @r###"
|
|
crate
|
|
nested: t
|
|
Foo: t v
|
|
|
|
crate::nested
|
|
Bar: t v
|
|
Baz: t v
|
|
"###);
|
|
}
|
|
|
|
#[test]
|
|
fn macro_rules_can_define_modules() {
|
|
let map = def_map(
|
|
"
|
|
//- /lib.rs
|
|
macro_rules! m {
|
|
($name:ident) => { mod $name; }
|
|
}
|
|
m!(n1);
|
|
|
|
//- /n1.rs
|
|
m!(n2)
|
|
//- /n1/n2.rs
|
|
struct X;
|
|
",
|
|
);
|
|
assert_snapshot_matches!(map, @r###"
|
|
crate
|
|
n1: t
|
|
|
|
crate::n1
|
|
n2: t
|
|
|
|
crate::n1::n2
|
|
X: t v
|
|
"###);
|
|
}
|
|
|
|
#[test]
|
|
fn macro_rules_from_other_crates_are_visible() {
|
|
let map = def_map_with_crate_graph(
|
|
"
|
|
//- /main.rs
|
|
foo::structs!(Foo, Bar)
|
|
mod bar;
|
|
|
|
//- /bar.rs
|
|
use crate::*;
|
|
|
|
//- /lib.rs
|
|
#[macro_export]
|
|
macro_rules! structs {
|
|
($($i:ident),*) => {
|
|
$(struct $i { field: u32 } )*
|
|
}
|
|
}
|
|
",
|
|
crate_graph! {
|
|
"main": ("/main.rs", ["foo"]),
|
|
"foo": ("/lib.rs", []),
|
|
},
|
|
);
|
|
assert_snapshot_matches!(map, @r###"
|
|
crate
|
|
bar: t
|
|
Foo: t v
|
|
Bar: t v
|
|
|
|
crate::bar
|
|
bar: t
|
|
Foo: t v
|
|
Bar: t v
|
|
"###);
|
|
}
|