@@ -310,7 +310,7 @@ defmodule Spitfire do
310310 else
311311 @ terminals_with_comma
312312 end
313-
313+
314314 { parser , is_valid } = validate_peek ( parser , current_token_type ( parser ) )
315315 # TODO should we handle ; here?
316316 # TODO removing peek_token(parser) != :eol does not break any tests
@@ -399,7 +399,7 @@ defmodule Spitfire do
399399
400400 cond do
401401 # if the next token is the closing paren or if the next token is a newline and the next next token is the closing paren
402- peek_token ( parser ) == :")" || ( peek_token ( parser ) == :eol && peek_token ( next_token ( parser ) ) == :")" ) ->
402+ peek_token ( parser ) == :")" || ( peek_token ( parser ) in [ :eol , :";" ] && peek_token ( next_token ( parser ) ) == :")" ) ->
403403 parser =
404404 parser
405405 |> Map . put ( :nesting , old_nesting )
@@ -431,11 +431,11 @@ defmodule Spitfire do
431431 { ast , parser }
432432
433433 # if the next token is a new line, but the next next token is not the closing paren (implied from previous clause)
434- peek_token ( parser ) == :eol or current_token ( parser ) == :-> ->
434+ peek_token ( parser ) in [ :eol , :";" ] or current_token ( parser ) == :-> ->
435435 # second conditon checks of the next next token is a closing paren or another expression
436436 { exprs , parser } =
437437 while2 current_token ( parser ) == :-> ||
438- ( peek_token ( parser ) == :eol && parser |> next_token ( ) |> peek_token ( ) != :")" ) <- parser do
438+ ( peek_token ( parser ) in [ :eol , :";" ] && parser |> next_token ( ) |> peek_token ( ) != :")" ) <- parser do
439439 { ast , parser } =
440440 case Map . get ( parser , :stab_state ) do
441441 % { ast: lhs } ->
@@ -482,7 +482,7 @@ defmodule Spitfire do
482482
483483 # handles if the closing paren is on a new line or the same line
484484 parser =
485- if peek_token ( parser ) == :eol do
485+ if peek_token ( parser ) in [ :eol , :";" ] do
486486 next_token ( parser )
487487 else
488488 parser
@@ -1673,7 +1673,6 @@ defmodule Spitfire do
16731673 # TODO should we add ; here?
16741674 # TODO is anything needed? Removing all tokens does not break any tests
16751675 terminals = [ :eol , :eof , :"}" , :")" , :"]" , :">>" ]
1676- terminals = [ :eol , :eof , :"}" , :")" , :"]" , :">>" ]
16771676
16781677 { parser , is_valid } = validate_peek ( parser , current_token_type ( parser ) )
16791678
@@ -2331,6 +2330,7 @@ defmodule Spitfire do
23312330 parser
23322331 end
23332332
2333+ # TODO this may be too greedy. Probably the better option would be to have distinct eat_eol/1 and eat_eol_or_semicolon/1
23342334 defp eat_eol ( parser ) do
23352335 case eat ( % { :eol => true , :";" => true } , parser ) do
23362336 % { current_token: { token , _ } } = parser when token in [ :eol , :";" ] -> eat_eol ( parser )
0 commit comments