Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/ide-diagnostics/src/handlers/no_such_field.rs')
-rw-r--r--crates/ide-diagnostics/src/handlers/no_such_field.rs31
1 files changed, 30 insertions, 1 deletions
diff --git a/crates/ide-diagnostics/src/handlers/no_such_field.rs b/crates/ide-diagnostics/src/handlers/no_such_field.rs
index 0edab5e0b3..bcfe3a8aa5 100644
--- a/crates/ide-diagnostics/src/handlers/no_such_field.rs
+++ b/crates/ide-diagnostics/src/handlers/no_such_field.rs
@@ -102,7 +102,8 @@ fn missing_record_expr_field_fixes(
let indent = IndentLevel::from_node(last_field_syntax);
let mut new_field = new_field.to_string();
- if usage_file_id != def_file_id {
+ // FIXME: check submodule instead of FileId
+ if usage_file_id != def_file_id && !matches!(def_id, hir::VariantDef::Variant(_)) {
new_field = format!("pub(crate) {new_field}");
}
new_field = format!("\n{indent}{new_field}");
@@ -358,6 +359,34 @@ pub struct Foo {
}
#[test]
+ fn test_add_enum_variant_field_in_other_file_from_usage() {
+ check_fix(
+ r#"
+//- /main.rs
+mod foo;
+
+fn main() {
+ foo::Foo::Variant { bar: 3, $0baz: false};
+}
+//- /foo.rs
+pub enum Foo {
+ Variant {
+ bar: i32
+ }
+}
+"#,
+ r#"
+pub enum Foo {
+ Variant {
+ bar: i32,
+ baz: bool
+ }
+}
+"#,
+ )
+ }
+
+ #[test]
fn test_tuple_field_on_record_struct() {
check_no_fix(
r#"