@@ -1,16 +1,19 @@
1−{-# LANGUAGE RecordWildCards #-}
1+{-# LANGUAGE RecordWildCards, TupleSections #-}
3module Main where
3module Main where
5import Control.Monad.Trans.State.Strict (runStateT)
5import Control.Monad.Trans.State.Strict (runStateT)
6−import Control.Monad (when)
6+import Control.Monad (when, forM)
7+import Control.Applicative
8+import Control.Monad.Writer (runWriterT)
9+import Control.Monad.Except (runExceptT)
8−import Data.List (sort)
11+import Data.List (isSuffixOf, sort)
10import System.Exit (exitFailure)
13import System.Exit (exitFailure)
11import System.Console.Haskeline
14import System.Console.Haskeline
12import System.FilePath ((</>))
15import System.FilePath ((</>))
13−import System.Directory (getCurrentDirectory)
16+import System.Directory (getCurrentDirectory, getDirectoryContents)
15import Test.HUnit
18import Test.HUnit
@@ -104,7 +107,8 @@ completionTestData =
104 , ("Control.Monad.ST.new", ["Control.Monad.ST.newSTRef"])
107 , ("Control.Monad.ST.new", ["Control.Monad.ST.newSTRef"])
110+ allModuleNames = [ "Assert"
107− allModuleNames = [ "Control.Monad.Eff"
111+ , "Control.Monad.Eff"
108 , "Control.Monad.ST"
112 , "Control.Monad.ST"
109 , "Data.Function"
113 , "Data.Function"
110 , "Debug.Trace"
114 , "Debug.Trace"
@@ -127,13 +131,18 @@ runCM act = do
127getPSCiState :: IO PSCiState
131getPSCiState :: IO PSCiState
128getPSCiState = do
132getPSCiState = do
129 cwd <- getCurrentDirectory
133 cwd <- getCurrentDirectory
134+ let preludeDir = cwd </> "tests" </> "prelude"
135+ jsDir = preludeDir </> "js"
130− modulesOrFirstError <- loadAllModules [ cwd </> "tests" </> "prelude.purs" ]
136+ modulesOrFirstError <- loadAllModules [ preludeDir </> "prelude.purs" ]
137+ jsFiles <- map (jsDir </>) . filter (".js" `isSuffixOf`) <$> getDirectoryContents jsDir
138+ foreignFiles <- forM jsFiles (\f -> (f,) <$> readFile f)
139+ Right (foreigns, _) <- runExceptT $ runWriterT $ P.parseForeignModulesFromFiles foreignFiles
131 case modulesOrFirstError of
140 case modulesOrFirstError of
132 Left err ->
141 Left err ->
133 print err >> exitFailure
142 print err >> exitFailure
134 Right modules ->
143 Right modules ->
135 let imports = controlMonadSTasST : defaultImports
144 let imports = controlMonadSTasST : defaultImports
136− in return (PSCiState [] imports modules [] [])
145+ in return (PSCiState [] imports modules foreigns [] [])
138controlMonadSTasST :: ImportedModule
147controlMonadSTasST :: ImportedModule
139controlMonadSTasST = (s "Control.Monad.ST", P.Implicit, Just (s "ST"))
148controlMonadSTasST = (s "Control.Monad.ST", P.Implicit, Just (s "ST"))