Unnamed repository; edit this file 'description' to name the repository.
-rw-r--r--crates/hir-def/src/nameres/mod_resolution.rs6
-rw-r--r--crates/hir-def/src/nameres/tests/macros.rs46
2 files changed, 47 insertions, 5 deletions
diff --git a/crates/hir-def/src/nameres/mod_resolution.rs b/crates/hir-def/src/nameres/mod_resolution.rs
index 19fdd8e33d..ab4ffbb2c1 100644
--- a/crates/hir-def/src/nameres/mod_resolution.rs
+++ b/crates/hir-def/src/nameres/mod_resolution.rs
@@ -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",
diff --git a/crates/hir-def/src/nameres/tests/macros.rs b/crates/hir-def/src/nameres/tests/macros.rs
index d278b75e81..9f67d6fa8b 100644
--- a/crates/hir-def/src/nameres/tests/macros.rs
+++ b/crates/hir-def/src/nameres/tests/macros.rs
@@ -1310,6 +1310,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(
r#"