diff options
| author | bors <bors@rust-lang.org> | 2022-08-11 08:42:04 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2022-08-11 08:42:04 +0000 |
| commit | 696bee324677d1ae3cb6b9454b33301adfc1077e (patch) | |
| tree | f0b821255f9e0f0627c079726f178118a200dd07 | |
| parent | 3eb340fa4d9872634f4b36785031827ab3ebc0f2 (diff) | |
| parent | 1bb58205f0b09ccdb1a8915cfdede35bd2c09da4 (diff) | |
Auto merge of #12997 - Veykril:no-such-field, r=Veykril
fix: Fix panic in `no_such_field` when using tuple fields on record structs
| -rw-r--r-- | crates/hir/src/source_analyzer.rs | 1 | ||||
| -rw-r--r-- | crates/ide-diagnostics/src/handlers/no_such_field.rs | 18 |
2 files changed, 17 insertions, 2 deletions
diff --git a/crates/hir/src/source_analyzer.rs b/crates/hir/src/source_analyzer.rs index f5e2e443070..ae2896e1932 100644 --- a/crates/hir/src/source_analyzer.rs +++ b/crates/hir/src/source_analyzer.rs @@ -368,6 +368,7 @@ impl SourceAnalyzer { let local = if field.name_ref().is_some() { None } else { + // Shorthand syntax, resolve to the local let path = ModPath::from_segments(PathKind::Plain, once(local_name.clone())); match self.resolver.resolve_path_in_value_ns_fully(db.upcast(), &path) { Some(ValueNs::LocalBinding(pat_id)) => { diff --git a/crates/ide-diagnostics/src/handlers/no_such_field.rs b/crates/ide-diagnostics/src/handlers/no_such_field.rs index e032c578f02..a80299106bd 100644 --- a/crates/ide-diagnostics/src/handlers/no_such_field.rs +++ b/crates/ide-diagnostics/src/handlers/no_such_field.rs @@ -68,7 +68,7 @@ fn missing_record_expr_field_fixes( } let new_field = make::record_field( None, - make::name(&record_expr_field.field_name()?.text()), + make::name(&record_expr_field.field_name()?.ident_token()?.text()), make::ty(&new_field_type.display_source_code(sema.db, module.into()).ok()?), ); @@ -109,7 +109,7 @@ fn missing_record_expr_field_fixes( #[cfg(test)] mod tests { - use crate::tests::{check_diagnostics, check_fix}; + use crate::tests::{check_diagnostics, check_fix, check_no_fix}; #[test] fn no_such_field_diagnostics() { @@ -280,4 +280,18 @@ struct Foo { "#, ) } + + #[test] + fn test_tuple_field_on_record_struct() { + check_no_fix( + r#" +struct Struct {} +fn main() { + Struct { + 0$0: 0 + } +} +"#, + ) + } } |
