Skip to content

Commit 3e07be7

Browse files
authored
Merge pull request #167 from vinistock/vs/raise_parse_error_on_else_missing_end
Raise ParseError on missing end for else statement
2 parents 9949265 + 666e7c8 commit 3e07be7

File tree

2 files changed

+15
-0
lines changed

2 files changed

+15
-0
lines changed

lib/syntax_tree/parser.rb

+5
Original file line numberDiff line numberDiff line change
@@ -1327,6 +1327,11 @@ def on_else(statements)
13271327
token.is_a?(Kw) && %w[end ensure].include?(token.value)
13281328
end
13291329

1330+
if index.nil?
1331+
message = "Cannot find expected else ending"
1332+
raise ParseError.new(message, *find_token_error(keyword.location))
1333+
end
1334+
13301335
node = tokens[index]
13311336
ending = node.value == "end" ? tokens.delete_at(index) : node
13321337

test/parser_test.rb

+10
Original file line numberDiff line numberDiff line change
@@ -55,5 +55,15 @@ def test_errors_on_missing_token_without_location
5555
def test_handles_strings_with_non_terminated_embedded_expressions
5656
assert_raises(Parser::ParseError) { SyntaxTree.parse('"#{"') }
5757
end
58+
59+
def test_errors_on_else_missing_two_ends
60+
assert_raises(Parser::ParseError) { SyntaxTree.parse(<<~RUBY) }
61+
def foo
62+
if something
63+
else
64+
call do
65+
end
66+
RUBY
67+
end
5868
end
5969
end

0 commit comments

Comments
 (0)