diff options
| -rw-r--r-- | src/tools/rust-analyzer/crates/ide-diagnostics/src/handlers/unresolved_field.rs | 19 |
1 files changed, 18 insertions, 1 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 656bedff1a8..4accd181ca4 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 @@ -90,7 +90,9 @@ fn field_fix(ctx: &DiagnosticsContext<'_>, d: &hir::UnresolvedField) -> Option<A make::ty("()") }; - if !is_editable_crate(target_module.krate(), ctx.sema.db) { + if !is_editable_crate(target_module.krate(), ctx.sema.db) + || SyntaxKind::from_keyword(field_name, ctx.edition).is_some() + { return None; } @@ -501,4 +503,19 @@ fn main() {} "#, ) } + + #[test] + fn regression_18683() { + check_diagnostics( + r#" +struct S; +impl S { + fn f(self) { + self.self + // ^^^^ error: no field `self` on type `S` + } +} + "#, + ); + } } |
