packages feed

shift 0.1.0.0 → 0.2.0.0

raw patch · 3 files changed

+52/−58 lines, 3 filesdep +binarydep −aesonPVP ok

version bump matches the API change (PVP)

Dependencies added: binary

Dependencies removed: aeson

API changes (from Hackage documentation)

- Teleport: instance Data.Aeson.Types.FromJSON.FromJSON Teleport.WarpData
- Teleport: instance Data.Aeson.Types.FromJSON.FromJSON Teleport.WarpPoint
- Teleport: instance Data.Aeson.Types.ToJSON.ToJSON Teleport.WarpData
- Teleport: instance Data.Aeson.Types.ToJSON.ToJSON Teleport.WarpPoint
+ Teleport: instance Data.Binary.Class.Binary Teleport.WarpData
+ Teleport: instance Data.Binary.Class.Binary Teleport.WarpPoint

Files

shift.cabal view
@@ -1,7 +1,7 @@ name:                shift-version:             0.1.0.0+version:             0.2.0.0 synopsis:            A tool to quickly switch between directories-description:         Please see README.md for details+description:         This is a command-line tool to "teleport" between directories homepage:            https://github.com/vmchale/teleport#readme license:             MIT license-file:        LICENSE@@ -26,7 +26,7 @@                      , optparse-applicative                      , system-filepath                      , text-                     , aeson+                     , binary                      , composition                      , lens                      , bytestring
src/Teleport.hs view
@@ -1,30 +1,32 @@+{-# LANGUAGE DeriveAnyClass    #-}+{-# LANGUAGE DeriveGeneric     #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards   #-} {-# LANGUAGE TemplateHaskell   #-}  module Teleport where -import Control.Monad-import Data.Maybe-import Data.List-import Prelude hiding (FilePath)-import qualified Data.Text as T-import Data.Text.Encoding-import Options.Applicative-import Data.Monoid-import Filesystem.Path.CurrentOS as P-import Turtle hiding (header, find)-import Data.Aeson as A-import qualified Data.ByteString.Lazy as BSL-import System.Console.ANSI-import Filesystem as P-import System.Environment -import Paths_shift-import Data.Version-import Data.Default-import Control.Lens hiding (argument)-import Data.Composition-import GHC.Generics+import           Control.Lens              hiding (argument)+import           Control.Monad+import           Data.Binary+import qualified Data.ByteString.Lazy      as BSL+import           Data.Composition+import           Data.Default+import           Data.List+import           Data.Maybe+import           Data.Monoid+import qualified Data.Text                 as T+import           Data.Text.Encoding+import           Data.Version+import           Filesystem                as P+import qualified Filesystem.Path.CurrentOS as P+import           GHC.Generics+import           Options.Applicative+import           Paths_shift+import           Prelude                   hiding (FilePath)+import           System.Console.ANSI+import           System.Environment+import           Turtle                    hiding (find, header)  -- | options for 'warp add' data AddOptions = AddOptions { folderPath :: Maybe String,@@ -36,26 +38,21 @@ -- | options for 'warp goto' newtype GotoOptions = GotoOptions { gotoname :: String } --- | data type for command +-- | data type for command data Command = Display | Add AddOptions | Remove RemoveOptions | Goto GotoOptions  -- an abstract entity representing a point to which we can warp to data WarpPoint = WarpPoint { _name          :: String,-                             _absFolderPath :: String } deriving (Default, Generic)+                             _absFolderPath :: String } deriving (Default, Generic, Binary) --- the main data that is loaded from JSON -newtype WarpData = WarpData { _warpPoints :: [WarpPoint] } deriving (Default, Generic)+-- the main data that is loaded from JSON+newtype WarpData = WarpData { _warpPoints :: [WarpPoint] } deriving (Default, Generic, Binary)  makeLenses ''WarpData makeLenses ''WarpPoint -instance FromJSON WarpPoint where-instance ToJSON WarpPoint where-instance FromJSON WarpData where-instance ToJSON WarpData where- exec :: IO ()-exec = execParser opts >>= run +exec = execParser opts >>= run     where versionInfo = infoOption ("teleport version: " ++ showVersion version) (short 'v' <> long "version" <> help "Show version")           opts        = info (helper <*> versionInfo <*> parseCommand)                             (fullDesc@@ -63,16 +60,13 @@                             <> header "Warp: move around your filesystem")  dieJSONParseError :: FilePath -> String -> IO WarpData-dieJSONParseError path err = die . T.pack . foldr (<>) mempty $ -    ["parse error in: " -    , show path +dieJSONParseError path err = die . T.pack . foldr (<>) mempty $+    ["parse error in: "+    , show path     , "\nerror:      \n" <> err ]  decodeWarpData :: FilePath -> IO WarpData-decodeWarpData path = (fmap eitherDecode' . BSL.readFile . encodeString) path >>= \x ->-    case x of-        Left err -> dieJSONParseError path err-        Right json -> pure json+decodeWarpData = fmap decode . BSL.readFile . P.encodeString  loadWarpData :: FilePath -> IO WarpData loadWarpData jsonFilePath = testfile jsonFilePath >>= \exists ->@@ -81,16 +75,16 @@  saveWarpData :: FilePath -> WarpData -> IO () saveWarpData jsonFilePath warpData = touch jsonFilePath >>-    let dataBytestring = A.encode warpData in-        BSL.writeFile (encodeString jsonFilePath) dataBytestring+    let dataBytestring = encode warpData in+        BSL.writeFile (P.encodeString jsonFilePath) dataBytestring  warpDataPath :: IO FilePath-warpDataPath = home >>= \homeFolder -> +warpDataPath = home >>= \homeFolder ->     pure (homeFolder </> ".warpdata")  readFolderPath :: String -> ReadM FilePath readFolderPath = f . fromText . T.pack-    where f path = if valid path then pure path else readerError ("invalid path: " <> show path)+    where f path = if P.valid path then pure path else readerError ("invalid path: " <> show path)  warpnameParser :: Parser String warpnameParser = argument str@@ -114,14 +108,14 @@ parseGotoCommand = Goto . GotoOptions <$> warpnameParser  parseCommand :: Parser Command-parseCommand = hsubparser +parseCommand = hsubparser     (command "add" (info parseAddCommand (progDesc "add a warp point"))     <> (command "list" (info (pure Display) (progDesc "list all warp points")))     <> (command "del" (info parseRemoveCommand (progDesc "delete a warp point")))     <> (command "to" (info parseGotoCommand (progDesc "go to a created warp point"))))  setErrorColor :: IO ()-setErrorColor = setSGR [SetColor Foreground Vivid Red]    +setErrorColor = setSGR [SetColor Foreground Vivid Red]  colorWhen :: IO () -> IO () colorWhen act = do@@ -136,7 +130,7 @@     putStr $ "\t" <> _absFolderPath warpPoint <> "\n"  folderNotFoundError :: FilePath -> IO ()-folderNotFoundError path = setErrorColor >> +folderNotFoundError path = setErrorColor >>     (die . T.pack $ ("unable to find folder: " ++ show path))  needFolderNotFileError :: FilePath -> IO ()@@ -149,7 +143,7 @@     , flip unless (folderNotFoundError path) =<< testdir path ]  dieWarpPointExists :: WarpPoint -> IO ()-dieWarpPointExists warpPoint  = foldr (>>) (pure def) +dieWarpPointExists warpPoint  = foldr (>>) (pure def)     [ setErrorColor     , putStrLn $ "warp point " <> _name warpPoint <> " already exists:\n"     , warpPointPrint warpPoint ]@@ -165,16 +159,16 @@         Just warpPoint -> dieWarpPointExists warpPoint         Nothing -> do                         putStrLn "creating warp point: \n"-                        let newWarpPoint = def & name .~ addname & absFolderPath .~ encodeString _absFolderPath+                        let newWarpPoint = def & name .~ addname & absFolderPath .~ P.encodeString _absFolderPath                         warpPointPrint newWarpPoint                         let newWarpData = over warpPoints (newWarpPoint:) warpData                         flip saveWarpData newWarpData =<< warpDataPath-    + runDisplay :: IO () runDisplay = do     warpData <- loadWarpData =<< warpDataPath     forM_ (_warpPoints warpData) warpPointPrint-    + dieWarpPointNotFound :: String ->IO () dieWarpPointNotFound w = setErrorColor >> (die . T.pack)     (w <> " warp point not found")@@ -186,7 +180,7 @@     let wantedWarpPoint = find ((/= removename) . _name) (_warpPoints warp)     case wantedWarpPoint of         Nothing -> dieWarpPointNotFound removename-        Just _ -> saveWarpData warpPath +        Just _ -> saveWarpData warpPath             (over warpPoints (filter ((/= removename) . _name)) warp)  runGoto :: GotoOptions -> IO ()@@ -201,9 +195,9 @@                              cd . fromString $ _absFolderPath warpPoint                              setWorkingDirectory . fromString . _absFolderPath $ warpPoint                              exit (ExitFailure 2)-      + run :: Command -> IO ()-run (Add addOpt) = runAdd addOpt-run Display = runDisplay+run (Add addOpt)       = runAdd addOpt+run Display            = runDisplay run (Remove removeOpt) = runRemove removeOpt-run (Goto gotoOpt) = runGoto gotoOpt+run (Goto gotoOpt)     = runGoto gotoOpt
stack.yaml view
@@ -1,4 +1,4 @@-resolver: lts-8.13+resolver: lts-8.23 packages: - '.' extra-deps: []