Skip to content

Commit

Permalink
Auto merge of rust-lang#12997 - Veykril:no-such-field, r=Veykril
Browse files Browse the repository at this point in the history
fix: Fix panic in `no_such_field` when using tuple fields on record structs
  • Loading branch information
bors committed Aug 11, 2022
2 parents 3eb340f + 1bb5820 commit 696bee3
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 2 deletions.
1 change: 1 addition & 0 deletions crates/hir/src/source_analyzer.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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)) => {
Expand Down
18 changes: 16 additions & 2 deletions crates/ide-diagnostics/src/handlers/no_such_field.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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()?),
);

Expand Down Expand Up @@ -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() {
Expand Down Expand Up @@ -277,6 +277,20 @@ struct Foo {
bar: i32,
pub(crate) baz: bool
}
"#,
)
}

#[test]
fn test_tuple_field_on_record_struct() {
check_no_fix(
r#"
struct Struct {}
fn main() {
Struct {
0$0: 0
}
}
"#,
)
}
Expand Down

0 comments on commit 696bee3

Please sign in to comment.