Fix path resolution for child mods of those expanded by include!

Child modules wouldn't use the correct candidate paths due to a branch that doesn't seem to be doing what it's intended to do. Removing the branch fixes the problem and all existing test cases pass.
This commit is contained in:
Sydney Acksman 2024-07-20 14:09:13 -05:00
parent b333f85a9d
commit b9469f52a3
2 changed files with 47 additions and 5 deletions

View file

@ -1,7 +1,7 @@
//! This module resolves `mod foo;` declaration to file. //! This module resolves `mod foo;` declaration to file.
use arrayvec::ArrayVec; use arrayvec::ArrayVec;
use base_db::AnchoredPath; use base_db::AnchoredPath;
use hir_expand::{name::Name, HirFileIdExt, MacroFileIdExt}; use hir_expand::{name::Name, HirFileIdExt};
use limit::Limit; use limit::Limit;
use span::EditionedFileId; use span::EditionedFileId;
use syntax::ToSmolStr as _; use syntax::ToSmolStr as _;
@ -73,10 +73,6 @@ impl ModDir {
Some(attr_path) => { Some(attr_path) => {
candidate_files.push(self.dir_path.join_attr(attr_path, self.root_non_dir_owner)) candidate_files.push(self.dir_path.join_attr(attr_path, self.root_non_dir_owner))
} }
None if file_id.macro_file().map_or(false, |it| it.is_include_macro(db.upcast())) => {
candidate_files.push(format!("{}.rs", name.display(db.upcast())));
candidate_files.push(format!("{}/mod.rs", name.display(db.upcast())));
}
None => { None => {
candidate_files.push(format!( candidate_files.push(format!(
"{}{}.rs", "{}{}.rs",

View file

@ -1309,6 +1309,52 @@ pub mod ip_address {
); );
} }
#[test]
fn include_with_submod_file() {
check(
r#"
//- minicore: include
//- /lib.rs
include!("out_dir/includes.rs");
//- /out_dir/includes.rs
pub mod company_name {
pub mod network {
pub mod v1;
}
}
//- /out_dir/company_name/network/v1.rs
pub struct IpAddress {
pub ip_type: &'static str,
}
/// Nested message and enum types in `IpAddress`.
pub mod ip_address {
pub enum IpType {
IpV4(u32),
}
}
"#,
expect![[r#"
crate
company_name: t
crate::company_name
network: t
crate::company_name::network
v1: t
crate::company_name::network::v1
IpAddress: t
ip_address: t
crate::company_name::network::v1::ip_address
IpType: t
"#]],
);
}
#[test] #[test]
fn macro_use_imports_all_macro_types() { fn macro_use_imports_all_macro_types() {
let db = TestDB::with_files( let db = TestDB::with_files(