@@ -130,6 +130,7 @@ fn add_missing_ok_or_some(
130
130
if d. actual . is_unit ( ) {
131
131
if let Expr :: BlockExpr ( block) = & expr {
132
132
if block. tail_expr ( ) . is_none ( ) {
133
+ // Fix for forms like `fn foo() -> Result<(), String> {}`
133
134
let mut builder = TextEdit :: builder ( ) ;
134
135
let block_indent = block. indent_level ( ) ;
135
136
@@ -156,6 +157,20 @@ fn add_missing_ok_or_some(
156
157
acc. push ( fix ( "insert_wrapped_unit" , & name, source_change, expr_range) ) ;
157
158
}
158
159
return Some ( ( ) ) ;
160
+ } else if let Expr :: ReturnExpr ( ret_expr) = & expr {
161
+ // Fix for forms like `fn foo() -> Result<(), String> { return; }`
162
+ if ret_expr. expr ( ) . is_none ( ) {
163
+ let mut builder = TextEdit :: builder ( ) ;
164
+ builder
165
+ . insert ( ret_expr. syntax ( ) . text_range ( ) . end ( ) , format ! ( " {variant_name}(())" ) ) ;
166
+ let source_change = SourceChange :: from_text_edit (
167
+ expr_ptr. file_id . original_file ( ctx. sema . db ) ,
168
+ builder. finish ( ) ,
169
+ ) ;
170
+ let name = format ! ( "Insert {variant_name}(()) as the return value" ) ;
171
+ acc. push ( fix ( "insert_wrapped_unit" , & name, source_change, expr_range) ) ;
172
+ }
173
+ return Some ( ( ) ) ;
159
174
}
160
175
}
161
176
@@ -603,6 +618,29 @@ fn foo() -> Result<(), ()> {
603
618
) ;
604
619
}
605
620
621
+ #[ test]
622
+ fn test_wrapped_unit_as_return_expr ( ) {
623
+ check_fix (
624
+ r#"
625
+ //- minicore: result
626
+ fn foo(b: bool) -> Result<(), String> {
627
+ if b {
628
+ return$0;
629
+ }
630
+
631
+ Err("oh dear".to_owned())
632
+ }"# ,
633
+ r#"
634
+ fn foo(b: bool) -> Result<(), String> {
635
+ if b {
636
+ return Ok(());
637
+ }
638
+
639
+ Err("oh dear".to_owned())
640
+ }"# ,
641
+ ) ;
642
+ }
643
+
606
644
#[ test]
607
645
fn test_in_const_and_static ( ) {
608
646
check_fix (
0 commit comments