@@ -64,13 +64,17 @@ named!(expr_stmt<StrSpan, Statement>,
6464 do_parse!(
6565 lhs: call!( ExpressionParser :: <NewlinesAreNotSpaces >:: testlist_star_expr) >>
6666 r: ws_nonl!( alt!(
67- // Case 1: "foo: bar = baz"
67+ // Case 1: "foo: bar = baz" and "foo: bar"
6868 do_parse!(
6969 char !( ':' ) >>
7070 typed: call!( ExpressionParser :: <NewlinesAreNotSpaces >:: test) >>
71- char !( '=' ) >>
72- rhs: call!( ExpressionParser :: <NewlinesAreNotSpaces >:: test) >> (
73- Statement :: TypedAssignment ( lhs. clone( ) , * typed, vec![ * rhs] )
71+ rhs: opt!( ws_nonl!( preceded!( char !( '=' ) ,
72+ call!( ExpressionParser :: <NewlinesAreNotSpaces >:: test)
73+ ) ) ) >> (
74+ match rhs {
75+ None => Statement :: TypeAnnotation ( lhs. clone( ) , * typed) ,
76+ Some ( rhs) => Statement :: TypedAssignment ( lhs. clone( ) , * typed, vec![ * rhs] ) ,
77+ }
7478 )
7579 )
7680
@@ -974,6 +978,18 @@ mod tests {
974978 ) ) ) ;
975979 }
976980
981+ #[ test]
982+ fn test_typeannotation ( ) {
983+ assert_parse_eq ( small_stmt ( make_strspan ( "foo: bar" ) ) , Ok ( ( make_strspan ( "" ) ,
984+ Statement :: TypeAnnotation (
985+ vec ! [
986+ Expression :: Name ( "foo" . to_string( ) ) ,
987+ ] ,
988+ Expression :: Name ( "bar" . to_string ( ) ) ,
989+ )
990+ ) ) ) ;
991+ }
992+
977993 #[ test]
978994 fn test_augassign ( ) {
979995 assert_parse_eq ( small_stmt ( make_strspan ( "foo:bar = baz" ) ) , Ok ( ( make_strspan ( "" ) ,
0 commit comments