--------------------------------------------------------------------------------
module Language.Haskell.Stylish.Step.TrailingWhitespace
    ( step
    ) where


--------------------------------------------------------------------------------
import           Data.Char                     (isSpace)


--------------------------------------------------------------------------------
import           Language.Haskell.Stylish.Step


--------------------------------------------------------------------------------
dropTrailingWhitespace :: String -> String
dropTrailingWhitespace :: String -> String
dropTrailingWhitespace = String -> String
forall a. [a] -> [a]
reverse (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (Char -> Bool) -> String -> String
forall a. (a -> Bool) -> [a] -> [a]
dropWhile Char -> Bool
isSpace (String -> String) -> (String -> String) -> String -> String
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> String
forall a. [a] -> [a]
reverse


--------------------------------------------------------------------------------
step :: Step
step :: Step
step = String -> (Lines -> Module -> Lines) -> Step
makeStep String
"TrailingWhitespace" ((Lines -> Module -> Lines) -> Step)
-> (Lines -> Module -> Lines) -> Step
forall a b. (a -> b) -> a -> b
$ \Lines
ls Module
_ -> (String -> String) -> Lines -> Lines
forall a b. (a -> b) -> [a] -> [b]
map String -> String
dropTrailingWhitespace' Lines
ls
  where
    dropTrailingWhitespace' :: String -> String
dropTrailingWhitespace' String
l = case String
l of
      -- Preserve page breaks
      String
"\12" -> String
l
      String
_     -> String -> String
dropTrailingWhitespace String
l