{-# 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.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.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