File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -255,6 +255,8 @@ expected 'end' to close while statement:
255255 en : expected 'end' to close while statement
256256 zh_CN : 期望 'end' 来关闭while语句
257257 zh_HK : 期望 'end' 來關閉while語句
258+ expected end of block after return :
259+ en : expected end of block after return
258260expected 'function', variable name, or attribute after 'local' :
259261 en : expected 'function', variable name, or attribute after 'local'
260262 zh_CN : 期望在 'local' 后有 'function'、变量名或属性
Original file line number Diff line number Diff line change @@ -3724,4 +3724,26 @@ Syntax(Chunk)@0..47
37243724 assert ! ( errors[ 0 ] . range. is_empty( ) ) ;
37253725 assert_eq ! ( u32 :: from( errors[ 0 ] . range. start( ) ) as usize , code. len( ) ) ;
37263726 }
3727+
3728+ #[ test]
3729+ fn test_statement_after_return ( ) {
3730+ let code = "return 1, 2 x = 1" ;
3731+ let tree = LuaParser :: parse ( code, ParserConfig :: default ( ) ) ;
3732+ let errors = tree. get_errors ( ) ;
3733+
3734+ assert_eq ! ( errors. len( ) , 1 ) ;
3735+ assert_eq ! ( errors[ 0 ] . kind, LuaParseErrorKind :: SyntaxError ) ;
3736+ assert_eq ! ( errors[ 0 ] . message, "expected end of block after return" )
3737+ }
3738+
3739+ #[ test]
3740+ fn test_statement_after_blank_return ( ) {
3741+ let code = "return; x = 1" ;
3742+ let tree = LuaParser :: parse ( code, ParserConfig :: default ( ) ) ;
3743+ let errors = tree. get_errors ( ) ;
3744+
3745+ assert_eq ! ( errors. len( ) , 1 ) ;
3746+ assert_eq ! ( errors[ 0 ] . kind, LuaParseErrorKind :: SyntaxError ) ;
3747+ assert_eq ! ( errors[ 0 ] . message, "expected end of block after return" )
3748+ }
37273749}
Original file line number Diff line number Diff line change @@ -752,6 +752,7 @@ fn parse_attrib(p: &mut LuaParser) -> ParseResult {
752752
753753fn parse_return ( p : & mut LuaParser ) -> ParseResult {
754754 let m = p. mark ( LuaSyntaxKind :: ReturnStat ) ;
755+ let return_start_range = p. current_token_range ( ) ;
755756 p. bump ( ) ;
756757 if !block_follow ( p)
757758 && p. current_token ( ) != LuaTokenKind :: TkSemicolon
@@ -761,6 +762,14 @@ fn parse_return(p: &mut LuaParser) -> ParseResult {
761762 }
762763
763764 if_token_bump ( p, LuaTokenKind :: TkSemicolon ) ;
765+
766+ if !block_follow ( p) {
767+ p. push_error ( LuaParseError :: syntax_error_from (
768+ & t ! ( "expected end of block after return" ) ,
769+ return_start_range,
770+ ) ) ;
771+ } ;
772+
764773 Ok ( m. complete ( p) )
765774}
766775
You can’t perform that action at this time.
0 commit comments