diff --git a/crates/ra_hir_def/src/item_tree/lower.rs b/crates/ra_hir_def/src/item_tree/lower.rs index 5149dd141f..06743d7fce 100644 --- a/crates/ra_hir_def/src/item_tree/lower.rs +++ b/crates/ra_hir_def/src/item_tree/lower.rs @@ -211,7 +211,7 @@ impl Ctx { fn lower_record_field(&mut self, field: &ast::RecordFieldDef) -> Option { let name = field.name()?.as_name(); let visibility = self.lower_visibility(field); - let type_ref = self.lower_type_ref(&field.ascribed_type()?); + let type_ref = self.lower_type_ref_opt(field.ascribed_type()); let res = Field { name, type_ref, visibility }; Some(res) } diff --git a/crates/ra_hir_ty/src/tests.rs b/crates/ra_hir_ty/src/tests.rs index 9084c3bed2..eeac34d140 100644 --- a/crates/ra_hir_ty/src/tests.rs +++ b/crates/ra_hir_ty/src/tests.rs @@ -507,6 +507,30 @@ fn no_such_field_with_feature_flag_diagnostics_on_struct_fields() { assert_snapshot!(diagnostics, @r###""###); } +#[test] +fn no_such_field_with_type_macro() { + let diagnostics = TestDB::with_files( + r" + macro_rules! Type { + () => { u32 }; + } + + struct Foo { + bar: Type![], + } + impl Foo { + fn new() -> Self { + Foo { bar: 0 } + } + } + ", + ) + .diagnostics() + .0; + + assert_snapshot!(diagnostics, @r###""###); +} + #[test] fn missing_record_pat_field_diagnostic() { let diagnostics = TestDB::with_files(