@@ -1,16 +1,19 @@
1−{-# LANGUAGE RecordWildCards #-}
1+{-# LANGUAGE RecordWildCards, TupleSections #-}
22
33module Main where
44
55import 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)
710
8−import Data.List (sort)
11+import Data.List (isSuffixOf, sort)
912
1013import System.Exit (exitFailure)
1114import System.Console.Haskeline
1215import System.FilePath ((</>))
13−import System.Directory (getCurrentDirectory)
16+import System.Directory (getCurrentDirectory, getDirectoryContents)
1417
1518import Test.HUnit
1619
@@ -104,7 +107,8 @@ completionTestData =
104107 , ("Control.Monad.ST.new", ["Control.Monad.ST.newSTRef"])
105108 ]
106109 where
107− allModuleNames = [ "Control.Monad.Eff"
110+ allModuleNames = [ "Assert"
111+ , "Control.Monad.Eff"
108112 , "Control.Monad.ST"
109113 , "Data.Function"
110114 , "Debug.Trace"
@@ -127,13 +131,18 @@ runCM act = do
127131getPSCiState :: IO PSCiState
128132getPSCiState = do
129133 cwd <- getCurrentDirectory
130− modulesOrFirstError <- loadAllModules [ cwd </> "tests" </> "prelude.purs" ]
134+ let preludeDir = cwd </> "tests" </> "prelude"
135+ jsDir = preludeDir </> "js"
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
131140 case modulesOrFirstError of
132141 Left err ->
133142 print err >> exitFailure
134143 Right modules ->
135144 let imports = controlMonadSTasST : defaultImports
136− in return (PSCiState [] imports modules [] [])
145+ in return (PSCiState [] imports modules foreigns [] [])
137146
138147controlMonadSTasST :: ImportedModule
139148controlMonadSTasST = (s "Control.Monad.ST", P.Implicit, Just (s "ST"))