@@ -14,6 +14,7 @@ module Language.PureScript.Make
14 , ProgressMessage(..), renderProgressMessage
14 , ProgressMessage(..), renderProgressMessage
15 , MakeActions(..)
15 , MakeActions(..)
16 , Externs()
16 , Externs()
19 -- * Implementation of Make API using files on disk
20 -- * Implementation of Make API using files on disk
@@ -147,6 +148,28 @@ data RebuildPolicy
147 -- | Always rebuild this module
148 -- | Always rebuild this module
148 | RebuildAlways deriving (Show, Read, Eq, Ord)
149 | RebuildAlways deriving (Show, Read, Eq, Ord)
151+-- | Rebuild a single module
152+rebuildModule :: forall m. (Monad m, MonadBaseControl IO m, MonadReader Options m, MonadError MultipleErrors m, MonadWriter MultipleErrors m)
157+rebuildModule MakeActions{..} externs m@(Module _ _ moduleName _ _) = do
158+ progress $ CompilingModule moduleName
159+ let env = foldl' (flip applyExternsFileToEnvironment) initEnvironment externs
161+ ((checked@(Module ss coms _ elaborated exps), env'), nextVar) <- runSupplyT 0 $ do
162+ [desugared] <- desugar externs [m]
163+ runCheck' env $ typeCheckModule desugared
164+ checkExhaustiveModule env' checked
165+ regrouped <- createBindingGroups moduleName . collapseBindingGroups $ elaborated
166+ let mod' = Module ss coms moduleName regrouped exps
167+ corefn = CF.moduleToCoreFn env' mod'
168+ [renamed] = renameInModules [corefn]
169+ exts = moduleToExternsFile mod' env'
170+ evalSupplyT nextVar . codegen renamed env' . BU8.toString . B.toStrict . encode $ exts
151-- Compiles in "make" mode, compiling each module separately to a js files and an externs file
174-- Compiles in "make" mode, compiling each module separately to a js files and an externs file
@@ -157,7 +180,7 @@ make :: forall m. (Monad m, MonadBaseControl IO m, MonadReader Options m, MonadE
157 => MakeActions m
180 => MakeActions m
158 -> [Module]
181 -> [Module]
159 -> m Environment
182 -> m Environment
160−make MakeActions{..} ms = do
183+make ma@MakeActions{..} ms = do
161 requirePath <- asks optionsRequirePath
184 requirePath <- asks optionsRequirePath
162 when (isJust requirePath) $ tell $ errorMessage DeprecatedRequirePath
185 when (isJust requirePath) $ tell $ errorMessage DeprecatedRequirePath
@@ -221,21 +244,7 @@ make MakeActions{..} ms = do
221 _ -> True
244 _ -> True
223 let rebuild = do
246 let rebuild = do
224− (exts, warnings) <- listen $ do
247+ (exts, warnings) <- listen $ rebuildModule ma externs m
225− progress $ CompilingModule moduleName
226− let env = foldl' (flip applyExternsFileToEnvironment) initEnvironment externs
228− ((checked@(Module ss coms _ elaborated exps), env'), nextVar) <- runSupplyT 0 $ do
229− [desugared] <- desugar externs [m]
230− runCheck' env $ typeCheckModule desugared
231− checkExhaustiveModule env' checked
232− regrouped <- createBindingGroups moduleName . collapseBindingGroups $ elaborated
233− let mod' = Module ss coms moduleName regrouped exps
234− corefn = CF.moduleToCoreFn env' mod'
235− [renamed] = renameInModules [corefn]
236− exts = moduleToExternsFile mod' env'
237− evalSupplyT nextVar . codegen renamed env' . BU8.toString . B.toStrict . encode $ exts
239 markComplete (Just (warnings, exts)) Nothing
248 markComplete (Just (warnings, exts)) Nothing
241 if shouldRebuild
250 if shouldRebuild