diff options
author | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2023-06-20 20:10:46 +0900 |
---|---|---|
committer | Nobuyoshi Nakada <nobu@ruby-lang.org> | 2023-06-20 20:10:46 +0900 |
commit | 6be402e172a537000de58a28af389cb55dd62ec8 (patch) | |
tree | 15af6549774ce5d977bbedccfa58cbdd4d72bb94 | |
parent | 49b83b73ef380afac78e9495e52000509119a471 (diff) |
[Bug #19736] Recover after unterminated interpolation
Notes
Notes:
Merged: https://github.com/ruby/ruby/pull/7963
-rw-r--r-- | parse.y | 6 | ||||
-rw-r--r-- | test/ripper/test_lexer.rb | 9 | ||||
-rw-r--r-- | test/ruby/test_parse.rb | 9 |
3 files changed, 23 insertions, 1 deletions
@@ -5331,7 +5331,7 @@ string_content : tSTRING_CONTENT $<num>$ = p->heredoc_indent; p->heredoc_indent = 0; } - compstmt tSTRING_DEND + compstmt string_dend { COND_POP(); CMDARG_POP(); @@ -5348,6 +5348,10 @@ string_content : tSTRING_CONTENT } ; +string_dend : tSTRING_DEND + | END_OF_INPUT + ; + string_dvar : tGVAR { /*%%%*/ diff --git a/test/ripper/test_lexer.rb b/test/ripper/test_lexer.rb index 8e8a616627..92587ae4c0 100644 --- a/test/ripper/test_lexer.rb +++ b/test/ripper/test_lexer.rb @@ -264,4 +264,13 @@ world" CODE assert_equal(code, Ripper.tokenize(code).join(""), bug) end + + def test_heredoc_unterminated_interpolation + code = <<~'HEREDOC' + <<A+1 + #{ + HEREDOC + + assert_include(Ripper.tokenize(code).join(""), "+1") + end end diff --git a/test/ruby/test_parse.rb b/test/ruby/test_parse.rb index 71507575a7..099050dc8d 100644 --- a/test/ruby/test_parse.rb +++ b/test/ruby/test_parse.rb @@ -1121,6 +1121,15 @@ x = __ENCODING__ assert_equal v1, v3 end + def test_heredoc_unterminated_interpolation + code = <<~'HEREDOC' + <<A+1 + #{ + HEREDOC + + assert_syntax_error(code, /can't find string "A"/) + end + def test_unexpected_token_error assert_syntax_error('"x"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', /unexpected/) end |