Merge #8108
8108: Fix handling of `#![cfg]` in outline module file r=jonas-schievink a=jonas-schievink bors r+ Co-authored-by: Jonas Schievink <jonasschievink@gmail.com>
This commit is contained in:
commit
2813afd059
@ -1294,29 +1294,37 @@ fn collect_module(&mut self, module: &Mod, attrs: &Attrs) {
|
|||||||
let db = self.def_collector.db;
|
let db = self.def_collector.db;
|
||||||
match self.mod_dir.resolve_declaration(db, self.file_id, &module.name, path_attr) {
|
match self.mod_dir.resolve_declaration(db, self.file_id, &module.name, path_attr) {
|
||||||
Ok((file_id, is_mod_rs, mod_dir)) => {
|
Ok((file_id, is_mod_rs, mod_dir)) => {
|
||||||
let module_id = self.push_child_module(
|
|
||||||
module.name.clone(),
|
|
||||||
ast_id,
|
|
||||||
Some((file_id, is_mod_rs)),
|
|
||||||
&self.item_tree[module.visibility],
|
|
||||||
);
|
|
||||||
let item_tree = db.file_item_tree(file_id.into());
|
let item_tree = db.file_item_tree(file_id.into());
|
||||||
ModCollector {
|
if item_tree
|
||||||
def_collector: &mut *self.def_collector,
|
.top_level_attrs(db, self.def_collector.def_map.krate)
|
||||||
macro_depth: self.macro_depth,
|
.cfg()
|
||||||
module_id,
|
.map_or(true, |cfg| {
|
||||||
file_id: file_id.into(),
|
self.def_collector.cfg_options.check(&cfg) != Some(false)
|
||||||
item_tree: &item_tree,
|
})
|
||||||
mod_dir,
|
|
||||||
}
|
|
||||||
.collect(item_tree.top_level_items());
|
|
||||||
if is_macro_use
|
|
||||||
|| item_tree
|
|
||||||
.top_level_attrs(db, self.def_collector.def_map.krate)
|
|
||||||
.by_key("macro_use")
|
|
||||||
.exists()
|
|
||||||
{
|
{
|
||||||
self.import_all_legacy_macros(module_id);
|
let module_id = self.push_child_module(
|
||||||
|
module.name.clone(),
|
||||||
|
ast_id,
|
||||||
|
Some((file_id, is_mod_rs)),
|
||||||
|
&self.item_tree[module.visibility],
|
||||||
|
);
|
||||||
|
ModCollector {
|
||||||
|
def_collector: &mut *self.def_collector,
|
||||||
|
macro_depth: self.macro_depth,
|
||||||
|
module_id,
|
||||||
|
file_id: file_id.into(),
|
||||||
|
item_tree: &item_tree,
|
||||||
|
mod_dir,
|
||||||
|
}
|
||||||
|
.collect(item_tree.top_level_items());
|
||||||
|
if is_macro_use
|
||||||
|
|| item_tree
|
||||||
|
.top_level_attrs(db, self.def_collector.def_map.krate)
|
||||||
|
.by_key("macro_use")
|
||||||
|
.exists()
|
||||||
|
{
|
||||||
|
self.import_all_legacy_macros(module_id);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Err(candidate) => {
|
Err(candidate) => {
|
||||||
|
@ -819,3 +819,22 @@ pub mod hash { pub trait Hash {} }
|
|||||||
"#]],
|
"#]],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn cfg_in_module_file() {
|
||||||
|
// Inner `#![cfg]` in a module file makes the whole module disappear.
|
||||||
|
check(
|
||||||
|
r#"
|
||||||
|
//- /main.rs
|
||||||
|
mod module;
|
||||||
|
|
||||||
|
//- /module.rs
|
||||||
|
#![cfg(NEVER)]
|
||||||
|
|
||||||
|
struct AlsoShoulntAppear;
|
||||||
|
"#,
|
||||||
|
expect![[r#"
|
||||||
|
crate
|
||||||
|
"#]],
|
||||||
|
)
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user