git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Merge pull request #1155 from purescript/glob

Fix #1152, support globs in file paths

commitc4b2e41ecfa8cdd99d4823188a9ffa65a89d8845 authorPhil Freeman <paf31@cantab.net> dateThu 11 Jun 2015, 08:27 (11 years ago) parentfedeee28e7adc3
6 files changed+36−19
hierarchy/Main.hs+9−5 psc-docs/Main.hs+3−1 psc-make/Main.hs+4−1 psc/Main.hs+4−1 psci/PSCi.hs+7−4 purescript.cabal+9−7
hierarchy/Main.hs+9−5
@@ -13,6 +13,8 @@
1313--
1414-----------------------------------------------------------------------------
1515
16+{-# LANGUAGE TupleSections #-}
17+
1618module Main where
1719
1820import Control.Monad (unless)
@@ -24,6 +26,7 @@ import Data.Version (showVersion)
2426import Options.Applicative
2527import System.Directory (createDirectoryIfMissing)
2628import System.FilePath ((</>))
29+import System.FilePath.Glob (glob)
2730import System.Exit (exitFailure, exitSuccess)
2831import System.IO (hPutStr, stderr)
2932
@@ -50,13 +53,14 @@ instance Ord SuperMap where
5053runModuleName :: P.ModuleName -> String
5154runModuleName (P.ModuleName pns) = intercalate "_" (P.runProperName `map` pns)
5255
53−readInput :: FilePath -> IO (Either P.MultipleErrors [P.Module])
54−readInput filename = do
55− content <- readFile filename
56− return $ map snd <$> P.parseModulesFromFiles id [(filename, content)]
56+readInput :: [FilePath] -> IO (Either P.MultipleErrors [P.Module])
57+readInput paths = do
58+ content <- mapM (\path -> (path, ) <$> readFile path) paths
59+ return $ map snd <$> P.parseModulesFromFiles id content
5760
5861compile :: HierarchyOptions -> IO ()
59−compile (HierarchyOptions input mOutput) = do
62+compile (HierarchyOptions inputGlob mOutput) = do
63+ input <- glob inputGlob
6064 modules <- readInput input
6165 case modules of
6266 Left errs -> hPutStr stderr (P.prettyPrintMultipleErrors False errs) >> exitFailure
psc-docs/Main.hs+3−1
@@ -34,6 +34,7 @@ import System.Exit (exitFailure)
3434import System.IO (hPutStrLn, stderr)
3535import System.Directory (createDirectoryIfMissing)
3636import System.FilePath (takeDirectory)
37+import System.FilePath.Glob (glob)
3738
3839import Etags
3940import Ctags
@@ -61,7 +62,8 @@ data PSCDocsOptions = PSCDocsOptions
6162 deriving (Show)
6263
6364docgen :: PSCDocsOptions -> IO ()
64−docgen (PSCDocsOptions fmt input output) =
65+docgen (PSCDocsOptions fmt inputGlob output) = do
66+ input <- concat <$> mapM glob inputGlob
6567 case fmt of
6668 Etags -> dumpTags input dumpEtags
6769 Ctags -> dumpTags input dumpCtags
psc-make/Main.hs+4−1
@@ -31,6 +31,7 @@ import Options.Applicative as Opts
3131
3232import System.Exit (exitSuccess, exitFailure)
3333import System.IO (hPutStrLn, stderr)
34+import System.FilePath.Glob (glob)
3435
3536import qualified Language.PureScript as P
3637import qualified Paths_purescript as Paths
@@ -50,8 +51,10 @@ data InputOptions = InputOptions
5051 }
5152
5253compile :: PSCMakeOptions -> IO ()
53−compile (PSCMakeOptions input inputForeign outputDir opts usePrefix) = do
54+compile (PSCMakeOptions inputGlob inputForeignGlob outputDir opts usePrefix) = do
55+ input <- concat <$> mapM glob inputGlob
5456 moduleFiles <- readInput (InputOptions input)
57+ inputForeign <- concat <$> mapM glob inputForeignGlob
5558 foreignFiles <- forM inputForeign (\inFile -> (inFile,) <$> readFile inFile)
5659 case runWriterT (parseInputs moduleFiles foreignFiles) of
5760 Left errs -> do
psc/Main.hs+4−1
@@ -34,6 +34,7 @@ import Options.Applicative as Opts
3434import System.Directory (createDirectoryIfMissing)
3535import System.Exit (exitSuccess, exitFailure)
3636import System.FilePath (takeDirectory)
37+import System.FilePath.Glob (glob)
3738import System.IO (hPutStrLn, stderr)
3839
3940import qualified Data.Map as M
@@ -66,9 +67,11 @@ runPSC :: P.Options P.Compile -> PSC a -> Either P.MultipleErrors (a, P.Multiple
6667runPSC opts rwe = runWriterT (runReaderT rwe opts)
6768
6869compile :: PSCOptions -> IO ()
69−compile (PSCOptions input inputForeign opts stdin output externs usePrefix) = do
70+compile (PSCOptions inputGlob inputForeignGlob opts stdin output externs usePrefix) = do
7071 let prefix = ["Generated by psc version " ++ showVersion Paths.version | usePrefix]
72+ input <- concat <$> mapM glob inputGlob
7173 moduleFiles <- readInput (InputOptions stdin input)
74+ inputForeign <- concat <$> mapM glob inputForeignGlob
7275 foreignFiles <- forM inputForeign (\inFile -> (inFile,) <$> readFile inFile)
7376 case runWriterT (parseInputs moduleFiles foreignFiles) of
7477 Left errs -> do
psci/PSCi.hs+7−4
@@ -43,6 +43,7 @@ import System.Console.Haskeline
4343import System.Directory (doesFileExist, findExecutable, getHomeDirectory, getCurrentDirectory)
4444import System.Exit
4545import System.FilePath (pathSeparator, (</>), isPathSeparator)
46+import System.FilePath.Glob (glob)
4647import System.Process (readProcessWithExitCode)
4748
4849import qualified Language.PureScript as P
@@ -490,19 +491,21 @@ consoleIsDefined = any ((== P.ModuleName (map P.ProperName [ "Control", "Monad",
490491loop :: PSCiOptions -> IO ()
491492loop PSCiOptions{..} = do
492493 config <- loadUserConfig
493− modulesOrFirstError <- loadAllModules psciInputFile
494+ inputFiles <- concat <$> mapM glob psciInputFile
495+ foreignFiles <- concat <$> mapM glob psciForeignInputFiles
496+ modulesOrFirstError <- loadAllModules inputFiles
494497 case modulesOrFirstError of
495498 Left errs -> putStrLn (P.prettyPrintMultipleErrors False errs) >> exitFailure
496499 Right modules -> do
497500 historyFilename <- getHistoryFilename
498501 let settings = defaultSettings { historyFile = Just historyFilename }
499502 foreignsOrError <- runMake $ do
500− foreignFiles <- forM psciForeignInputFiles (\inFile -> (inFile,) <$> makeIO (const (P.SimpleErrorWrapper $ P.CannotReadFile inFile)) (readFile inFile))
501− P.parseForeignModulesFromFiles foreignFiles
503+ foreignFilesContent <- forM foreignFiles (\inFile -> (inFile,) <$> makeIO (const (P.SimpleErrorWrapper $ P.CannotReadFile inFile)) (readFile inFile))
504+ P.parseForeignModulesFromFiles foreignFilesContent
502505 case foreignsOrError of
503506 Left errs -> putStrLn (P.prettyPrintMultipleErrors False errs) >> exitFailure
504507 Right foreigns ->
505− flip evalStateT (PSCiState psciInputFile [] modules foreigns [] psciInputNodeFlags) . runInputT (setComplete completion settings) $ do
508+ flip evalStateT (PSCiState inputFiles [] modules foreigns [] psciInputNodeFlags) . runInputT (setComplete completion settings) $ do
506509 outputStrLn prologueMessage
507510 traverse_ (mapM_ (runPSCI . handleCommand)) config
508511 modules' <- lift $ gets psciLoadedModules
purescript.cabal+9−7
@@ -147,7 +147,7 @@ library
147147executable psc
148148 build-depends: base >=4 && <5, containers -any, directory -any, filepath -any,
149149 mtl -any, optparse-applicative >= 0.10.0, parsec -any, purescript -any,
150− transformers -any
150+ transformers -any, Glob >= 0.7 && < 0.8
151151 main-is: Main.hs
152152 buildable: True
153153 hs-source-dirs: psc
@@ -157,7 +157,7 @@ executable psc
157157executable psc-make
158158 build-depends: base >=4 && <5, containers -any, directory -any, filepath -any,
159159 mtl -any, optparse-applicative >= 0.10.0, parsec -any, purescript -any,
160− time -any, transformers -any, transformers-compat -any
160+ time -any, transformers -any, transformers-compat -any, Glob >= 0.7 && < 0.8
161161 main-is: Main.hs
162162 buildable: True
163163 hs-source-dirs: psc-make
@@ -168,7 +168,7 @@ executable psci
168168 build-depends: base >=4 && <5, containers -any, directory -any, filepath -any,
169169 mtl -any, optparse-applicative >= 0.10.0, parsec -any,
170170 haskeline >= 0.7.0.0, purescript -any, transformers -any,
171− transformers-compat -any, process -any, time -any
171+ transformers-compat -any, process -any, time -any, Glob -any
172172
173173 main-is: Main.hs
174174 buildable: True
@@ -185,8 +185,8 @@ executable psci
185185executable psc-docs
186186 build-depends: base >=4 && <5, purescript -any,
187187 optparse-applicative >= 0.10.0, process -any, mtl -any,
188− split -any, ansi-wl-pprint -any, directory -any, filepath
189− -any
188+ split -any, ansi-wl-pprint -any, directory -any,
189+ filepath -any, Glob -any
190190 main-is: Main.hs
191191 buildable: True
192192 hs-source-dirs: psc-docs
@@ -213,7 +213,8 @@ executable psc-publish
213213
214214executable psc-hierarchy
215215 build-depends: base >=4 && <5, purescript -any, optparse-applicative >= 0.10.0,
216− process -any, mtl -any, parsec -any, filepath -any, directory -any
216+ process -any, mtl -any, parsec -any, filepath -any, directory -any,
217+ Glob -any
217218 main-is: Main.hs
218219 buildable: True
219220 hs-source-dirs: hierarchy
@@ -233,7 +234,8 @@ test-suite psci-tests
233234 build-depends: base >=4 && <5, containers -any, directory -any, filepath -any,
234235 mtl -any, optparse-applicative >= 0.10.0, parsec -any,
235236 haskeline >= 0.7.0.0, purescript -any, transformers -any,
236− transformers-compat -any, process -any, HUnit -any, time -any
237+ transformers-compat -any, process -any, HUnit -any, time -any,
238+ Glob -any
237239 type: exitcode-stdio-1.0
238240 main-is: Main.hs
239241 buildable: True