proteome-0.3.12.0: lib/Proteome/Add.hs
module Proteome.Add(
proAdd,
proAddCmd,
)
where
import Control.Lens (over)
import Data.List.Utils (split)
import Neovim (nvim_err_writeln', CommandArguments)
import qualified Ribosome.Data.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.Resolve (resolveProjectFromConfig)
import Proteome.Data.Proteome (Proteome)
add :: ProjectName -> Maybe ProjectType -> Proteome ()
add name tpe = do
project <- resolveProjectFromConfig Nothing name tpe
case meta project of
VirtualProject _ -> return ()
_ -> Ribo.modify $ over _projects (\p -> p ++ [project])
proAdd :: AddOptions -> Proteome ()
proAdd (AddOptions name tpe) =
add name (Just tpe)
addFromName :: ProjectName -> Proteome ()
addFromName name = add name Nothing
proAddCmd :: CommandArguments -> String -> Proteome ()
proAddCmd _ spec =
case split "/" spec of
[tpe, name] -> add (ProjectName name) (Just (ProjectType tpe))
[name] -> addFromName (ProjectName name)
_ -> nvim_err_writeln' $ "invalid project spec: " ++ spec