From cea81d53690e6c0afe3bda92a2d1805e9de707be Mon Sep 17 00:00:00 2001 From: Lennart Spitzner Date: Mon, 6 Mar 2017 16:52:05 +0100 Subject: [PATCH] Add indentation to the paragraphs inserted in patterns Ugly, but fixes #6. Ugly still better than non-valid-haskell result. --- src-literatetests/tests.blt | 17 +++++++++-------- .../Haskell/Brittany/Layouters/Pattern.hs | 11 +++++++++-- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src-literatetests/tests.blt b/src-literatetests/tests.blt index a49e1dc..461de8b 100644 --- a/src-literatetests/tests.blt +++ b/src-literatetests/tests.blt @@ -702,6 +702,15 @@ showPackageDetailedInfo pkginfo = isValidPosition position | validX && validY = Just position | otherwise = Nothing +#test issue-6-pattern-linebreak-validity +## this is ugly, but at least syntactically valid. +foo = Reflex.runSpiderHost $ ReflexHost.hostApp $ do + (inputEvent :: Reflex.Event Reflex.Spider String, inputFire :: String + -> IO Bool ) <- + ReflexHost.newExternalEvent + liftIO . forkIO . forever $ getLine >>= inputFire + ReflexHost.performEvent_ $ fmap (liftIO . putStrLn) inputEvent + ############################################################################### ############################################################################### @@ -738,11 +747,3 @@ isValidPosition position | validX && validY = Just position ## where ## role = stringProperty "WM_WINDOW_ROLE" -#test linebreak -#pending - -foo = Reflex.runSpiderHost $ ReflexHost.hostApp $ do - (inputEvent :: Reflex.Event Reflex.Spider String, inputFire :: String -> IO Bool) - <- ReflexHost.newExternalEvent - liftIO . forkIO . forever $ getLine >>= inputFire - ReflexHost.performEvent_ $ fmap (liftIO . putStrLn) inputEvent diff --git a/src/Language/Haskell/Brittany/Layouters/Pattern.hs b/src/Language/Haskell/Brittany/Layouters/Pattern.hs index 599ac72..4ab35ca 100644 --- a/src/Language/Haskell/Brittany/Layouters/Pattern.hs +++ b/src/Language/Haskell/Brittany/Layouters/Pattern.hs @@ -109,10 +109,17 @@ layoutPat lpat@(L _ pat) = docWrapNode lpat $ case pat of case Seq.viewr patDocs of Seq.EmptyR -> error "cannot happen ljoiuxoasdcoviuasd" xR Seq.:> xN -> do - xN' <- docSeq + xN' <- -- at the moment, we don't support splitting patterns into + -- multiple lines. but we cannot enforce pasting everything + -- into one line either, because the type signature will ignore + -- this if we overflow sufficiently. + -- In order to prevent syntactically invalid results in such + -- cases, we need the AddBaseY here. + -- This can all change when patterns get multiline support. + docAddBaseY BrIndentRegular $ docSeq [ appSep $ return xN , appSep $ docLit $ Text.pack "::" - , tyDoc + , docForceSingleline $ tyDoc ] return $ xR Seq.|> xN' ListPat elems _ _ ->