mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-11-17 18:57:04 +00:00
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:
parent
b333f85a9d
commit
b9469f52a3
2 changed files with 47 additions and 5 deletions
|
|
@ -1,7 +1,7 @@
|
|||
//! This module resolves `mod foo;` declaration to file.
|
||||
use arrayvec::ArrayVec;
|
||||
use base_db::AnchoredPath;
|
||||
use hir_expand::{name::Name, HirFileIdExt, MacroFileIdExt};
|
||||
use hir_expand::{name::Name, HirFileIdExt};
|
||||
use limit::Limit;
|
||||
use span::EditionedFileId;
|
||||
use syntax::ToSmolStr as _;
|
||||
|
|
@ -73,10 +73,6 @@ impl ModDir {
|
|||
Some(attr_path) => {
|
||||
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 => {
|
||||
candidate_files.push(format!(
|
||||
"{}{}.rs",
|
||||
|
|
|
|||
|
|
@ -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]
|
||||
fn macro_use_imports_all_macro_types() {
|
||||
let db = TestDB::with_files(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue