module Hi.Cli ( run ) where import qualified Hi import Hi.CommandLineOption (CommandLineOption, commandLineOption, defaultRepo) import Hi.Option (buildOption) import Hi.Types import Data.Monoid (mempty) import Data.Version (showVersion) import Options.Applicative import qualified Text.PrettyPrint.ANSI.Leijen as PP import qualified Paths_hi (version) run :: [String] -> IO () run [] = showHelpText (prefs idm) opts run args = parseArgs args >>= Hi.run parseArgs :: [String] -> IO Option parseArgs args = handleParseResult (execParserPure (prefs idm) opts args) >>= buildOption opts :: ParserInfo CommandLineOption opts = info (helper <*> (version <*> commandLineOption)) ( fullDesc <> header "Generate a haskell project based on a template from github." <> footerDoc (Just (PP.text footerText))) footerText :: String footerText = unlines [ "" , "If repository is not provided, it defaults to the repository at" , defaultRepo ++ "." , "" , "Example:" , " hi foo-bar" ] version :: Parser (a -> a) version = infoOption (showVersion Paths_hi.version) ( short 'v' <> long "version" <> help "Print version information" ) showHelpText :: ParserPrefs -> ParserInfo a -> IO () showHelpText pprefs pinfo = handleParseResult . Failure $ parserFailure pprefs pinfo ShowHelpText mempty