@@ -595,6 +595,12 @@ defmodule ExUnit.Assertions do
595
595
defp collect_pins_from_pattern ( expr , vars ) do
596
596
{ _ , pins } =
597
597
Macro . prewalk ( expr , % { } , fn
598
+ { :quote , _ , [ _ ] } , acc ->
599
+ { :ok , acc }
600
+
601
+ { :quote , _ , [ _ , _ ] } , acc ->
602
+ { :ok , acc }
603
+
598
604
{ :^ , _ , [ var ] } , acc ->
599
605
identifier = var_context ( var )
600
606
@@ -631,7 +637,10 @@ defmodule ExUnit.Assertions do
631
637
{ :"::" , _ , [ left , right ] } , acc ->
632
638
{ [ left ] , collect_vars_from_binary ( right , acc ) }
633
639
634
- { skip , _ , [ _ ] } , acc when skip in [ :^ , :@ ] ->
640
+ { skip , _ , [ _ ] } , acc when skip in [ :^ , :@ , :quote ] ->
641
+ { :ok , acc }
642
+
643
+ { skip , _ , [ _ , _ ] } , acc when skip in [ :quote ] ->
635
644
{ :ok , acc }
636
645
637
646
{ :_ , _ , context } , acc when is_atom ( context ) ->
@@ -673,34 +682,43 @@ defmodule ExUnit.Assertions do
673
682
674
683
@ doc false
675
684
def __expand_pattern__ ( { :when , meta , [ left , right ] } , caller ) do
676
- left = prewalk_expand_pattern ( left , Macro.Env . to_match ( caller ) )
677
- right = prewalk_expand_pattern ( right , % { caller | context: :guard } )
685
+ left = expand_pattern ( left , Macro.Env . to_match ( caller ) )
686
+ right = expand_pattern ( right , % { caller | context: :guard } )
678
687
{ :when , meta , [ left , right ] }
679
688
end
680
689
681
690
def __expand_pattern__ ( expr , caller ) do
682
- prewalk_expand_pattern ( expr , Macro.Env . to_match ( caller ) )
691
+ expand_pattern ( expr , Macro.Env . to_match ( caller ) )
683
692
end
684
693
685
- defp prewalk_expand_pattern ( expr , caller ) do
686
- Macro . prewalk ( expr , fn
687
- { :__aliases__ , _ , _ } = expr ->
688
- Macro . expand ( expr , caller )
694
+ defp expand_pattern ( { :quote , _ , [ _ ] } = expr , _caller ) , do: expr
695
+ defp expand_pattern ( { :quote , _ , [ _ , _ ] } = expr , _caller ) , do: expr
696
+ defp expand_pattern ( { :__aliases__ , _ , _ } = expr , caller ) , do: Macro . expand ( expr , caller )
689
697
690
- { :@ , _ , [ { attribute , _ , _ } ] } ->
691
- caller . module |> Module . get_attribute ( attribute ) |> Macro . escape ( )
698
+ defp expand_pattern ( { :@ , _ , [ { attribute , _ , _ } ] } , caller ) do
699
+ caller . module |> Module . get_attribute ( attribute ) |> Macro . escape ( )
700
+ end
692
701
693
- { left , meta , right } = expr ->
694
- case Macro . expand ( expr , caller ) do
695
- ^ expr -> expr
696
- other -> { left , [ expanded: other ] ++ meta , right }
697
- end
702
+ defp expand_pattern ( { left , meta , right } = expr , caller ) do
703
+ meta =
704
+ case Macro . expand ( expr , caller ) do
705
+ ^ expr -> meta
706
+ other -> [ expanded: other ] ++ meta
707
+ end
698
708
699
- other ->
700
- Macro . expand ( other , caller )
701
- end )
709
+ { expand_pattern ( left , caller ) , meta , expand_pattern ( right , caller ) }
710
+ end
711
+
712
+ defp expand_pattern ( { left , right } , caller ) do
713
+ { expand_pattern ( left , caller ) , expand_pattern ( right , caller ) }
714
+ end
715
+
716
+ defp expand_pattern ( [ _ | _ ] = list , caller ) do
717
+ Enum . map ( list , & expand_pattern ( & 1 , caller ) )
702
718
end
703
719
720
+ defp expand_pattern ( other , _caller ) , do: other
721
+
704
722
defp suppress_warning ( { name , meta , [ expr , [ do: clauses ] ] } ) do
705
723
clauses =
706
724
Enum . map ( clauses , fn { :-> , meta , args } ->
0 commit comments