This repository was archived by the owner on May 28, 2025. It is now read-only.
File tree Expand file tree Collapse file tree 3 files changed +62
-2
lines changed Expand file tree Collapse file tree 3 files changed +62
-2
lines changed Original file line number Diff line number Diff line change @@ -503,6 +503,35 @@ fn trait_method() {
503503 ) ;
504504}
505505
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+
506535#[ test]
507536fn generic_fn ( ) {
508537 check_number (
Original file line number Diff line number Diff line change @@ -729,8 +729,16 @@ fn lookup_impl_assoc_item_for_trait_ref(
729729 let self_ty = trait_ref. self_type_parameter ( Interner ) ;
730730 let self_ty_fp = TyFingerprint :: for_trait_impl ( & self_ty) ?;
731731 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) ) ;
734742
735743 let table = InferenceTable :: new ( db, env) ;
736744
Original file line number Diff line number Diff line change @@ -1492,6 +1492,29 @@ impl Twait for Stwuct {
14921492fn f() {
14931493 let s = Stwuct;
14941494 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+ }
14951518}
14961519 "# ,
14971520 ) ;
You can’t perform that action at this time.
0 commit comments