File tree 1 file changed +136
-1
lines changed
crates/ide-assists/src/handlers
1 file changed +136
-1
lines changed Original file line number Diff line number Diff line change @@ -129,17 +129,23 @@ pub(crate) fn generate_new(acc: &mut Assists, ctx: &AssistContext<'_>) -> Option
129
129
130
130
// Get the mutable version of the impl to modify
131
131
let impl_def = if let Some ( impl_def) = impl_def {
132
+ fn_. indent ( impl_def. indent_level ( ) ) ;
132
133
builder. make_mut ( impl_def)
133
134
} else {
134
135
// Generate a new impl to add the method to
135
136
let impl_def = generate_impl ( & ast:: Adt :: Struct ( strukt. clone ( ) ) ) ;
137
+ let indent_level = strukt. indent_level ( ) ;
138
+ fn_. indent ( indent_level) ;
136
139
137
140
// Insert it after the adt
138
141
let strukt = builder. make_mut ( strukt. clone ( ) ) ;
139
142
140
143
ted:: insert_all_raw (
141
144
ted:: Position :: after ( strukt. syntax ( ) ) ,
142
- vec ! [ make:: tokens:: blank_line( ) . into( ) , impl_def. syntax( ) . clone( ) . into( ) ] ,
145
+ vec ! [
146
+ make:: tokens:: whitespace( & format!( "\n \n {indent_level}" ) ) . into( ) ,
147
+ impl_def. syntax( ) . clone( ) . into( ) ,
148
+ ] ,
143
149
) ;
144
150
145
151
impl_def
@@ -425,6 +431,135 @@ impl Foo {
425
431
) ;
426
432
}
427
433
434
+ #[ test]
435
+ fn non_zero_indent ( ) {
436
+ check_assist (
437
+ generate_new,
438
+ r#"
439
+ mod foo {
440
+ struct $0Foo {}
441
+ }
442
+ "# ,
443
+ r#"
444
+ mod foo {
445
+ struct Foo {}
446
+
447
+ impl Foo {
448
+ fn $0new() -> Self {
449
+ Self { }
450
+ }
451
+ }
452
+ }
453
+ "# ,
454
+ ) ;
455
+ check_assist (
456
+ generate_new,
457
+ r#"
458
+ mod foo {
459
+ mod bar {
460
+ struct $0Foo {}
461
+ }
462
+ }
463
+ "# ,
464
+ r#"
465
+ mod foo {
466
+ mod bar {
467
+ struct Foo {}
468
+
469
+ impl Foo {
470
+ fn $0new() -> Self {
471
+ Self { }
472
+ }
473
+ }
474
+ }
475
+ }
476
+ "# ,
477
+ ) ;
478
+ check_assist (
479
+ generate_new,
480
+ r#"
481
+ mod foo {
482
+ struct $0Foo {}
483
+
484
+ impl Foo {
485
+ fn some() {}
486
+ }
487
+ }
488
+ "# ,
489
+ r#"
490
+ mod foo {
491
+ struct Foo {}
492
+
493
+ impl Foo {
494
+ fn $0new() -> Self {
495
+ Self { }
496
+ }
497
+
498
+ fn some() {}
499
+ }
500
+ }
501
+ "# ,
502
+ ) ;
503
+ check_assist (
504
+ generate_new,
505
+ r#"
506
+ mod foo {
507
+ mod bar {
508
+ struct $0Foo {}
509
+
510
+ impl Foo {
511
+ fn some() {}
512
+ }
513
+ }
514
+ }
515
+ "# ,
516
+ r#"
517
+ mod foo {
518
+ mod bar {
519
+ struct Foo {}
520
+
521
+ impl Foo {
522
+ fn $0new() -> Self {
523
+ Self { }
524
+ }
525
+
526
+ fn some() {}
527
+ }
528
+ }
529
+ }
530
+ "# ,
531
+ ) ;
532
+ check_assist (
533
+ generate_new,
534
+ r#"
535
+ mod foo {
536
+ mod bar {
537
+ struct $0Foo {}
538
+
539
+ impl Foo {
540
+ fn some() {}
541
+ }
542
+ }
543
+ }
544
+ "# ,
545
+ r#"
546
+ mod foo {
547
+ mod bar {
548
+ struct Foo {}
549
+
550
+ impl Foo {
551
+ fn $0new() -> Self {
552
+ Self { }
553
+ }
554
+
555
+ fn some() {}
556
+ }
557
+ }
558
+ }
559
+ "# ,
560
+ ) ;
561
+ }
562
+
428
563
#[ test]
429
564
fn check_visibility_of_new_fn_based_on_struct ( ) {
430
565
check_assist (
You can’t perform that action at this time.
0 commit comments