{-# LANGUAGE NoImplicitPrelude #-} module Stack.Options.NewParser where import qualified Data.Map.Strict as M import Options.Applicative import Stack.Init import Stack.New import Stack.Options.GlobalParser import Stack.Prelude import Stack.Types.PackageName import Stack.Types.TemplateName -- | Parser for @stack new@. newOptsParser :: Parser (NewOpts,InitOpts) newOptsParser = (,) <$> newOpts <*> initOptsParser where newOpts = NewOpts <$> packageNameArgument (metavar "PACKAGE_NAME" <> help "A valid package name.") <*> switch (long "bare" <> help "Do not create a subdirectory for the project") <*> optional (templateNameArgument (metavar "TEMPLATE_NAME" <> help "Name of a template - can take the form\ \ [[service:]username/]template with optional service name\ \ (github, gitlab, or bitbucket) \ \ and username for the service; or, a local filename such as\ \ foo.hsfiles or ~/foo; or, a full URL such as\ \ https://example.com/foo.hsfiles.")) <*> fmap M.fromList (many (templateParamArgument (short 'p' <> long "param" <> metavar "KEY:VALUE" <> help "Parameter for the template in the format key:value")))