@@ -1284,8 +1284,8 @@ formatPair formatA delim formatB (AST.Pair a b (AST.ForceMultiline forceMultilin
12841284 (formatHeadCommented formatB b)
12851285
12861286
1287- negativeCasePatternWorkaround :: AST. Commented AST. Pattern. Pattern -> Box -> Box
1288- negativeCasePatternWorkaround (AST. Commented _ ( RA. A _ pattern ) _ ) =
1287+ negativeCasePatternWorkaround :: AST.Pattern. Pattern -> Box -> Box
1288+ negativeCasePatternWorkaround (RA. A _ pattern ) =
12891289 case pattern of
12901290 AST.Pattern. Literal (AST. IntNum i _) | i < 0 -> parens
12911291 AST.Pattern. Literal (AST. FloatNum f _) | f < 0 -> parens
@@ -1493,65 +1493,9 @@ formatExpression' elmVersion importInfo context aexpr =
14931493 ]
14941494 |> expressionParens AmbiguousEnd context -- TODO: not tested
14951495
1496- AST.Expression. Case (subject,multiline) clauses ->
1497- let
1498- opening =
1499- case
1500- ( multiline
1501- , formatCommentedExpression elmVersion importInfo SyntaxSeparated subject
1502- )
1503- of
1504- (False , SingleLine subject') ->
1505- line $ row
1506- [ keyword " case"
1507- , space
1508- , subject'
1509- , space
1510- , keyword " of"
1511- ]
1512- (_, subject') ->
1513- stack1
1514- [ line $ keyword " case"
1515- , indent subject'
1516- , line $ keyword " of"
1517- ]
1518-
1519- clause (pat, expr) =
1520- case
1521- ( pat
1522- , (formatPattern elmVersion False $ (\ (AST. Commented _ x _) -> x) pat)
1523- |> negativeCasePatternWorkaround pat
1524- , formatCommentedStack (formatPattern elmVersion False ) pat
1525- |> negativeCasePatternWorkaround pat
1526- , formatHeadCommentedStack (formatExpression elmVersion importInfo SyntaxSeparated ) expr
1527- )
1528- of
1529- (_, _, SingleLine pat', body') ->
1530- stack1
1531- [ line $ row [ pat', space, keyword " ->" ]
1532- , indent body'
1533- ]
1534- (AST. Commented pre _ [] , SingleLine pat', _, body') ->
1535- stack1 $
1536- (map formatComment pre)
1537- ++ [ line $ row [ pat', space, keyword " ->" ]
1538- , indent body'
1539- ]
1540- (_, _, pat', body') ->
1541- stack1 $
1542- [ pat'
1543- , line $ keyword " ->"
1544- , indent body'
1545- ]
1546- in
1547- opening
1548- |> andThen
1549- (clauses
1550- |> map clause
1551- |> List. intersperse blankLine
1552- |> map indent
1553- )
1554- |> expressionParens AmbiguousEnd context -- TODO: not tested
1496+ AST.Expression. Case subject branches ->
1497+ formatCaseExpression elmVersion importInfo subject branches
1498+ |> expressionParens AmbiguousEnd context -- TODO: not tested
15551499
15561500 AST.Expression. Tuple exprs multiline ->
15571501 ElmStructure. group True " (" " ," " )" multiline $ map (formatCommentedExpression elmVersion importInfo SyntaxSeparated ) exprs
@@ -1595,6 +1539,91 @@ formatExpression' elmVersion importInfo context aexpr =
15951539 ]
15961540
15971541
1542+ formatCaseExpression ::
1543+ ElmVersion
1544+ -> ImportInfo
1545+ -> (AST. Commented AST.Expression. Expr , AST. Multiline )
1546+ -> [(AST. Commented AST.Pattern. Pattern , (AST. Comments , AST.Expression. Expr ), AST. Multiline )]
1547+ -> Box
1548+ formatCaseExpression elmVersion importInfo subject branches =
1549+ let
1550+ branchBoxes multilineAcc (AST. Commented prePat pat postPat, (preBody, body), multilineBranch) =
1551+ let
1552+ (prePat', pat', postPat') =
1553+ ( Maybe. maybeToList $ formatComments prePat
1554+ , formatPattern elmVersion False pat |> negativeCasePatternWorkaround pat
1555+ , Maybe. maybeToList $ formatComments postPat
1556+ )
1557+ (preBody', body') =
1558+ ( Maybe. maybeToList $ formatComments preBody
1559+ , formatExpression elmVersion importInfo SyntaxSeparated body
1560+ )
1561+ (singlesPat, singlesBody) =
1562+ ( allSingles $ concat [ prePat', [pat'], postPat']
1563+ , allSingles $ concat [ preBody', [body']]
1564+ )
1565+ in
1566+ case (multilineBranch, singlesPat, singlesBody) of
1567+ (AST. JoinAll , Right patLines, Right bodyLines) ->
1568+ (multilineAcc, Right (patLines, bodyLines))
1569+ _ ->
1570+ (AST. SplitAll , Left (prePat', pat', postPat', preBody', body'))
1571+
1572+ (multilineBranches, branches') =
1573+ List. mapAccumR branchBoxes AST. JoinAll branches
1574+
1575+ branch multiline' boxes =
1576+ case (multiline', boxes) of
1577+ (AST. JoinAll , Right (patLines, bodyLines)) ->
1578+ line $ row $ List. intersperse space $ patLines ++ [keyword " ->" ] ++ bodyLines
1579+ (AST. SplitAll , Right (patLines, bodyLines)) ->
1580+ stack1
1581+ [ line $ row $ List. intersperse space $ patLines ++ [keyword " ->" ]
1582+ , indent $ line $ row $ bodyLines
1583+ ]
1584+ (_, Left ([] , SingleLine pat, [] , preBody, body)) ->
1585+ stack1
1586+ [ line $ row [pat, space, keyword " ->" ]
1587+ , indent $ stack1 $ preBody ++ [body]
1588+ ]
1589+ (_, Left (prePat, SingleLine pat', [] , preBody, body)) ->
1590+ stack1
1591+ [ stack1 prePat
1592+ , line $ row [pat', space, keyword " ->" ]
1593+ , indent $ stack1 $ preBody ++ [body]
1594+ ]
1595+ (_, Left (prePat, pat, postPat, preBody, body)) ->
1596+ stack1
1597+ [ stack1 $ prePat ++ [pat] ++ postPat
1598+ , line $ keyword " ->"
1599+ , indent $ stack1 $ preBody ++ [body]
1600+ ]
1601+ in
1602+ formatCaseExpressionOpening elmVersion importInfo subject
1603+ |> andThen
1604+ (branches'
1605+ |> map (branch multilineBranches)
1606+ |> (if AST. isMultiline multilineBranches then List. intersperse blankLine else id )
1607+ |> map indent
1608+ )
1609+
1610+ formatCaseExpressionOpening :: ElmVersion -> ImportInfo -> (AST. Commented AST.Expression. Expr , AST. Multiline ) -> Box
1611+ formatCaseExpressionOpening elmVersion importInfo (subject, multiline) =
1612+ case
1613+ ( multiline
1614+ , formatCommentedExpression elmVersion importInfo SyntaxSeparated subject
1615+ )
1616+ of
1617+ (AST. JoinAll , SingleLine subject') ->
1618+ line $ row [ keyword " case" , space , subject' , space , keyword " of" ]
1619+ (_, subject') ->
1620+ stack1
1621+ [ line $ keyword " case"
1622+ , indent subject'
1623+ , line $ keyword " of"
1624+ ]
1625+
1626+
15981627formatCommentedExpression :: ElmVersion -> ImportInfo -> ExpressionContext -> AST. Commented AST.Expression. Expr -> Box
15991628formatCommentedExpression elmVersion importInfo context (AST. Commented pre e post) =
16001629 let
0 commit comments