Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 0 additions & 13 deletions crates/hir-def/src/nameres/collector.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1877,26 +1877,13 @@ impl ModCollector<'_, '_> {
}

fn collect(&mut self, items: &[ModItemId], container: ItemContainerId) {
let krate = self.def_collector.def_map.krate;
let is_crate_root = self.module_id == self.def_collector.def_map.root
&& self.def_collector.def_map.block.is_none();

// Note: don't assert that inserted value is fresh: it's simply not true
// for macros.
self.def_collector.mod_dirs.insert(self.module_id, self.mod_dir.clone());

// Prelude module is always considered to be `#[macro_use]`.
if let Some((prelude_module, _use)) = self.def_collector.def_map.prelude {
// Don't insert macros from the prelude into blocks, as they can be shadowed by other macros.
if is_crate_root && prelude_module.krate(self.def_collector.db) != krate {
cov_mark::hit!(prelude_is_macro_use);
self.def_collector.import_macros_from_extern_crate(
prelude_module.krate(self.def_collector.db),
None,
None,
);
}
}
let db = self.def_collector.db;
let module_id = self.module_id;
let consider_deferred_derives =
Expand Down
36 changes: 6 additions & 30 deletions crates/hir-def/src/nameres/tests/macros.rs
Original file line number Diff line number Diff line change
Expand Up @@ -339,36 +339,19 @@ macro_rules! baz3 { () => { struct OkBaz3; } }
}

#[test]
fn prelude_is_macro_use() {
cov_mark::check!(prelude_is_macro_use);
fn prelude_is_not_macro_use() {
check(
r#"
//- /main.rs edition:2018 crate:main deps:std
structs!(Foo);
structs_priv!(Bar);
structs_outside!(Out);
crate::structs!(MacroNotResolved2);

mod bar;

//- /bar.rs
structs!(Baz);
crate::structs!(MacroNotResolved3);
structs_outside!(MacroNotResolved);

//- /lib.rs crate:std
pub mod prelude {
pub mod rust_2018 {
#[macro_export]
macro_rules! structs {
pub macro structs {
($i:ident) => { struct $i; }
}

mod priv_mod {
#[macro_export]
macro_rules! structs_priv {
($i:ident) => { struct $i; }
}
}
}
}

Expand All @@ -379,13 +362,7 @@ macro_rules! structs_outside {
"#,
expect![[r#"
crate
- Bar : type value
- Foo : type value
- Out : type value
- bar : type

crate::bar
- Baz : type value
"#]],
);
}
Expand Down Expand Up @@ -743,12 +720,11 @@ foo!();
pub use core::foo;

pub mod prelude {
pub mod rust_2018 {}
pub mod rust_2018 {
pub use crate::foo;
}
}

#[macro_use]
mod std_macros;

//- /core.rs crate:core
#[macro_export]
macro_rules! foo {
Expand Down
11 changes: 11 additions & 0 deletions crates/test-utils/src/minicore.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2515,6 +2515,7 @@ macro_rules! matches {

pub mod prelude {
pub mod v1 {
#[rustfmt::skip]
pub use crate::{
clone::Clone, // :clone
cmp::{Eq, PartialEq}, // :eq
Expand All @@ -2541,6 +2542,16 @@ pub mod prelude {
panic, // :panic
result::Result::{self, Err, Ok}, // :result
str::FromStr, // :str
write, writeln, // :write
assert, // :assert
format_args, format_args_nl, const_format_args, print, // :fmt
todo, // :todo
unimplemented, // :unimplemented
include, // :include
include_bytes, // :include_bytes
concat, // :concat
env, option_env, // :env
matches, // :matches
};
}

Expand Down
Loading