git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
[psc-ide] Speeds up rebuilding by x2
a518d56Christoph Hegemann
src/Language/PureScript/Ide/Logging.hs+4
@@ -4,6 +4,7 @@ module Language.PureScript.Ide.Logging
4 ( runLogger
4 ( runLogger
5 , logPerf
5 , logPerf
6 , displayTimeSpec
6 , displayTimeSpec
7+ , labelTimespec
7 ) where
8 ) where
8
9
9import Protolude
10import Protolude
@@ -24,6 +25,9 @@ runLogger logLevel' =
24 LogDebug -> not (logLevel == LevelOther "perf")
25 LogDebug -> not (logLevel == LevelOther "perf")
25 LogPerf -> logLevel == LevelOther "perf")
26 LogPerf -> logLevel == LevelOther "perf")
26
27
28+labelTimespec :: Text -> TimeSpec -> Text
29+labelTimespec label duration = label <> ": " <> displayTimeSpec duration
30+
27logPerf :: (MonadIO m, MonadLogger m) => (TimeSpec -> Text) -> m t -> m t
31logPerf :: (MonadIO m, MonadLogger m) => (TimeSpec -> Text) -> m t -> m t
28logPerf format f = do
32logPerf format f = do
29 start <- liftIO (getTime Monotonic)
33 start <- liftIO (getTime Monotonic)
src/Language/PureScript/Ide/Rebuild.hs+9−5
@@ -15,6 +15,7 @@ import qualified Data.Set as S
15import qualified Language.PureScript as P
15import qualified Language.PureScript as P
16import Language.PureScript.Errors.JSON
16import Language.PureScript.Errors.JSON
17import Language.PureScript.Ide.Error
17import Language.PureScript.Ide.Error
18+import Language.PureScript.Ide.Logging
18import Language.PureScript.Ide.State
19import Language.PureScript.Ide.State
19import Language.PureScript.Ide.Types
20import Language.PureScript.Ide.Types
20import System.IO.UTF8 (readUTF8FileT)
21import System.IO.UTF8 (readUTF8FileT)
@@ -51,7 +52,7 @@ rebuildFile path = do
51
52
52 -- Externs files must be sorted ahead of time, so that they get applied
53 -- Externs files must be sorted ahead of time, so that they get applied
53 -- correctly to the 'Environment'.
54 -- correctly to the 'Environment'.
54− externs <- sortExterns m =<< getExternFiles
55+ externs <- logPerf (labelTimespec "Sorting externs") (sortExterns m =<< getExternFiles)
55
56
56 outputDirectory <- confOutputPath . ideConfiguration <$> ask
57 outputDirectory <- confOutputPath . ideConfiguration <$> ask
57
58
@@ -62,25 +63,28 @@ rebuildFile path = do
62
63
63 let makeEnv = MakeActionsEnv outputDirectory filePathMap foreigns False
64 let makeEnv = MakeActionsEnv outputDirectory filePathMap foreigns False
64 -- Rebuild the single module using the cached externs
65 -- Rebuild the single module using the cached externs
66+ (result, warnings) <- logPerf (labelTimespec "Rebuilding Module") $
65− (result, warnings) <- liftIO
67+ liftIO
66 . P.runMake P.defaultOptions
68 . P.runMake P.defaultOptions
67 . P.rebuildModule (buildMakeActions
69 . P.rebuildModule (buildMakeActions
68 >>= shushProgress $ makeEnv) externs $ m
70 >>= shushProgress $ makeEnv) externs $ m
69 case result of
71 case result of
70 Left errors -> throwError (RebuildError (toJSONErrors False P.Error errors))
72 Left errors -> throwError (RebuildError (toJSONErrors False P.Error errors))
71 Right _ -> do
73 Right _ -> do
74+ env <- ask
75+ let ll = confLogLevel (ideConfiguration env)
72− rebuildModuleOpen makeEnv externs m
76+ _ <- liftIO (async (runLogger ll (runReaderT (rebuildModuleOpen makeEnv externs m) env)))
73 pure (RebuildSuccess (toJSONErrors False P.Warning warnings))
77 pure (RebuildSuccess (toJSONErrors False P.Warning warnings))
74
78
75-- | Rebuilds a module but opens up its export list first and stores the result
79-- | Rebuilds a module but opens up its export list first and stores the result
76-- inside the rebuild cache
80-- inside the rebuild cache
77rebuildModuleOpen
81rebuildModuleOpen
78− :: (Ide m, MonadLogger m, MonadError PscIdeError m)
82+ :: (Ide m, MonadLogger m)
79 => MakeActionsEnv
83 => MakeActionsEnv
80 -> [P.ExternsFile]
84 -> [P.ExternsFile]
81 -> P.Module
85 -> P.Module
82 -> m ()
86 -> m ()
83−rebuildModuleOpen makeEnv externs m = do
87+rebuildModuleOpen makeEnv externs m = void $ runExceptT $ do
84 (openResult, _) <- liftIO
88 (openResult, _) <- liftIO
85 . P.runMake P.defaultOptions
89 . P.runMake P.defaultOptions
86 . P.rebuildModule (buildMakeActions
90 . P.rebuildModule (buildMakeActions