proteome-0.3.17.0: lib/Proteome/Add.hs
{-# LANGUAGE RecordWildCards #-}
module Proteome.Add(
proAdd,
proAddCmd,
)
where
import Control.Monad (when)
import Control.Lens (over)
import Data.List.Utils (split)
import Neovim (nvim_err_writeln', CommandArguments(CommandArguments, bang))
import qualified Ribosome.Control.Ribo as Ribo (modify)
import Proteome.Data.AddOptions (AddOptions(AddOptions))
import Proteome.Data.Env (_projects)
import Proteome.Data.Project (
meta,
ProjectMetadata(VirtualProject),
ProjectName(ProjectName),
ProjectType(ProjectType),
)
import Proteome.Project.Activate (selectProject)
import Proteome.Project.Resolve (resolveProjectFromConfig)
import Proteome.Data.Proteome (Proteome)
add :: ProjectName -> Maybe ProjectType -> Bool -> Proteome ()
add name tpe activate = do
project <- resolveProjectFromConfig Nothing name tpe
case meta project of
VirtualProject _ -> return ()
_ -> Ribo.modify $ over _projects (\p -> p ++ [project])
when activate $ selectProject (-1)
proAdd :: AddOptions -> Proteome ()
proAdd (AddOptions name tpe activate) =
add name (Just tpe) activate
addFromName :: ProjectName -> Bool -> Proteome ()
addFromName name = add name Nothing
proAddCmd :: CommandArguments -> String -> Proteome ()
proAddCmd args spec =
case split "/" spec of
[tpe, name] -> add (ProjectName name) (Just (ProjectType tpe)) activate
[name] -> addFromName (ProjectName name) activate
_ -> nvim_err_writeln' $ "invalid project spec: " ++ spec
where
activate = case args of
CommandArguments { bang = Just True, .. } -> True
_ -> False