proteome-0.3.7.0: lib/Proteome/Init.hs
module Proteome.Init(
initialize,
proteomeStage2,
proteomeStage4,
proteomePoll,
proteomeStage1,
) where
import Data.Default.Class (Default(def))
import System.Directory (getCurrentDirectory, makeAbsolute)
import System.FilePath (takeFileName, takeDirectory)
import System.Log.Logger (updateGlobalLogger, setLevel, Priority(ERROR))
import Control.Monad.IO.Class (MonadIO, liftIO)
import Neovim (Neovim)
import Ribosome.Config.Setting (settingE, updateSetting)
import Ribosome.Data.Ribo (Ribo)
import qualified Ribosome.Data.Ribo as Ribo (inspect)
import Ribosome.Data.Ribosome (Ribosome(Ribosome), newInternalTVar)
import Ribosome.Internal.IO (retypeNeovim)
import Proteome.Data.Env (Env(Env))
import qualified Proteome.Data.Env as Env (mainProject)
import Proteome.Data.Proteome
import Proteome.Data.Project (
Project(meta),
ProjectName(..),
ProjectRoot(..),
ProjectType(..),
ProjectMetadata(DirProject),
)
import Proteome.Project.Resolve (resolveProjectFromConfig)
import Proteome.Config (readConfig)
import Proteome.PersistBuffers (loadBuffers)
import Proteome.Log
import qualified Proteome.Settings as S
pathData :: MonadIO m => Either String FilePath -> m (ProjectRoot, ProjectName, ProjectType)
pathData override = do
cwd <- liftIO $ either (const getCurrentDirectory) pure override
absMainDir <- liftIO $ makeAbsolute cwd
return (
ProjectRoot absMainDir,
ProjectName $ takeFileName absMainDir,
ProjectType $ (takeFileName . takeDirectory) absMainDir
)
mainProject :: Ribo e Project
mainProject = do
mainDir <- settingE S.mainProjectDir
(root, name, tpe) <- pathData mainDir
resolveProjectFromConfig (Just root) name (Just tpe)
loadPersistedBuffers :: Project -> Neovim e ()
loadPersistedBuffers _ = return ()
updateMainType :: Maybe ProjectType -> Ribo e ()
updateMainType (Just tpe) = updateSetting S.mainType tpe
updateMainType Nothing = return ()
setProjectVars :: ProjectMetadata -> Ribo e ()
setProjectVars (DirProject name _ tpe) = do
updateSetting S.mainName name
updateMainType tpe
setProjectVars _ = return ()
initWithMain :: Project -> Ribo e Env
initWithMain main = do
debugS $ "initializing with main project: " ++ show main
loadPersistedBuffers main
setProjectVars (meta main)
return $ Env main [] def
initialize' :: Ribo e Env
initialize' = do
main <- mainProject
initWithMain main
initialize :: Neovim e Env
initialize = do
liftIO $ updateGlobalLogger "Neovim.Plugin" (setLevel ERROR)
internal <- newInternalTVar
retypeNeovim (Ribosome "proteome" internal) initialize'
proteomeStage1 :: Proteome ()
proteomeStage1 = loadBuffers
proteomeStage2 :: Proteome ()
proteomeStage2 = do
main <- Ribo.inspect Env.mainProject
readConfig "project" main
proteomeStage4 :: Proteome ()
proteomeStage4 = do
main <- Ribo.inspect Env.mainProject
readConfig "project_after" main
proteomePoll :: Neovim e Bool
proteomePoll = return True