about summary refs log tree commit diff
path: root/tests
diff options
context:
space:
mode:
authorQuinn Sinclair <me@m-rph.dev>2024-03-31 17:53:13 +0200
committerQuinn Sinclair <me@m-rph.dev>2024-04-01 13:40:36 +0200
commiteee4db928fa745fba934e008be01765c22abb4de (patch)
tree4283737a9db02788180ac2a293896e9b90582853 /tests
parent124e68bef8be61aa151ff33bea325c832728146f (diff)
downloadrust-eee4db928fa745fba934e008be01765c22abb4de.tar.gz
rust-eee4db928fa745fba934e008be01765c22abb4de.zip
Replace elided variable in `let_unit` with `()` when used
Situation: `let_unit` lints when an expression binds a unit (`()`)
to a variable. In some cases this binding may be passed down to
another function. Currently, the lint removes the binding without
considering usage.

Change: All usages of the elided variable are now replaced with `()`.

fixes: #12594
Diffstat (limited to 'tests')
-rw-r--r--tests/ui/let_unit.fixed18
-rw-r--r--tests/ui/let_unit.rs18
-rw-r--r--tests/ui/let_unit.stderr21
3 files changed, 56 insertions, 1 deletions
diff --git a/tests/ui/let_unit.fixed b/tests/ui/let_unit.fixed
index 4d41b5e5e50..20940daffa7 100644
--- a/tests/ui/let_unit.fixed
+++ b/tests/ui/let_unit.fixed
@@ -177,3 +177,21 @@ async fn issue10433() {
 }
 
 pub async fn issue11502(a: ()) {}
+
+pub fn issue12594() {
+    fn returns_unit() {}
+
+    fn returns_result<T>(res: T) -> Result<T, ()> {
+        Ok(res)
+    }
+
+    fn actual_test() {
+        // create first a unit value'd value
+        returns_unit();
+        returns_result(()).unwrap();
+        returns_result(()).unwrap();
+        // make sure we replace only the first variable
+        let res = 1;
+        returns_result(res).unwrap();
+    }
+}
diff --git a/tests/ui/let_unit.rs b/tests/ui/let_unit.rs
index daa660be25e..dca66f2e3ed 100644
--- a/tests/ui/let_unit.rs
+++ b/tests/ui/let_unit.rs
@@ -177,3 +177,21 @@ async fn issue10433() {
 }
 
 pub async fn issue11502(a: ()) {}
+
+pub fn issue12594() {
+    fn returns_unit() {}
+
+    fn returns_result<T>(res: T) -> Result<T, ()> {
+        Ok(res)
+    }
+
+    fn actual_test() {
+        // create first a unit value'd value
+        let res = returns_unit();
+        returns_result(res).unwrap();
+        returns_result(res).unwrap();
+        // make sure we replace only the first variable
+        let res = 1;
+        returns_result(res).unwrap();
+    }
+}
diff --git a/tests/ui/let_unit.stderr b/tests/ui/let_unit.stderr
index 0f1f3d78223..aafb77bcd0d 100644
--- a/tests/ui/let_unit.stderr
+++ b/tests/ui/let_unit.stderr
@@ -51,5 +51,24 @@ LL +         Some(_) => (),
 LL +     };
    |
 
-error: aborting due to 3 previous errors
+error: this let-binding has unit value
+  --> tests/ui/let_unit.rs:190:9
+   |
+LL |         let res = returns_unit();
+   |         ^^^^^^^^^^^^^^^^^^^^^^^^^
+   |
+help: omit the `let` binding
+   |
+LL |         returns_unit();
+   |
+help: variable `res` of type `()` can be replaced with explicit `()`
+   |
+LL |         returns_result(()).unwrap();
+   |                        ~~
+help: variable `res` of type `()` can be replaced with explicit `()`
+   |
+LL |         returns_result(()).unwrap();
+   |                        ~~
+
+error: aborting due to 4 previous errors