mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-11-14 17:59:56 +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.
|
//! 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",
|
||||||
|
|
|
||||||
|
|
@ -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(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue