chromatin 0.1.0.0 → 0.1.1.0
raw patch · 4 files changed
+106/−6 lines, 4 filesdep +stringsdep ~ribosomePVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependencies added: strings
Dependency ranges changed: ribosome
API changes (from Hackage documentation)
+ Chromatin.Env: logError :: ComponentName -> String -> Chromatin ()
+ Chromatin.Rebuild.Init: initializeRplugins :: [ActiveRplugin] -> Chromatin ()
- Chromatin.Data.Env: _errors :: HasEnv c_anIJ => Lens' c_anIJ Errors
+ Chromatin.Data.Env: _errors :: HasEnv c_anJp => Lens' c_anJp Errors
- Chromatin.Data.Env: _installerChan :: HasEnv c_anIJ => Lens' c_anIJ (Maybe (TBMChan RebuildControl))
+ Chromatin.Data.Env: _installerChan :: HasEnv c_anJp => Lens' c_anJp (Maybe (TBMChan RebuildControl))
- Chromatin.Data.Env: _rplugins :: HasEnv c_anIJ => Lens' c_anIJ [Rplugin]
+ Chromatin.Data.Env: _rplugins :: HasEnv c_anJp => Lens' c_anJp [Rplugin]
Files
- chromatin.cabal +12/−6
- lib/Chromatin/Env.hs +22/−0
- lib/Chromatin/Rebuild.hs +7/−0
- lib/Chromatin/Rebuild/Init.hs +65/−0
chromatin.cabal view
@@ -4,10 +4,10 @@ -- -- see: https://github.com/sol/hpack ----- hash: 560b0a26d65a7e63d7c566631d1a3e83822116adb9958225a42bbb595604065f+-- hash: a5e8b4dcc258cfd22703e2dec094e1a68592dffd9517b92197800e8551b6c940 name: chromatin-version: 0.1.0.0+version: 0.1.1.0 synopsis: neovim package manager description: Please see the README on GitHub at <https://github.com/tek/chromatin-hs> category: Neovim@@ -44,12 +44,14 @@ Chromatin.Data.RunBuiltResult Chromatin.Data.RunExistingResult Chromatin.Diag+ Chromatin.Env Chromatin.Init Chromatin.Log Chromatin.Plugin Chromatin.Rebuild Chromatin.Rebuild.Build Chromatin.Rebuild.Existing+ Chromatin.Rebuild.Init Chromatin.Rebuild.Nonexisting Chromatin.Run Chromatin.Settings@@ -77,10 +79,11 @@ , parsec , prettyprinter , resourcet- , ribosome+ , ribosome >=0.1.2 , split , stm-chans , stm-conduit+ , strings , transformers , typed-process , unliftio@@ -111,10 +114,11 @@ , parsec , prettyprinter , resourcet- , ribosome+ , ribosome >=0.1.2 , split , stm-chans , stm-conduit+ , strings , transformers , typed-process , unliftio@@ -147,10 +151,11 @@ , parsec , prettyprinter , resourcet- , ribosome+ , ribosome >=0.1.2 , split , stm-chans , stm-conduit+ , strings , transformers , typed-process , unliftio@@ -189,10 +194,11 @@ , parsec , prettyprinter , resourcet- , ribosome+ , ribosome >=0.1.2 , split , stm-chans , stm-conduit+ , strings , transformers , typed-process , unliftio
+ lib/Chromatin/Env.hs view
@@ -0,0 +1,22 @@+module Chromatin.Env(+ logError,+) where++import qualified Control.Lens as Lens (over)+import qualified Data.Map.Strict as Map (adjust)+import Ribosome.Api.Exists (epochSeconds)+import qualified Ribosome.Control.Ribo as Ribo (modify)+import Ribosome.Data.Errors (Errors(Errors), Error(Error), ComponentName)+import Chromatin.Data.Chromatin (Chromatin)+import qualified Chromatin.Data.Env as Env (_errors)++storeError :: Int -> ComponentName -> [String] -> Errors -> Errors+storeError time name msg (Errors errors) =+ Errors (Map.adjust (err:) name errors)+ where+ err = Error time msg++logError :: ComponentName -> String -> Chromatin ()+logError name e = do+ time <- epochSeconds+ Ribo.modify $ Lens.over Env._errors (storeError time name [e])
lib/Chromatin/Rebuild.hs view
@@ -18,6 +18,7 @@ import Ribosome.Data.ScratchOptions (defaultScratchOptions) import Ribosome.Internal.IO (forkNeovim) import Ribosome.Scratch (showInScratch)+import Chromatin.Data.ActiveRplugin (ActiveRplugin) import Chromatin.Data.Chromatin (Chromatin) import Chromatin.Data.Env (Env) import qualified Chromatin.Data.Env as Env (installerChan, _installerChan)@@ -31,6 +32,7 @@ import Chromatin.Data.RpluginSource (RpluginSource) import Chromatin.Config (readConfig, analyzeConfigIO, RpluginModification(RpluginNew)) import Chromatin.Rebuild.Existing (handleExisting)+import Chromatin.Rebuild.Init (initializeRplugins) import Chromatin.Rebuild.Nonexisting (handleNonexisting) import qualified Chromatin.Log as Log @@ -56,6 +58,10 @@ extractFailure (RunBuiltResult.PreviousFailure stage (RebuildTask (RpluginName name) _) err) = ("error in stage `" ++ stage ++ "` for plugin `" ++ name ++ "`:") : err +extractSuccess :: RunBuiltResult -> [ActiveRplugin]+extractSuccess (RunBuiltResult.Success arp) = [arp]+extractSuccess _ = []+ controlC :: ConduitT RebuildControl RebuildTask (Ribo (TVar Env)) () controlC = do ctrl <- await@@ -83,6 +89,7 @@ case concatMap extractFailure result of err@(_:_) -> void $ showInScratch err (defaultScratchOptions "chromatin-rebuild-error") _ -> return ()+ initializeRplugins (concatMap extractSuccess result) Log.debug $ "installer terminated: " ++ show result forkRebuilder :: Chromatin (TBMChan RebuildControl)
+ lib/Chromatin/Rebuild/Init.hs view
@@ -0,0 +1,65 @@+module Chromatin.Rebuild.Init(+ initializeRplugins,+) where++import Control.Monad (when)+import Data.Default.Class (def)+import Data.Foldable (traverse_)+import Data.Functor (void)+import Data.Maybe (catMaybes)+import Data.Strings (strCapitalize)+import Neovim (NeovimException, vim_call_function)+import Ribosome.Api.Exists (waitForFunction)+import qualified Ribosome.Api.Exists as Exists (function)+import Chromatin.Data.ActiveRplugin (ActiveRplugin(ActiveRplugin))+import Chromatin.Data.Chromatin (Chromatin)+import Ribosome.Data.Errors (ComponentName(ComponentName))+import Chromatin.Data.Rplugin (Rplugin(Rplugin))+import Chromatin.Data.RpluginName (RpluginName(RpluginName))+import Chromatin.Env (logError)++activeRpluginName :: ActiveRplugin -> String+activeRpluginName (ActiveRplugin _ (Rplugin (RpluginName rpluginName) _)) = rpluginName++pluginRpcName :: String -> ActiveRplugin -> String+pluginRpcName rpcName rplugin =+ strCapitalize (activeRpluginName rplugin) ++ rpcName++waitForPlugin :: ActiveRplugin -> Chromatin (Maybe ActiveRplugin)+waitForPlugin rplugin = do+ result <- waitForFunction (pluginRpcName "Poll" rplugin) def+ return $ case result of+ Right _ -> Just rplugin+ Left _ -> Nothing++stageError :: ActiveRplugin -> Int -> NeovimException -> Chromatin ()+stageError rplugin stage err =+ logError (ComponentName "rebuild-init") $ "error in stage " ++ show stage ++ " of `" ++ name ++ "`" ++ show err+ where+ name = activeRpluginName rplugin++runStage :: ActiveRplugin -> Int -> String -> Chromatin ()+runStage rplugin stage func = do+ result <- void <$> vim_call_function func []+ either (stageError rplugin stage) return result++runStageInRpluginIfExists :: Int -> ActiveRplugin -> Chromatin ()+runStageInRpluginIfExists stage rplugin = do+ exists <- Exists.function func+ when exists $ runStage rplugin stage func+ where+ func = pluginRpcName ("Stage" ++ show stage) rplugin++runStageInRplugins :: [ActiveRplugin] -> Int -> Chromatin ()+runStageInRplugins rplugins stage =+ traverse_ (runStageInRpluginIfExists stage) rplugins++runStages :: [ActiveRplugin] -> Chromatin ()+runStages rplugins =+ traverse_ (runStageInRplugins rplugins) [1..5]++initializeRplugins :: [ActiveRplugin] -> Chromatin ()+initializeRplugins rplugins = do+ results <- traverse waitForPlugin rplugins+ let crmPlugins = catMaybes results+ runStages crmPlugins