File tree 3 files changed +62
-2
lines changed
3 files changed +62
-2
lines changed Original file line number Diff line number Diff line change @@ -503,6 +503,35 @@ fn trait_method() {
503
503
) ;
504
504
}
505
505
506
+ #[ test]
507
+ fn trait_method_inside_block ( ) {
508
+ check_number (
509
+ r#"
510
+ trait Twait {
511
+ fn a(&self) -> i32;
512
+ }
513
+
514
+ fn outer() -> impl Twait {
515
+ struct Stwuct;
516
+
517
+ impl Twait for Stwuct {
518
+ fn a(&self) -> i32 {
519
+ 5
520
+ }
521
+ }
522
+ fn f() -> impl Twait {
523
+ let s = Stwuct;
524
+ s
525
+ }
526
+ f()
527
+ }
528
+
529
+ const GOAL: i32 = outer().a();
530
+ "# ,
531
+ 5 ,
532
+ ) ;
533
+ }
534
+
506
535
#[ test]
507
536
fn generic_fn ( ) {
508
537
check_number (
Original file line number Diff line number Diff line change @@ -729,8 +729,16 @@ fn lookup_impl_assoc_item_for_trait_ref(
729
729
let self_ty = trait_ref. self_type_parameter ( Interner ) ;
730
730
let self_ty_fp = TyFingerprint :: for_trait_impl ( & self_ty) ?;
731
731
let impls = db. trait_impls_in_deps ( env. krate ) ;
732
- let impls =
733
- impls. iter ( ) . flat_map ( |impls| impls. for_trait_and_self_ty ( hir_trait_id, self_ty_fp) ) ;
732
+ let self_impls = match self_ty. kind ( Interner ) {
733
+ TyKind :: Adt ( id, _) => {
734
+ id. 0 . module ( db. upcast ( ) ) . containing_block ( ) . map ( |x| db. trait_impls_in_block ( x) )
735
+ }
736
+ _ => None ,
737
+ } ;
738
+ let impls = impls
739
+ . iter ( )
740
+ . chain ( self_impls. as_ref ( ) )
741
+ . flat_map ( |impls| impls. for_trait_and_self_ty ( hir_trait_id, self_ty_fp) ) ;
734
742
735
743
let table = InferenceTable :: new ( db, env) ;
736
744
Original file line number Diff line number Diff line change @@ -1492,6 +1492,29 @@ impl Twait for Stwuct {
1492
1492
fn f() {
1493
1493
let s = Stwuct;
1494
1494
s.a$0();
1495
+ }
1496
+ "# ,
1497
+ ) ;
1498
+ }
1499
+ #[ test]
1500
+ fn method_call_inside_block ( ) {
1501
+ check (
1502
+ r#"
1503
+ trait Twait {
1504
+ fn a(&self);
1505
+ }
1506
+
1507
+ fn outer() {
1508
+ struct Stwuct;
1509
+
1510
+ impl Twait for Stwuct {
1511
+ fn a(&self){}
1512
+ //^
1513
+ }
1514
+ fn f() {
1515
+ let s = Stwuct;
1516
+ s.a$0();
1517
+ }
1495
1518
}
1496
1519
"# ,
1497
1520
) ;
You can’t perform that action at this time.
0 commit comments