@@ -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) )
@@ -1868,7 +1880,7 @@ fn next_non_trivia_sibling(ele: SyntaxElement) -> Option<SyntaxElement> {
1868
1880
None
1869
1881
}
1870
1882
1871
- fn prev_assign_token_at_trivia ( mut token : SyntaxToken ) -> SyntaxToken {
1883
+ fn prev_special_biased_token_at_trivia ( mut token : SyntaxToken ) -> SyntaxToken {
1872
1884
while token. kind ( ) . is_trivia ( )
1873
1885
&& let Some ( prev) = token. prev_token ( )
1874
1886
&& let T ! [ =]
@@ -1881,7 +1893,10 @@ fn prev_assign_token_at_trivia(mut token: SyntaxToken) -> SyntaxToken {
1881
1893
| T ! [ -=]
1882
1894
| T ! [ |=]
1883
1895
| T ! [ &=]
1884
- | T ! [ ^=] = prev. kind ( )
1896
+ | T ! [ ^=]
1897
+ | T ! [ return ]
1898
+ | T ! [ break ]
1899
+ | T ! [ continue ] = prev. kind ( )
1885
1900
{
1886
1901
token = prev
1887
1902
}
0 commit comments