packages feed

hi 0.0.1 → 0.0.2

raw patch · 7 files changed

+106/−15 lines, 7 filesdep +parsecPVP ok

version bump matches the API change (PVP)

Dependencies added: parsec

API changes (from Hackage documentation)

+ Distribution.Hi.Config: parseConfig :: String -> IO [Arg]
+ Distribution.Hi.Types: NoConfigurationFile :: Arg
+ Distribution.Hi.Types: RunWithNoConfigurationFile :: Mode

Files

hi.cabal view
@@ -1,5 +1,5 @@ name:                hi-version:             0.0.1+version:             0.0.2 synopsis:            Generate scaffold for cabal project license:             BSD3 license-file:        LICENSE@@ -53,6 +53,7 @@   exposed-modules:       Distribution.Hi       Distribution.Hi.Compiler+      Distribution.Hi.Config       Distribution.Hi.Context       Distribution.Hi.Directory       Distribution.Hi.FilePath@@ -71,6 +72,7 @@       , bytestring       , directory       , filepath+      , parsec       , process       , split       , template   == 0.2.*@@ -91,6 +93,7 @@       , bytestring       , directory       , filepath+      , parsec       , process       , split       , template   == 0.2.*@@ -114,10 +117,12 @@       , bytestring       , directory       , hspec       >= 1.5+      , parsec       , process       , template    == 0.2.*       , temporary       , text+      , time  source-repository head   type:     git
+ src/Distribution/Hi/Config.hs view
@@ -0,0 +1,46 @@+{-# OPTIONS_GHC -fno-warn-unused-do-bind #-}+module Distribution.Hi.Config+    (+      parseConfig+    ) where++import           Control.Applicative   ((<$>), (<*))+import           Data.Maybe            (catMaybes)+import           Distribution.Hi.Types+import           Text.Parsec+import           Text.Parsec.String++sep :: Parser Char+sep = char ':'++name :: Parser String+name = many (oneOf $ ['a'..'z'] ++ ['A'..'Z'])++eol :: Parser Char+eol = newline <|> (eof >> return '\n')++comment :: Parser ()+comment = do+    _ <- char '#' <* manyTill anyChar newline+    return ()++line :: Parser (Maybe (String, String))+line = do+    spaces+    try (comment >> return Nothing) <|> (line' >>= return . Just)+  where+    line' = do+        spaces+        n <- name+        spaces >> sep >> spaces+        v <- many (noneOf "\n")+        eol+        return (n, v)++configFile :: Parser [(String, String)]+configFile = catMaybes <$> many line <* eof++parseConfig :: String -> IO [Arg]+parseConfig x = case parse configFile "ERROR" x of -- TODO Error message+      Left  l  -> error $ show l+      Right xs -> return $ map (uncurry Val) xs
src/Distribution/Hi/Flag.hs view
@@ -14,7 +14,7 @@                                   , author      = lookupAuthor                                   , email       = lookupEmail                                   , repository  = lookupRepository-                                  , year        = lookupRepository+                                  , year        = lookupYear                                   }   where     lookupPackageName = lookup' "packageName"@@ -22,6 +22,7 @@     lookupAuthor      = lookup' "author"     lookupEmail       = lookup' "email"     lookupRepository  = lookup' "repository"+    lookupYear        = lookup' "year"     lookup' label = case lookup label $ [(l, v) | (Val l v) <- args] of                         Just v  -> v                         Nothing -> if label == "repository"
src/Distribution/Hi/Option.hs view
@@ -6,13 +6,16 @@     , getMode     ) where -import           Distribution.Hi.Flag      (extractInitFlags)-import           Distribution.Hi.Types import           Control.Applicative-import           Data.Time.Calendar    (toGregorian)-import           Data.Time.Clock       (getCurrentTime, utctDay)+import           Data.Time.Calendar     (toGregorian)+import           Data.Time.Clock        (getCurrentTime, utctDay)+import           Distribution.Hi.Config (parseConfig)+import           Distribution.Hi.Flag   (extractInitFlags)+import           Distribution.Hi.Types import           System.Console.GetOpt-import           System.Environment    (getArgs)+import           System.Directory       (getHomeDirectory)+import           System.Environment     (getArgs)+import           System.FilePath        (joinPath)  -- | Available options. options :: [OptDescr Arg]@@ -22,20 +25,38 @@     , Option ['a'] ["author"]      (ReqArg (Val "author") "NAME")  "Name of the project's author"     , Option ['e'] ["email"]       (ReqArg (Val "email") "EMAIL")  "Email address of the maintainer"     , Option ['r'] ["repository"]  (ReqArg (Val "repository") "REPOSITORY")  "Template repository(optional)"-    , Option ['v'] ["version"]     (NoArg Version) "show version number"+    , Option ['v'] ["version"]     (NoArg Version) "Show version number"+    , Option []    ["no-configuration-file"] (NoArg NoConfigurationFile) "Run without configuration file"+    , Option []    ["configuration-file"]    (ReqArg (Val "configFile") "CONFIGFILE") "Run with configuration file"     ]  -- | Returns 'InitFlags'. getInitFlags :: IO InitFlags-getInitFlags = extractInitFlags <$> (addYear =<< fst <$> parseArgs <$> getArgs)+getInitFlags = do+    mode <- getMode+    case mode of+      Run                        -> runWithConfigurationFile+      RunWithNoConfigurationFile -> runWithNoConfigurationFile+      _                          -> error "Unexpected run mode"+  where+    runWithNoConfigurationFile = getInitFlagsPure =<< getArgs+    runWithConfigurationFile   = do+        (xs,_) <- parseArgs <$> getArgs+        ys     <- addYear =<< parseConfig =<< readFile =<< getConfigFileName+        return $ extractInitFlags (ys ++ xs) +getInitFlagsPure :: [String] -> IO InitFlags+getInitFlagsPure args = extractInitFlags <$> (addYear . fst . parseArgs $ args)+ -- | Returns 'Mode'. getMode :: IO Mode getMode = do     args <- fst <$> parseArgs <$> getArgs     return $ if any id [True |Version <- args]                then ShowVersion-               else Run+               else if any id [True |NoConfigurationFile <- args]+                      then RunWithNoConfigurationFile+                      else Run  parseArgs :: [String] -> ([Arg], [String]) parseArgs argv =@@ -45,6 +66,23 @@       (_,_,errs ) -> error $ concat errs ++ usageInfo header options   where     header = "Usage: hi [OPTION...]"++defaultConfigFilePath :: IO FilePath+defaultConfigFilePath = do+    h <- getHomeDirectory+    return $ joinPath [h, defaultConfigFileName]++defaultConfigFileName :: FilePath+defaultConfigFileName = ".hirc"++getConfigFileName :: IO FilePath+getConfigFileName = do+    args <- (fst . parseArgs) <$> getArgs+    go args+  where+    go []                       = defaultConfigFilePath+    go ((Val "configFile" p):_) = return p+    go (_:xs)                   = go xs  addYear :: [Arg] -> IO [Arg] addYear args = do
src/Distribution/Hi/Types.hs view
@@ -23,7 +23,7 @@ type Label = String  -- | Arguments.-data Arg = Version | Val Label String deriving(Eq, Show)+data Arg = Version | NoConfigurationFile | Val Label String deriving(Eq, Show)  -- | Run mode.-data Mode = ShowVersion | Run deriving(Eq, Show)+data Mode = ShowVersion | Run | RunWithNoConfigurationFile deriving(Eq, Show)
src/Distribution/Hi/Version.hs view
@@ -4,4 +4,4 @@     ) where  version :: String-version = "0.0.1"+version = "0.0.2"
src/Main.hs view
@@ -9,5 +9,6 @@ main = do     mode <- getMode     case mode of-      ShowVersion -> print version-      Run         -> Hi.cli =<< getInitFlags+      ShowVersion                -> print version+      RunWithNoConfigurationFile -> Hi.cli =<< getInitFlags+      Run                        -> Hi.cli =<< getInitFlags