diff --git a/lib/spitfire.ex b/lib/spitfire.ex index be54d5c..64f8f05 100644 --- a/lib/spitfire.ex +++ b/lib/spitfire.ex @@ -2109,7 +2109,18 @@ defmodule Spitfire do trace "parse_anon_function", trace_meta(parser) do meta = current_meta(parser) - newlines = get_newlines(parser) + semicolon_newlines = + case peek_newlines(parser, :";") do + nl when is_integer(nl) and nl > 0 -> nl + _ -> nil + end + + newlines = + case peek_newlines(parser) || semicolon_newlines do + nil -> [] + nl -> [newlines: nl] + end + parser = parser |> next_token() |> eat_eoe() # fn creates its own stab scope diff --git a/test/spitfire_test.exs b/test/spitfire_test.exs index 1dff579..9887af7 100644 --- a/test/spitfire_test.exs +++ b/test/spitfire_test.exs @@ -2297,6 +2297,10 @@ defmodule SpitfireTest do # In-match operator (<-) in map keys - should be part of key, not wrap it assert Spitfire.parse("%{s\\\\r => 1}") == s2q("%{s\\\\r => 1}") + # Fn args with semicolon/newline trivia + assert Spitfire.parse("fn ;\n -> :ok end") == s2q("fn ;\n -> :ok end") + assert Spitfire.parse("fn ; -> :ok end") == s2q("fn ; -> :ok end") + # Struct type with dot-call target assert Spitfire.parse("%e.(){}") == s2q("%e.(){}") assert Spitfire.parse("%e.(1){}") == s2q("%e.(1){}")