Unnamed repository; edit this file 'description' to name the repository.
Use `todo!()` instead of `()` for missing fields
The generated code with `()` doesn't compile in most of the cases. To signal the developer there's something to do, fill in `todo!()`. Because the file *missing_fields.rs* contains the string `todo!()` it needs an exception for the test *check_todo*.
Jörg Sommer 2021-09-09
parent 92ce768 · commit c87b860
-rw-r--r--crates/ide_diagnostics/src/handlers/missing_fields.rs20
-rw-r--r--crates/rust-analyzer/tests/slow-tests/tidy.rs2
2 files changed, 12 insertions, 10 deletions
diff --git a/crates/ide_diagnostics/src/handlers/missing_fields.rs b/crates/ide_diagnostics/src/handlers/missing_fields.rs
index f61ab1f410..03656ad925 100644
--- a/crates/ide_diagnostics/src/handlers/missing_fields.rs
+++ b/crates/ide_diagnostics/src/handlers/missing_fields.rs
@@ -69,10 +69,10 @@ fn fixes(ctx: &DiagnosticsContext<'_>, d: &hir::MissingFields) -> Option<Vec<Ass
if ty.could_unify_with(ctx.sema.db, &candidate_ty) {
None
} else {
- Some(make::expr_unit())
+ Some(make::ext::expr_todo())
}
} else {
- Some(make::expr_unit())
+ Some(make::ext::expr_todo())
};
let field =
make::record_expr_field(make::name_ref(&f.name(ctx.sema.db).to_string()), field_expr)
@@ -167,7 +167,7 @@ fn main() {
pub struct Foo { pub a: i32, pub b: i32 }
"#,
r#"
-fn some(, b: () ) {}
+fn some(, b: todo!() ) {}
fn items() {}
fn here() {}
@@ -196,7 +196,7 @@ fn test_fn() {
struct TestStruct { one: i32, two: i64 }
fn test_fn() {
- let s = TestStruct { one: (), two: () };
+ let s = TestStruct { one: todo!(), two: todo!() };
}
"#,
);
@@ -216,7 +216,7 @@ impl TestStruct {
struct TestStruct { one: i32 }
impl TestStruct {
- fn test_fn() { let s = Self { one: () }; }
+ fn test_fn() { let s = Self { one: todo!() }; }
}
"#,
);
@@ -264,7 +264,7 @@ fn test_fn() {
struct TestStruct { one: i32, two: i64 }
fn test_fn() {
- let s = TestStruct{ two: 2, one: () };
+ let s = TestStruct{ two: 2, one: todo!() };
}
",
);
@@ -284,7 +284,7 @@ fn test_fn() {
struct TestStruct { r#type: u8 }
fn test_fn() {
- TestStruct { r#type: () };
+ TestStruct { r#type: todo!() };
}
",
);
@@ -335,8 +335,8 @@ struct S { a: (), b: () }
fn f() {
S {
- a: (),
- b: (),
+ a: todo!(),
+ b: todo!(),
};
}
"#,
@@ -395,7 +395,7 @@ fn f() {
let b = 1usize;
S {
a,
- b: (),
+ b: todo!(),
};
}
"#,
diff --git a/crates/rust-analyzer/tests/slow-tests/tidy.rs b/crates/rust-analyzer/tests/slow-tests/tidy.rs
index 4e99ae67d8..26eed7ea2f 100644
--- a/crates/rust-analyzer/tests/slow-tests/tidy.rs
+++ b/crates/rust-analyzer/tests/slow-tests/tidy.rs
@@ -282,6 +282,8 @@ fn check_todo(path: &Path, text: &str) {
"ide_db/src/helpers/generated_lints.rs",
"ide_assists/src/utils/gen_trait_fn_body.rs",
"ide_assists/src/tests/generated.rs",
+ // The tests for missing fields
+ "ide_diagnostics/src/handlers/missing_fields.rs",
];
if need_todo.iter().any(|p| path.ends_with(p)) {
return;