@@ -2646,7 +2646,6 @@ defmodule SpitfireTest do
26462646 { { :. , [ line: 5 , column: 37 ] , [ { :state , [ line: 5 , column: 32 ] , nil } , :baz ] } ,
26472647 [ no_parens: true , line: 5 , column: 38 ] , [ ] }
26482648 ] } ,
2649- { :__block__ , [ error: true , line: 5 , column: 41 ] , [ ] } ,
26502649 { :__block__ ,
26512650 [
26522651 end_of_expression: [ newlines: 1 , line: 5 , column: 43 ] ,
@@ -2658,7 +2657,6 @@ defmodule SpitfireTest do
26582657 [
26592658 { [ line: 2 , column: 8 ] , "missing closing brace for map" } ,
26602659 { [ line: 4 , column: 1 ] , "unknown token: ," } ,
2661- { [ line: 5 , column: 41 ] , "unknown token: )" } ,
26622660 { [ line: 5 , column: 42 ] , "unknown token: }" }
26632661 ] }
26642662 end
@@ -3104,6 +3102,45 @@ defmodule SpitfireTest do
31043102 { [ line: 1 , column: 16 ] , "missing closing brace for struct %__MODULE__" }
31053103 ] } == Spitfire . parse ( "%__MODULE__ a: 1" )
31063104 end
3105+
3106+ test "stray closing delimiter after identifier" do
3107+ assert { :error , { :__block__ , [ ] , [ { :x , _ , nil } , { :__block__ , [ error: true , line: 1 , column: 3 ] , [ ] } ] } ,
3108+ [ { [ line: 1 , column: 3 ] , "unknown token: ]" } ] } = Spitfire . parse ( "x ]" )
3109+
3110+ assert { :error , { :__block__ , [ ] , [ { :x , _ , nil } , { :__block__ , [ error: true , line: 1 , column: 3 ] , [ ] } ] } ,
3111+ [ { [ line: 1 , column: 3 ] , "unknown token: }" } ] } = Spitfire . parse ( "x }" )
3112+
3113+ assert { :error , { :__block__ , [ ] , [ { :x , _ , nil } , { :__block__ , [ error: true , line: 1 , column: 3 ] , [ ] } ] } ,
3114+ [ { [ line: 1 , column: 3 ] , "unknown token: )" } ] } = Spitfire . parse ( "x )" )
3115+
3116+ assert { :error , { :__block__ , [ ] , [ { :@ , _ , [ { :x , _ , nil } ] } , { :__block__ , [ error: true , line: 1 , column: 4 ] , [ ] } ] } ,
3117+ [ { [ line: 1 , column: 4 ] , "unknown token: ]" } ] } = Spitfire . parse ( "@x ]" )
3118+
3119+ assert { :error , { :__block__ , [ ] , [ 1 , { :__block__ , [ error: true , line: 1 , column: 3 ] , [ ] } ] } ,
3120+ [ { [ line: 1 , column: 3 ] , "unknown token: ]" } ] } = Spitfire . parse ( "1 ]" )
3121+
3122+ assert { :error , _ast , [ { [ line: 1 , column: 3 ] , "unknown token: ]" } , { [ line: 1 , column: 5 ] , "unknown token: }" } ] } =
3123+ Spitfire . parse ( "x ] }" )
3124+ end
3125+
3126+ test "stray closing delimiter after complete expression" do
3127+ assert { :error ,
3128+ { :__block__ , [ ] ,
3129+ [
3130+ { :foo , [ closing: [ line: 1 , column: 5 ] , line: 1 , column: 1 ] , [ ] } ,
3131+ { :__block__ , [ error: true , line: 1 , column: 6 ] , [ ] }
3132+ ] } , [ { [ line: 1 , column: 6 ] , "unknown token: }" } ] } = Spitfire . parse ( "foo()}" )
3133+
3134+ assert { :error , { :__block__ , [ ] , [ [ 1 , 2 ] , { :__block__ , [ error: true , line: 1 , column: 7 ] , [ ] } ] } ,
3135+ [ { [ line: 1 , column: 7 ] , "unknown token: }" } ] } = Spitfire . parse ( "[1, 2]}" )
3136+
3137+ assert { :error ,
3138+ { :__block__ , [ ] ,
3139+ [
3140+ { :%{} , [ closing: [ line: 1 , column: 7 ] , line: 1 , column: 1 ] , [ a: 1 ] } ,
3141+ { :__block__ , [ error: true , line: 1 , column: 8 ] , [ ] }
3142+ ] } , [ { [ line: 1 , column: 8 ] , "unknown token: )" } ] } = Spitfire . parse ( "%{a: 1})" )
3143+ end
31073144 end
31083145
31093146 describe "&parse_with_comments/2" do
0 commit comments