Skip to content

Commit 2d1bb63

Browse files
authored
fix: crash on tokenizer error (#52)
1 parent fd50173 commit 2d1bb63

File tree

2 files changed

+34
-1
lines changed

2 files changed

+34
-1
lines changed

lib/spitfire.ex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1996,7 +1996,7 @@ defmodule Spitfire do
19961996
{:ok, _, _, _, rev_tokens, rev_terminators} ->
19971997
:lists.reverse(rev_tokens, rev_terminators)
19981998

1999-
{:error, _, _, [], tokens} ->
1999+
{:error, _, _, _, tokens} ->
20002000
Enum.reverse(tokens)
20012001
end
20022002

test/spitfire_test.exs

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2609,6 +2609,39 @@ defmodule SpitfireTest do
26092609
[{[line: 6, column: 5], "missing closing bracket for list"}]
26102610
}
26112611
end
2612+
2613+
test "unclosed interpolation" do
2614+
code = """
2615+
defmodule MyModule do
2616+
import List
2617+
var = '\#{
2618+
end
2619+
"""
2620+
2621+
assert {:error, _ast, _} = result = Spitfire.parse(code)
2622+
2623+
assert result == {
2624+
:error,
2625+
{:defmodule, [do: [line: 1, column: 20], end: [line: 1, column: 20], line: 1, column: 1],
2626+
[
2627+
{:__aliases__, [last: [line: 1, column: 11], line: 1, column: 11], [:MyModule]},
2628+
[
2629+
do:
2630+
{:__block__, [],
2631+
[
2632+
{:import, [end_of_expression: [newlines: 1, line: 2, column: 14], line: 2, column: 3],
2633+
[{:__aliases__, [last: [line: 2, column: 10], line: 2, column: 10], [:List]}]},
2634+
{:=, [line: 3, column: 7],
2635+
[{:var, [line: 3, column: 3], nil}, {:__block__, [error: true, line: 3, column: 7], []}]}
2636+
]}
2637+
]
2638+
]},
2639+
[
2640+
{[line: 3, column: 7], "malformed right-hand side of = operator"},
2641+
{[line: 1, column: 20], "missing `end` for do block"}
2642+
]
2643+
}
2644+
end
26122645
end
26132646

26142647
describe "&parse_with_comments/2" do

0 commit comments

Comments
 (0)