summaryrefslogtreecommitdiffhomepage
path: root/lib/Language/Haskell/Stylish/Step/SimpleAlign.hs
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Language/Haskell/Stylish/Step/SimpleAlign.hs')
-rw-r--r--lib/Language/Haskell/Stylish/Step/SimpleAlign.hs38
1 files changed, 36 insertions, 2 deletions
diff --git a/lib/Language/Haskell/Stylish/Step/SimpleAlign.hs b/lib/Language/Haskell/Stylish/Step/SimpleAlign.hs
index e02c270..e03f665 100644
--- a/lib/Language/Haskell/Stylish/Step/SimpleAlign.hs
+++ b/lib/Language/Haskell/Stylish/Step/SimpleAlign.hs
@@ -9,7 +9,7 @@ module Language.Haskell.Stylish.Step.SimpleAlign
--------------------------------------------------------------------------------
import Control.Monad (guard)
-import Data.List (foldl')
+import Data.List (foldl', foldl1')
import Data.Maybe (fromMaybe)
import qualified GHC.Hs as Hs
import qualified SrcLoc as S
@@ -135,6 +135,39 @@ matchToAlignable _conf (S.L _ (Hs.Match _ _ _ _)) = Nothing
--------------------------------------------------------------------------------
+multiWayIfToAlignable
+ :: Config
+ -> Hs.LHsExpr Hs.GhcPs
+ -> [Alignable S.RealSrcSpan]
+multiWayIfToAlignable conf (S.L _ (Hs.HsMultiIf _ grhss)) =
+ fromMaybe [] $ traverse (grhsToAlignable conf) grhss
+multiWayIfToAlignable _conf _ = []
+
+
+--------------------------------------------------------------------------------
+grhsToAlignable
+ :: Config
+ -> S.Located (Hs.GRHS Hs.GhcPs (Hs.LHsExpr Hs.GhcPs))
+ -> Maybe (Alignable S.RealSrcSpan)
+grhsToAlignable conf (S.L grhsloc (Hs.GRHS _ guards@(_ : _) body)) = do
+ guard $ cCases conf
+ let guardsLocs = map S.getLoc guards
+ bodyLoc = S.getLoc body
+ left = foldl1' S.combineSrcSpans guardsLocs
+ matchPos <- toRealSrcSpan grhsloc
+ leftPos <- toRealSrcSpan left
+ bodyPos <- toRealSrcSpan bodyLoc
+ Just $ Alignable
+ { aContainer = matchPos
+ , aLeft = leftPos
+ , aRight = bodyPos
+ , aRightLead = length "-> "
+ }
+grhsToAlignable _conf (S.L _ (Hs.XGRHS x)) = Hs.noExtCon x
+grhsToAlignable _conf (S.L _ _) = Nothing
+
+
+--------------------------------------------------------------------------------
step :: Maybe Int -> Config -> Step
step maxColumns config = makeStep "Cases" $ \ls module' ->
let changes
@@ -147,5 +180,6 @@ step maxColumns config = makeStep "Cases" $ \ls module' ->
configured :: [Change String]
configured = concat $
[changes records recordToAlignable | cRecords config] ++
- [changes everything (matchGroupToAlignable config)] in
+ [changes everything (matchGroupToAlignable config)] ++
+ [changes everything (multiWayIfToAlignable config)] in
applyChanges configured ls