@@ -2,7 +2,10 @@ use hir::{db::ExpandDatabase, diagnostics::RemoveUnnecessaryElse, HirFileIdExt};
2
2
use ide_db:: { assists:: Assist , source_change:: SourceChange } ;
3
3
use itertools:: Itertools ;
4
4
use syntax:: {
5
- ast:: { self , edit:: IndentLevel } ,
5
+ ast:: {
6
+ self ,
7
+ edit:: { AstNodeEdit , IndentLevel } ,
8
+ } ,
6
9
AstNode , SyntaxToken , TextRange ,
7
10
} ;
8
11
use text_edit:: TextEdit ;
@@ -41,12 +44,15 @@ fn fixes(ctx: &DiagnosticsContext<'_>, d: &RemoveUnnecessaryElse) -> Option<Vec<
41
44
indent = indent + 1 ;
42
45
}
43
46
let else_replacement = match if_expr. else_branch ( ) ? {
44
- ast:: ElseBranch :: Block ( ref block) => block
47
+ ast:: ElseBranch :: Block ( block) => block
45
48
. statements ( )
46
49
. map ( |stmt| format ! ( "\n {indent}{stmt}" ) )
47
50
. chain ( block. tail_expr ( ) . map ( |tail| format ! ( "\n {indent}{tail}" ) ) )
48
51
. join ( "" ) ,
49
- ast:: ElseBranch :: IfExpr ( ref nested_if_expr) => {
52
+ ast:: ElseBranch :: IfExpr ( mut nested_if_expr) => {
53
+ if has_parent_if_expr {
54
+ nested_if_expr = nested_if_expr. indent ( IndentLevel ( 1 ) )
55
+ }
50
56
format ! ( "\n {indent}{nested_if_expr}" )
51
57
}
52
58
} ;
@@ -251,6 +257,41 @@ fn test() {
251
257
) ;
252
258
}
253
259
260
+ #[ test]
261
+ fn remove_unnecessary_else_for_return_in_child_if_expr2 ( ) {
262
+ check_fix (
263
+ r#"
264
+ fn test() {
265
+ if foo {
266
+ do_something();
267
+ } else if qux {
268
+ return bar;
269
+ } else$0 if quux {
270
+ do_something_else();
271
+ } else {
272
+ do_something_else2();
273
+ }
274
+ }
275
+ "# ,
276
+ r#"
277
+ fn test() {
278
+ if foo {
279
+ do_something();
280
+ } else {
281
+ if qux {
282
+ return bar;
283
+ }
284
+ if quux {
285
+ do_something_else();
286
+ } else {
287
+ do_something_else2();
288
+ }
289
+ }
290
+ }
291
+ "# ,
292
+ ) ;
293
+ }
294
+
254
295
#[ test]
255
296
fn remove_unnecessary_else_for_break ( ) {
256
297
check_diagnostics (
0 commit comments