mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-27 13:33:31 +00:00
Fix panic in no_such_field when using tuple fields on record structs
This commit is contained in:
parent
e1e93c4438
commit
1bb58205f0
2 changed files with 17 additions and 2 deletions
|
@ -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)) => {
|
||||
|
|
|
@ -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() {
|
||||
|
@ -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
|
||||
}
|
||||
}
|
||||
"#,
|
||||
)
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue