From 1bb9662003179fb01a75c5f1290982ef68c7ee20 Mon Sep 17 00:00:00 2001 From: Jasper Van der Jeugt Date: Thu, 7 Feb 2013 17:21:04 +0100 Subject: Be careful with multiline CPP Closes #31 --- src/Language/Haskell/Stylish/Parse.hs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/Language/Haskell/Stylish/Parse.hs b/src/Language/Haskell/Stylish/Parse.hs index 580e0fd..36422d1 100644 --- a/src/Language/Haskell/Stylish/Parse.hs +++ b/src/Language/Haskell/Stylish/Parse.hs @@ -6,7 +6,7 @@ module Language.Haskell.Stylish.Parse -------------------------------------------------------------------------------- import Control.Monad.Error (throwError) -import Data.Maybe (fromMaybe) +import Data.Maybe (fromMaybe, listToMaybe) import qualified Language.Haskell.Exts.Annotated as H @@ -18,10 +18,13 @@ import Language.Haskell.Stylish.Step -------------------------------------------------------------------------------- -- | Filter out lines which use CPP macros unCpp :: String -> String -unCpp = unlines . map unCpp' . lines +unCpp = unlines . go False . lines where - unCpp' ('#' : _) = "" - unCpp' xs = xs + go _ [] = [] + go isMultiline (x : xs) = + let isCpp = isMultiline || listToMaybe x == Just '#' + nextMultiline = isCpp && not (null x) && last x == '\\' + in (if isCpp then "" else x) : go nextMultiline xs -------------------------------------------------------------------------------- -- cgit v1.2.3