@@ -43,6 +43,34 @@ defmodule Styler.Style.Blocks do
4343 end
4444 end
4545
46+ # case statements with 1 clause: thanks 🤖!
47+ #
48+ # ideally rewrite to use `=`, but can't do that when there's a `when` clause
49+ def run ( { { :case , _ , [ _ , [ { _ , [ { :-> , _ , [ [ { :when , _ , _ } | _ ] | _ ] } ] } ] ] } , _ } = zipper , ctx ) , do: { :cont , zipper , ctx }
50+ #
51+ def run ( { { :case , m , [ head , [ { _ , [ { :-> , _ , [ [ lhs ] , rhs ] } ] } ] ] } , _ } = zipper , ctx ) do
52+ rhs =
53+ case rhs do
54+ { :__block__ , _ , children } -> children
55+ node -> [ node ]
56+ end
57+
58+ zipper =
59+ case Zipper . up ( zipper ) do
60+ { { := , am , [ parent_lhs , _single_clause_case ] } , _ } = zipper ->
61+ # this was a `x = case head, do: (lhs -> rhs)`. make it `x = lhs = head; rhs`
62+ meta = [ line: am [ :line ] ]
63+ Zipper . replace ( zipper , { := , meta , [ parent_lhs , { := , meta , [ lhs , head ] } ] } )
64+
65+ _ ->
66+ zipper
67+ |> Style . find_nearest_block ( )
68+ |> Zipper . replace ( { := , [ line: m [ :line ] ] , [ lhs , head ] } )
69+ end
70+
71+ { :cont , Zipper . insert_siblings ( zipper , rhs ) , ctx }
72+ end
73+
4674 def run ( { { :cond , _ , [ [ { do_ , clauses } ] ] } , _ } = zipper , ctx ) do
4775 # ensure all final `atom -> final_clause` use `true` for consistency.
4876 # `:else` is cute but consistency is all.
0 commit comments