diff options
| author | bors <bors@rust-lang.org> | 2024-07-27 04:19:09 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2024-07-27 04:19:09 +0000 |
| commit | 1b783b069cdd0e1d0d7fe60578e07bb487c623c9 (patch) | |
| tree | feae5478cd6149bd49b0e6b1e2a6188ea1e5f2d8 /src/tools | |
| parent | 13f0a021d6a011045537b0b89def4a9d06200296 (diff) | |
| parent | a15fbe6c305c7974e007f58beb299070c19ebd22 (diff) | |
| download | rust-1b783b069cdd0e1d0d7fe60578e07bb487c623c9.tar.gz rust-1b783b069cdd0e1d0d7fe60578e07bb487c623c9.zip | |
Auto merge of #17713 - alibektas:17710, r=Veykril
fix: early exit if unresolved field is an index Fixes #17710
Diffstat (limited to 'src/tools')
| -rw-r--r-- | src/tools/rust-analyzer/crates/ide-diagnostics/src/handlers/unresolved_field.rs | 48 |
1 files changed, 45 insertions, 3 deletions
diff --git a/src/tools/rust-analyzer/crates/ide-diagnostics/src/handlers/unresolved_field.rs b/src/tools/rust-analyzer/crates/ide-diagnostics/src/handlers/unresolved_field.rs index 467d4edbf26..eb8eea69f67 100644 --- a/src/tools/rust-analyzer/crates/ide-diagnostics/src/handlers/unresolved_field.rs +++ b/src/tools/rust-analyzer/crates/ide-diagnostics/src/handlers/unresolved_field.rs @@ -152,7 +152,12 @@ fn add_field_to_struct_fix( } else { Some(make::visibility_pub_crate()) }; - let field_name = make::name(field_name); + + let field_name = match field_name.chars().next() { + Some(ch) if ch.is_numeric() => return None, + Some(_) => make::name(field_name), + None => return None, + }; let (offset, record_field) = record_field_layout( visibility, @@ -178,7 +183,12 @@ fn add_field_to_struct_fix( None => { // Add a field list to the Unit Struct let mut src_change_builder = SourceChangeBuilder::new(struct_range.file_id); - let field_name = make::name(field_name); + let field_name = match field_name.chars().next() { + // FIXME : See match arm below regarding tuple structs. + Some(ch) if ch.is_numeric() => return None, + Some(_) => make::name(field_name), + None => return None, + }; let visibility = if error_range.file_id == struct_range.file_id { None } else { @@ -274,7 +284,7 @@ mod tests { use crate::{ tests::{ check_diagnostics, check_diagnostics_with_config, check_diagnostics_with_disabled, - check_fix, + check_fix, check_no_fix, }, DiagnosticsConfig, }; @@ -459,4 +469,36 @@ fn foo() { "#, ); } + + #[test] + fn no_fix_when_indexed() { + check_no_fix( + r#" + struct Kek {} +impl Kek { + pub fn foo(self) { + self.$00 + } +} + +fn main() {} + "#, + ) + } + + #[test] + fn no_fix_when_without_field() { + check_no_fix( + r#" + struct Kek {} +impl Kek { + pub fn foo(self) { + self.$0 + } +} + +fn main() {} + "#, + ) + } } |
