diff --git a/crates/hir_def/src/attr.rs b/crates/hir_def/src/attr.rs index 6513daec87d..fe4c3fa28e4 100644 --- a/crates/hir_def/src/attr.rs +++ b/crates/hir_def/src/attr.rs @@ -200,7 +200,15 @@ impl Attrs { let mod_data = &def_map[module.local_id]; match mod_data.declaration_source(db) { Some(it) => { - RawAttrs::from_attrs_owner(db, it.as_ref().map(|it| it as &dyn AttrsOwner)) + let raw_attrs = RawAttrs::from_attrs_owner( + db, + it.as_ref().map(|it| it as &dyn AttrsOwner), + ); + match mod_data.definition_source(db) { + InFile { file_id, value: ModuleSource::SourceFile(file) } => raw_attrs + .merge(RawAttrs::from_attrs_owner(db, InFile::new(file_id, &file))), + _ => raw_attrs, + } } None => RawAttrs::from_attrs_owner( db, diff --git a/crates/ide/src/hover.rs b/crates/ide/src/hover.rs index d47a4cb0f1b..5d2d072b1d7 100644 --- a/crates/ide/src/hover.rs +++ b/crates/ide/src/hover.rs @@ -3444,4 +3444,20 @@ impl Foo {} "#]], ); } + + #[test] + fn hover_mod_def() { + check( + r#" +//- /main.rs +mod foo$0; +//- /foo.rs +//! For the horde! +"#, + expect![[r#" + *foo* + For the horde! + "#]], + ); + } }