Skip to content

Commit c4b2e41

Browse files
committed
Merge pull request purescript#1155 from purescript/glob
Fix purescript#1152, support globs in file paths
2 parents fedeee2 + 8e7adc3 commit c4b2e41

File tree

6 files changed

+36
-19
lines changed

6 files changed

+36
-19
lines changed

hierarchy/Main.hs

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@
1313
--
1414
-----------------------------------------------------------------------------
1515

16+
{-# LANGUAGE TupleSections #-}
17+
1618
module Main where
1719

1820
import Control.Monad (unless)
@@ -24,6 +26,7 @@ import Data.Version (showVersion)
2426
import Options.Applicative
2527
import System.Directory (createDirectoryIfMissing)
2628
import System.FilePath ((</>))
29+
import System.FilePath.Glob (glob)
2730
import System.Exit (exitFailure, exitSuccess)
2831
import System.IO (hPutStr, stderr)
2932

@@ -50,13 +53,14 @@ instance Ord SuperMap where
5053
runModuleName :: P.ModuleName -> String
5154
runModuleName (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

5861
compile :: 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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import System.Exit (exitFailure)
3434
import System.IO (hPutStrLn, stderr)
3535
import System.Directory (createDirectoryIfMissing)
3636
import System.FilePath (takeDirectory)
37+
import System.FilePath.Glob (glob)
3738

3839
import Etags
3940
import Ctags
@@ -61,7 +62,8 @@ data PSCDocsOptions = PSCDocsOptions
6162
deriving (Show)
6263

6364
docgen :: 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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import Options.Applicative as Opts
3131

3232
import System.Exit (exitSuccess, exitFailure)
3333
import System.IO (hPutStrLn, stderr)
34+
import System.FilePath.Glob (glob)
3435

3536
import qualified Language.PureScript as P
3637
import qualified Paths_purescript as Paths
@@ -50,8 +51,10 @@ data InputOptions = InputOptions
5051
}
5152

5253
compile :: 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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import Options.Applicative as Opts
3434
import System.Directory (createDirectoryIfMissing)
3535
import System.Exit (exitSuccess, exitFailure)
3636
import System.FilePath (takeDirectory)
37+
import System.FilePath.Glob (glob)
3738
import System.IO (hPutStrLn, stderr)
3839

3940
import qualified Data.Map as M
@@ -66,9 +67,11 @@ runPSC :: P.Options P.Compile -> PSC a -> Either P.MultipleErrors (a, P.Multiple
6667
runPSC opts rwe = runWriterT (runReaderT rwe opts)
6768

6869
compile :: 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

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ import System.Console.Haskeline
4343
import System.Directory (doesFileExist, findExecutable, getHomeDirectory, getCurrentDirectory)
4444
import System.Exit
4545
import System.FilePath (pathSeparator, (</>), isPathSeparator)
46+
import System.FilePath.Glob (glob)
4647
import System.Process (readProcessWithExitCode)
4748

4849
import qualified Language.PureScript as P
@@ -490,19 +491,21 @@ consoleIsDefined = any ((== P.ModuleName (map P.ProperName [ "Control", "Monad",
490491
loop :: PSCiOptions -> IO ()
491492
loop 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

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ library
147147
executable 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
157157
executable 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
185185
executable 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

214214
executable 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

0 commit comments

Comments
 (0)