File tree Expand file tree Collapse file tree 3 files changed +9
-5
lines changed
Expand file tree Collapse file tree 3 files changed +9
-5
lines changed Original file line number Diff line number Diff line change @@ -20,6 +20,7 @@ module Language.PureScript.Ide
2020
2121import Protolude hiding (moduleName )
2222
23+ import Control.Concurrent.Async.Lifted (mapConcurrently_ )
2324import "monad-logger" Control.Monad.Logger (MonadLogger , logWarnN )
2425import Data.Map qualified as Map
2526import Data.Set qualified as Set
@@ -231,15 +232,15 @@ loadModules moduleNames = do
231232 efPaths =
232233 map (\ mn -> oDir </> toS (P. runModuleName mn) </> P. externsFileName) efModules
233234 efiles <- traverse readExternFile efPaths
234- traverse_ insertExterns efiles
235+ mapConcurrently_ insertExterns efiles
235236
236237 -- We parse all source files, log eventual parse failures and insert the
237238 -- successful parses into the state.
238239 (failures, allModules) <-
239240 partitionEithers <$> (parseModulesFromFiles =<< findAllSourceFiles)
240241 unless (null failures) $
241242 logWarnN (" Failed to parse: " <> show failures)
242- traverse_ insertModule allModules
243+ mapConcurrently_ insertModule allModules
243244
244245 pure (TextResult (" Loaded " <> show (length efiles) <> " modules and "
245246 <> show (length allModules) <> " source files." ))
Original file line number Diff line number Diff line change @@ -22,6 +22,8 @@ module Language.PureScript.Ide.SourceFile
2222
2323import Protolude
2424
25+ import Control.Concurrent.Async.Lifted (mapConcurrently )
26+ import Control.Monad.Trans.Control (MonadBaseControl )
2527import Control.Parallel.Strategies (withStrategy , parList , rseq )
2628import Data.Map qualified as Map
2729import Language.PureScript qualified as P
@@ -37,11 +39,11 @@ parseModule path file =
3739 Right m -> Right (path, m)
3840
3941parseModulesFromFiles
40- :: (MonadIO m , MonadError IdeError m )
42+ :: (MonadIO m , MonadBaseControl IO m , MonadError IdeError m )
4143 => [FilePath ]
4244 -> m [Either FilePath (FilePath , P. Module )]
4345parseModulesFromFiles paths = do
44- files <- traverse ideReadFile paths
46+ files <- mapConcurrently ideReadFile paths
4547 pure (inParallel (map (uncurry parseModule) files))
4648 where
4749 inParallel :: [Either e (k , a )] -> [Either e (k , a )]
Original file line number Diff line number Diff line change @@ -10,6 +10,7 @@ import Protolude hiding (moduleName)
1010import Control.Concurrent.STM (TVar )
1111import Control.Lens (Getting , Traversal' , makeLenses )
1212import Control.Monad.Fail (fail )
13+ import Control.Monad.Trans.Control (MonadBaseControl )
1314import Data.Aeson (ToJSON , FromJSON , (.=) )
1415import Data.Aeson qualified as Aeson
1516import Data.IORef (IORef )
@@ -174,7 +175,7 @@ data IdeEnvironment =
174175 , ideCacheDbTimestamp :: IORef (Maybe UTCTime )
175176 }
176177
177- type Ide m = (MonadIO m , MonadReader IdeEnvironment m )
178+ type Ide m = (MonadIO m , MonadBaseControl IO m , MonadReader IdeEnvironment m )
178179
179180data IdeState = IdeState
180181 { ideFileState :: IdeFileState
You can’t perform that action at this time.
0 commit comments