From ed48f6dbfbb6b7447ed369224198ddc4cabf422f Mon Sep 17 00:00:00 2001
From: Earlopain <14981592+Earlopain@users.noreply.github.com>
Date: Thu, 12 Feb 2026 16:40:54 +0100
Subject: [PATCH] Revert "Fix lexing for unterminated strings/heredocs etc."
This reverts commit 8f35e8ef255bc045567d959156d54971dc21dcb5.
---
src/prism.c | 9 ----
.../unterminated_heredoc_and_embexpr.txt | 11 ----
.../unterminated_heredoc_and_embexpr_2.txt | 9 ----
test/prism/lex_test.rb | 53 ++-----------------
4 files changed, 3 insertions(+), 79 deletions(-)
delete mode 100644 test/prism/errors/unterminated_heredoc_and_embexpr.txt
delete mode 100644 test/prism/errors/unterminated_heredoc_and_embexpr_2.txt
diff --git a/src/prism.c b/src/prism.c
index 097b4c7305..34e5d38b0a 100644
--- a/src/prism.c
+++ b/src/prism.c
@@ -9856,15 +9856,6 @@ parser_lex(pm_parser_t *parser) {
// We'll check if we're at the end of the file. If we are, then we
// need to return the EOF token.
if (parser->current.end >= parser->end) {
- // We may be missing closing tokens. We should pop modes one by one
- // to do the appropriate cleanup like moving next_start for heredocs.
- // Only when no mode is remaining will we actually emit the EOF token.
- if (parser->lex_modes.current->mode != PM_LEX_DEFAULT) {
- lex_mode_pop(parser);
- parser_lex(parser);
- return;
- }
-
// If we hit EOF, but the EOF came immediately after a newline,
// set the start of the token to the newline. This way any EOF
// errors will be reported as happening on that line rather than
diff --git a/test/prism/errors/unterminated_heredoc_and_embexpr.txt b/test/prism/errors/unterminated_heredoc_and_embexpr.txt
deleted file mode 100644
index bed7fcd24e..0000000000
--- a/test/prism/errors/unterminated_heredoc_and_embexpr.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-<= "3.3"
- def test_lex_compat
- source = "foo bar"
- prism = Prism.lex_compat(source, version: "current").value
- ripper = Ripper.lex(source)
+ def test_lex_compare
+ prism = Prism.lex_compat(File.read(__FILE__), version: "current").value
+ ripper = Ripper.lex(File.read(__FILE__))
assert_equal(ripper, prism)
end
end
-
- def test_lex_interpolation_unterminated
- assert_equal(
- %i[STRING_BEGIN EMBEXPR_BEGIN EOF],
- token_types('"#{')
- )
-
- assert_equal(
- %i[STRING_BEGIN EMBEXPR_BEGIN IGNORED_NEWLINE EOF],
- token_types('"#{' + "\n")
- )
- end
-
- def test_lex_interpolation_unterminated_with_content
- # FIXME: Emits EOL twice.
- assert_equal(
- %i[STRING_BEGIN EMBEXPR_BEGIN CONSTANT EOF EOF],
- token_types('"#{C')
- )
-
- assert_equal(
- %i[STRING_BEGIN EMBEXPR_BEGIN CONSTANT NEWLINE EOF],
- token_types('"#{C' + "\n")
- )
- end
-
- def test_lex_heredoc_unterminated
- code = <<~'RUBY'.strip
- <