summaryrefslogtreecommitdiffhomepage
path: root/lib
diff options
context:
space:
mode:
authorAkos Marton <makos999@protonmail.ch>2020-02-15 12:24:11 +0100
committerGitHub <noreply@github.com>2020-02-15 12:24:11 +0100
commitab85690eb35dec46c8eb80a930337249f34b9f80 (patch)
tree59a73cef8a09bcd28269a58a50642bd8ca533382 /lib
parent41dcda2a34b5f12f3fa91480bfe2aaeb4afa90e5 (diff)
downloadstylish-haskell-ab85690eb35dec46c8eb80a930337249f34b9f80.tar.gz
Add -r flag to recursively find Haskell files
Diffstat (limited to 'lib')
-rw-r--r--lib/Language/Haskell/Stylish.hs42
1 files changed, 41 insertions, 1 deletions
diff --git a/lib/Language/Haskell/Stylish.hs b/lib/Language/Haskell/Stylish.hs
index 4f6aa1f..c50db4d 100644
--- a/lib/Language/Haskell/Stylish.hs
+++ b/lib/Language/Haskell/Stylish.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE LambdaCase #-}
--------------------------------------------------------------------------------
module Language.Haskell.Stylish
( -- * Run
@@ -10,6 +11,7 @@ module Language.Haskell.Stylish
, trailingWhitespace
, unicodeSyntax
-- ** Helpers
+ , findHaskellFiles
, stepName
-- * Config
, module Language.Haskell.Stylish.Config
@@ -25,7 +27,11 @@ module Language.Haskell.Stylish
--------------------------------------------------------------------------------
import Control.Monad (foldM)
-
+import System.Directory (doesDirectoryExist,
+ doesFileExist,
+ listDirectory)
+import System.FilePath (takeExtension,
+ (</>))
--------------------------------------------------------------------------------
import Language.Haskell.Stylish.Config
@@ -103,3 +109,37 @@ format :: Maybe ConfigPath -> Maybe FilePath -> String -> IO (Either String Line
format maybeConfigPath maybeFilePath contents = do
conf <- loadConfig (makeVerbose True) (fmap unConfigPath maybeConfigPath)
pure $ runSteps (configLanguageExtensions conf) maybeFilePath (configSteps conf) $ lines contents
+
+
+--------------------------------------------------------------------------------
+-- | Searches Haskell source files in any given folder recursively.
+findHaskellFiles :: Bool -> [FilePath] -> IO [FilePath]
+findHaskellFiles v fs = mapM (findFilesR v) fs >>= return . concat
+
+
+--------------------------------------------------------------------------------
+findFilesR :: Bool -> FilePath -> IO [FilePath]
+findFilesR _ [] = return []
+findFilesR v path = do
+ doesFileExist path >>= \case
+ True -> return [path]
+ _ -> doesDirectoryExist path >>= \case
+ True -> findFilesRecursive path >>=
+ return . filter (\x -> takeExtension x == ".hs")
+ False -> do
+ makeVerbose v ("Input folder does not exists: " <> path)
+ findFilesR v []
+ where
+ findFilesRecursive :: FilePath -> IO [FilePath]
+ findFilesRecursive = listDirectoryFiles findFilesRecursive
+
+ listDirectoryFiles :: (FilePath -> IO [FilePath])
+ -> FilePath -> IO [FilePath]
+ listDirectoryFiles go topdir = do
+ ps <- listDirectory topdir >>=
+ mapM (\x -> do
+ let dir = topdir </> x
+ doesDirectoryExist dir >>= \case
+ True -> go dir
+ False -> return [dir])
+ return $ concat ps