@@ -559,7 +559,7 @@ fn expected_type_and_name<'db>(
559
559
token : & SyntaxToken ,
560
560
name_like : & ast:: NameLike ,
561
561
) -> ( Option < Type < ' db > > , Option < NameOrNameRef > ) {
562
- let token = prev_assign_token_at_trivia ( token. clone ( ) ) ;
562
+ let token = prev_special_biased_token_at_trivia ( token. clone ( ) ) ;
563
563
let mut node = match token. parent ( ) {
564
564
Some ( it) => it,
565
565
None => return ( None , None ) ,
@@ -724,6 +724,18 @@ fn expected_type_and_name<'db>(
724
724
let def = sema. to_def( & it) ;
725
725
( def. map( |def| def. ret_type( sema. db) ) , None )
726
726
} ,
727
+ ast:: ReturnExpr ( it) => {
728
+ let fn_ = sema. ancestors_with_macros( it. syntax( ) . clone( ) )
729
+ . find_map( Either :: <ast:: Fn , ast:: ClosureExpr >:: cast) ;
730
+ let ty = fn_. and_then( |f| match f {
731
+ Either :: Left ( f) => Some ( sema. to_def( & f) ?. ret_type( sema. db) ) ,
732
+ Either :: Right ( f) => {
733
+ let ty = sema. type_of_expr( & f. into( ) ) ?. original. as_callable( sema. db) ?;
734
+ Some ( ty. return_type( ) )
735
+ } ,
736
+ } ) ;
737
+ ( ty, None )
738
+ } ,
727
739
ast:: ClosureExpr ( it) => {
728
740
let ty = sema. type_of_expr( & it. into( ) ) ;
729
741
ty. and_then( |ty| ty. original. as_callable( sema. db) )
@@ -1877,7 +1889,7 @@ fn next_non_trivia_sibling(ele: SyntaxElement) -> Option<SyntaxElement> {
1877
1889
None
1878
1890
}
1879
1891
1880
- fn prev_assign_token_at_trivia ( mut token : SyntaxToken ) -> SyntaxToken {
1892
+ fn prev_special_biased_token_at_trivia ( mut token : SyntaxToken ) -> SyntaxToken {
1881
1893
while token. kind ( ) . is_trivia ( )
1882
1894
&& let Some ( prev) = token. prev_token ( )
1883
1895
&& let T ! [ =]
@@ -1890,7 +1902,10 @@ fn prev_assign_token_at_trivia(mut token: SyntaxToken) -> SyntaxToken {
1890
1902
| T ! [ -=]
1891
1903
| T ! [ |=]
1892
1904
| T ! [ &=]
1893
- | T ! [ ^=] = prev. kind ( )
1905
+ | T ! [ ^=]
1906
+ | T ! [ return ]
1907
+ | T ! [ break ]
1908
+ | T ! [ continue ] = prev. kind ( )
1894
1909
{
1895
1910
token = prev
1896
1911
}
0 commit comments