5179: ItemTree: Lower fields despite invalid type r=jonas-schievink a=jonas-schievink

Fixes https://github.com/rust-analyzer/rust-analyzer/issues/5147

bors r+

Co-authored-by: Jonas Schievink <jonas.schievink@ferrous-systems.com>
This commit is contained in:
bors[bot] 2020-07-01 17:28:12 +00:00 committed by GitHub
commit ec1d1a1b70
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 25 additions and 1 deletions

View file

@ -211,7 +211,7 @@ impl Ctx {
fn lower_record_field(&mut self, field: &ast::RecordFieldDef) -> Option<Field> {
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)
}

View file

@ -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(