git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
Merge pull request #1155 from purescript/glob
c4b2e41Phil Freeman
hierarchy/Main.hs+9−5
@@ -13,6 +13,8 @@
13--
13--
14-----------------------------------------------------------------------------
14-----------------------------------------------------------------------------
15
15
16+{-# LANGUAGE TupleSections #-}
17+
16module Main where
18module Main where
17
19
18import Control.Monad (unless)
20import Control.Monad (unless)
@@ -24,6 +26,7 @@ import Data.Version (showVersion)
24import Options.Applicative
26import Options.Applicative
25import System.Directory (createDirectoryIfMissing)
27import System.Directory (createDirectoryIfMissing)
26import System.FilePath ((</>))
28import System.FilePath ((</>))
29+import System.FilePath.Glob (glob)
27import System.Exit (exitFailure, exitSuccess)
30import System.Exit (exitFailure, exitSuccess)
28import System.IO (hPutStr, stderr)
31import System.IO (hPutStr, stderr)
29
32
@@ -50,13 +53,14 @@ instance Ord SuperMap where
50runModuleName :: P.ModuleName -> String
53runModuleName :: P.ModuleName -> String
51runModuleName (P.ModuleName pns) = intercalate "_" (P.runProperName `map` pns)
54runModuleName (P.ModuleName pns) = intercalate "_" (P.runProperName `map` pns)
52
55
53−readInput :: FilePath -> IO (Either P.MultipleErrors [P.Module])
56+readInput :: [FilePath] -> IO (Either P.MultipleErrors [P.Module])
54−readInput filename = do
57+readInput paths = do
55− content <- readFile filename
58+ content <- mapM (\path -> (path, ) <$> readFile path) paths
56− return $ map snd <$> P.parseModulesFromFiles id [(filename, content)]
59+ return $ map snd <$> P.parseModulesFromFiles id content
57
60
58compile :: HierarchyOptions -> IO ()
61compile :: HierarchyOptions -> IO ()
59−compile (HierarchyOptions input mOutput) = do
62+compile (HierarchyOptions inputGlob mOutput) = do
63+ input <- glob inputGlob
60 modules <- readInput input
64 modules <- readInput input
61 case modules of
65 case modules of
62 Left errs -> hPutStr stderr (P.prettyPrintMultipleErrors False errs) >> exitFailure
66 Left errs -> hPutStr stderr (P.prettyPrintMultipleErrors False errs) >> exitFailure
psc-docs/Main.hs+3−1
@@ -34,6 +34,7 @@ import System.Exit (exitFailure)
34import System.IO (hPutStrLn, stderr)
34import System.IO (hPutStrLn, stderr)
35import System.Directory (createDirectoryIfMissing)
35import System.Directory (createDirectoryIfMissing)
36import System.FilePath (takeDirectory)
36import System.FilePath (takeDirectory)
37+import System.FilePath.Glob (glob)
37
38
38import Etags
39import Etags
39import Ctags
40import Ctags
@@ -61,7 +62,8 @@ data PSCDocsOptions = PSCDocsOptions
61 deriving (Show)
62 deriving (Show)
62
63
63docgen :: PSCDocsOptions -> IO ()
64docgen :: PSCDocsOptions -> IO ()
64−docgen (PSCDocsOptions fmt input output) =
65+docgen (PSCDocsOptions fmt inputGlob output) = do
66+ input <- concat <$> mapM glob inputGlob
65 case fmt of
67 case fmt of
66 Etags -> dumpTags input dumpEtags
68 Etags -> dumpTags input dumpEtags
67 Ctags -> dumpTags input dumpCtags
69 Ctags -> dumpTags input dumpCtags
psc-make/Main.hs+4−1
@@ -31,6 +31,7 @@ import Options.Applicative as Opts
31
31
32import System.Exit (exitSuccess, exitFailure)
32import System.Exit (exitSuccess, exitFailure)
33import System.IO (hPutStrLn, stderr)
33import System.IO (hPutStrLn, stderr)
34+import System.FilePath.Glob (glob)
34
35
35import qualified Language.PureScript as P
36import qualified Language.PureScript as P
36import qualified Paths_purescript as Paths
37import qualified Paths_purescript as Paths
@@ -50,8 +51,10 @@ data InputOptions = InputOptions
50 }
51 }
51
52
52compile :: PSCMakeOptions -> IO ()
53compile :: 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
54 moduleFiles <- readInput (InputOptions input)
56 moduleFiles <- readInput (InputOptions input)
57+ inputForeign <- concat <$> mapM glob inputForeignGlob
55 foreignFiles <- forM inputForeign (\inFile -> (inFile,) <$> readFile inFile)
58 foreignFiles <- forM inputForeign (\inFile -> (inFile,) <$> readFile inFile)
56 case runWriterT (parseInputs moduleFiles foreignFiles) of
59 case runWriterT (parseInputs moduleFiles foreignFiles) of
57 Left errs -> do
60 Left errs -> do
psc/Main.hs+4−1
@@ -34,6 +34,7 @@ import Options.Applicative as Opts
34import System.Directory (createDirectoryIfMissing)
34import System.Directory (createDirectoryIfMissing)
35import System.Exit (exitSuccess, exitFailure)
35import System.Exit (exitSuccess, exitFailure)
36import System.FilePath (takeDirectory)
36import System.FilePath (takeDirectory)
37+import System.FilePath.Glob (glob)
37import System.IO (hPutStrLn, stderr)
38import System.IO (hPutStrLn, stderr)
38
39
39import qualified Data.Map as M
40import qualified Data.Map as M
@@ -66,9 +67,11 @@ runPSC :: P.Options P.Compile -> PSC a -> Either P.MultipleErrors (a, P.Multiple
66runPSC opts rwe = runWriterT (runReaderT rwe opts)
67runPSC opts rwe = runWriterT (runReaderT rwe opts)
67
68
68compile :: PSCOptions -> IO ()
69compile :: PSCOptions -> IO ()
69−compile (PSCOptions input inputForeign opts stdin output externs usePrefix) = do
70+compile (PSCOptions inputGlob inputForeignGlob opts stdin output externs usePrefix) = do
70 let prefix = ["Generated by psc version " ++ showVersion Paths.version | usePrefix]
71 let prefix = ["Generated by psc version " ++ showVersion Paths.version | usePrefix]
72+ input <- concat <$> mapM glob inputGlob
71 moduleFiles <- readInput (InputOptions stdin input)
73 moduleFiles <- readInput (InputOptions stdin input)
74+ inputForeign <- concat <$> mapM glob inputForeignGlob
72 foreignFiles <- forM inputForeign (\inFile -> (inFile,) <$> readFile inFile)
75 foreignFiles <- forM inputForeign (\inFile -> (inFile,) <$> readFile inFile)
73 case runWriterT (parseInputs moduleFiles foreignFiles) of
76 case runWriterT (parseInputs moduleFiles foreignFiles) of
74 Left errs -> do
77 Left errs -> do
psci/PSCi.hs+7−4
@@ -43,6 +43,7 @@ import System.Console.Haskeline
43import System.Directory (doesFileExist, findExecutable, getHomeDirectory, getCurrentDirectory)
43import System.Directory (doesFileExist, findExecutable, getHomeDirectory, getCurrentDirectory)
44import System.Exit
44import System.Exit
45import System.FilePath (pathSeparator, (</>), isPathSeparator)
45import System.FilePath (pathSeparator, (</>), isPathSeparator)
46+import System.FilePath.Glob (glob)
46import System.Process (readProcessWithExitCode)
47import System.Process (readProcessWithExitCode)
47
48
48import qualified Language.PureScript as P
49import qualified Language.PureScript as P
@@ -490,19 +491,21 @@ consoleIsDefined = any ((== P.ModuleName (map P.ProperName [ "Control", "Monad",
490loop :: PSCiOptions -> IO ()
491loop :: PSCiOptions -> IO ()
491loop PSCiOptions{..} = do
492loop PSCiOptions{..} = do
492 config <- loadUserConfig
493 config <- loadUserConfig
494+ inputFiles <- concat <$> mapM glob psciInputFile
495+ foreignFiles <- concat <$> mapM glob psciForeignInputFiles
493− modulesOrFirstError <- loadAllModules psciInputFile
496+ modulesOrFirstError <- loadAllModules inputFiles
494 case modulesOrFirstError of
497 case modulesOrFirstError of
495 Left errs -> putStrLn (P.prettyPrintMultipleErrors False errs) >> exitFailure
498 Left errs -> putStrLn (P.prettyPrintMultipleErrors False errs) >> exitFailure
496 Right modules -> do
499 Right modules -> do
497 historyFilename <- getHistoryFilename
500 historyFilename <- getHistoryFilename
498 let settings = defaultSettings { historyFile = Just historyFilename }
501 let settings = defaultSettings { historyFile = Just historyFilename }
499 foreignsOrError <- runMake $ do
502 foreignsOrError <- runMake $ do
500− foreignFiles <- forM psciForeignInputFiles (\inFile -> (inFile,) <$> makeIO (const (P.SimpleErrorWrapper $ P.CannotReadFile inFile)) (readFile inFile))
503+ foreignFilesContent <- forM foreignFiles (\inFile -> (inFile,) <$> makeIO (const (P.SimpleErrorWrapper $ P.CannotReadFile inFile)) (readFile inFile))
501− P.parseForeignModulesFromFiles foreignFiles
504+ P.parseForeignModulesFromFiles foreignFilesContent
502 case foreignsOrError of
505 case foreignsOrError of
503 Left errs -> putStrLn (P.prettyPrintMultipleErrors False errs) >> exitFailure
506 Left errs -> putStrLn (P.prettyPrintMultipleErrors False errs) >> exitFailure
504 Right foreigns ->
507 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
506 outputStrLn prologueMessage
509 outputStrLn prologueMessage
507 traverse_ (mapM_ (runPSCI . handleCommand)) config
510 traverse_ (mapM_ (runPSCI . handleCommand)) config
508 modules' <- lift $ gets psciLoadedModules
511 modules' <- lift $ gets psciLoadedModules
purescript.cabal+9−7
@@ -147,7 +147,7 @@ library
147executable psc
147executable psc
148 build-depends: base >=4 && <5, containers -any, directory -any, filepath -any,
148 build-depends: base >=4 && <5, containers -any, directory -any, filepath -any,
149 mtl -any, optparse-applicative >= 0.10.0, parsec -any, purescript -any,
149 mtl -any, optparse-applicative >= 0.10.0, parsec -any, purescript -any,
150− transformers -any
150+ transformers -any, Glob >= 0.7 && < 0.8
151 main-is: Main.hs
151 main-is: Main.hs
152 buildable: True
152 buildable: True
153 hs-source-dirs: psc
153 hs-source-dirs: psc
@@ -157,7 +157,7 @@ executable psc
157executable psc-make
157executable psc-make
158 build-depends: base >=4 && <5, containers -any, directory -any, filepath -any,
158 build-depends: base >=4 && <5, containers -any, directory -any, filepath -any,
159 mtl -any, optparse-applicative >= 0.10.0, parsec -any, purescript -any,
159 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
161 main-is: Main.hs
161 main-is: Main.hs
162 buildable: True
162 buildable: True
163 hs-source-dirs: psc-make
163 hs-source-dirs: psc-make
@@ -168,7 +168,7 @@ executable psci
168 build-depends: base >=4 && <5, containers -any, directory -any, filepath -any,
168 build-depends: base >=4 && <5, containers -any, directory -any, filepath -any,
169 mtl -any, optparse-applicative >= 0.10.0, parsec -any,
169 mtl -any, optparse-applicative >= 0.10.0, parsec -any,
170 haskeline >= 0.7.0.0, purescript -any, transformers -any,
170 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
172
172
173 main-is: Main.hs
173 main-is: Main.hs
174 buildable: True
174 buildable: True
@@ -185,8 +185,8 @@ executable psci
185executable psc-docs
185executable psc-docs
186 build-depends: base >=4 && <5, purescript -any,
186 build-depends: base >=4 && <5, purescript -any,
187 optparse-applicative >= 0.10.0, process -any, mtl -any,
187 optparse-applicative >= 0.10.0, process -any, mtl -any,
188− split -any, ansi-wl-pprint -any, directory -any, filepath
188+ split -any, ansi-wl-pprint -any, directory -any,
189− -any
189+ filepath -any, Glob -any
190 main-is: Main.hs
190 main-is: Main.hs
191 buildable: True
191 buildable: True
192 hs-source-dirs: psc-docs
192 hs-source-dirs: psc-docs
@@ -213,7 +213,8 @@ executable psc-publish
213
213
214executable psc-hierarchy
214executable psc-hierarchy
215 build-depends: base >=4 && <5, purescript -any, optparse-applicative >= 0.10.0,
215 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
217 main-is: Main.hs
218 main-is: Main.hs
218 buildable: True
219 buildable: True
219 hs-source-dirs: hierarchy
220 hs-source-dirs: hierarchy
@@ -233,7 +234,8 @@ test-suite psci-tests
233 build-depends: base >=4 && <5, containers -any, directory -any, filepath -any,
234 build-depends: base >=4 && <5, containers -any, directory -any, filepath -any,
234 mtl -any, optparse-applicative >= 0.10.0, parsec -any,
235 mtl -any, optparse-applicative >= 0.10.0, parsec -any,
235 haskeline >= 0.7.0.0, purescript -any, transformers -any,
236 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
237 type: exitcode-stdio-1.0
239 type: exitcode-stdio-1.0
238 main-is: Main.hs
240 main-is: Main.hs
239 buildable: True
241 buildable: True