summaryrefslogtreecommitdiffhomepage
path: root/lib
diff options
context:
space:
mode:
authorJasper Van der Jeugt <m@jaspervdj.be>2016-07-03 16:20:49 +0200
committerJasper Van der Jeugt <m@jaspervdj.be>2016-07-03 18:15:57 +0200
commit53664d22b83d96a3faa0053d8e73b8ca20b5afef (patch)
tree33a6dc920c8f1a7a9e9ba0ade66bff07575a2447 /lib
parentf2f6c3e9636e7a03d2b5f81b9afa1453e8a0976e (diff)
downloadstylish-haskell-53664d22b83d96a3faa0053d8e73b8ca20b5afef.tar.gz
Simple alignment for top-level cases
Diffstat (limited to 'lib')
-rw-r--r--lib/Language/Haskell/Stylish/Step/Cases.hs33
1 files changed, 27 insertions, 6 deletions
diff --git a/lib/Language/Haskell/Stylish/Step/Cases.hs b/lib/Language/Haskell/Stylish/Step/Cases.hs
index e71c6c9..5ea30f4 100644
--- a/lib/Language/Haskell/Stylish/Step/Cases.hs
+++ b/lib/Language/Haskell/Stylish/Step/Cases.hs
@@ -34,13 +34,34 @@ altToAlignable (H.Alt ann pat rhs Nothing) = Just $ Alignable
--------------------------------------------------------------------------------
+tlpats :: Data l => H.Module l -> [[H.Match l]]
+tlpats modu = [matches | H.FunBind _ matches <- everything modu]
+
+
+--------------------------------------------------------------------------------
+matchToAlignable :: H.Match l -> Maybe (Alignable l)
+matchToAlignable (H.InfixMatch _ _ _ _ _ _) = Nothing
+matchToAlignable (H.Match _ _ [] _ _) = Nothing
+matchToAlignable (H.Match _ _ _ _ (Just _)) = Nothing
+matchToAlignable (H.Match ann name pats rhs Nothing) = Just $ Alignable
+ { aContainer = ann
+ , aLeft = last (H.ann name : map H.ann pats)
+ , aRight = H.ann rhs
+ , aRightLead = length "= "
+ }
+
+
+--------------------------------------------------------------------------------
step :: Int -> Step
step maxColumns = makeStep "Cases" $ \ls (module', _) ->
- let module'' = fmap H.srcInfoSpan module' in
+ let module'' = fmap H.srcInfoSpan module'
+ changes search toAlign =
+ [ change_
+ | case_ <- search module''
+ , aligns <- maybeToList (mapM toAlign case_)
+ , change_ <- align maxColumns aligns
+ ] in
+
applyChanges
- [ change_
- | case_ <- cases module''
- , aligns <- maybeToList (mapM altToAlignable case_)
- , change_ <- align maxColumns aligns
- ]
+ (changes cases altToAlignable ++ changes tlpats matchToAlignable)
ls