{-|
Module : Cmd.New
Description : CLI for the `pp new` command
Copyright : (c) 2017 Patrick Champion
License : see LICENSE file
Maintainer : chlablak@gmail.com
Stability : provisional
Portability : portable
-}
module Cmd.New
( commandArgs
, dispatch
) where
import Args
import Control.Monad (when)
import Data.Semigroup ((<>))
import qualified Log
import Options.Applicative
import qualified Project
import System.Directory
import System.IO
-- |Command arguments
commandArgs :: Parser CommandArgs
commandArgs = NewCmd <$> newArgs
where
newArgs = NewArgs
<$> strOption ( long "name"
<> short 'n'
<> metavar "NAME"
<> help "Project name" )
-- |Command dispatch
dispatch :: Args -> Log.Logger
dispatch (Args _ (NewCmd args)) = do
Log.pushTag "new"
let name = projectName args
Log.info $ "create project into directory: " ++ name
Log.io $ createDirectory name
Log.io $ writeFile (name ++ "/grammar.ebnf") "(* Here comes the grammar *)"
Log.io $ writeFile (name ++ "/.gitignore") ".pp-work/"
let p = Project.Project name "0.0.0" "A short description" ["grammar.ebnf"] [] True []
Project.set p
-- End
Log.popTag
return ()