From 550aa408eb1310c375d81cb95da69c6351548d79 Mon Sep 17 00:00:00 2001 From: Simon Michael Date: Sat, 26 Jan 2019 15:52:58 -0800 Subject: [PATCH] lib: refactor, add embedFileRelative --- hledger-lib/Hledger/Utils.hs | 16 +++++++++ hledger-lib/hledger-lib.cabal | 11 +++++- hledger-lib/package.yaml | 3 ++ hledger/Hledger/Cli/Commands/Close.hs | 1 - hledger/Hledger/Cli/DocFiles.hs | 51 +++++++++++++-------------- hledger/Hledger/Cli/Utils.hs | 12 ------- hledger/hledger.cabal | 10 +----- hledger/package.yaml | 2 -- 8 files changed, 55 insertions(+), 51 deletions(-) diff --git a/hledger-lib/Hledger/Utils.hs b/hledger-lib/Hledger/Utils.hs index cabeac051..7a0043fce 100644 --- a/hledger-lib/Hledger/Utils.hs +++ b/hledger-lib/Hledger/Utils.hs @@ -37,15 +37,19 @@ where import Control.Monad (liftM, when) -- import Data.Char import Data.Default +import Data.FileEmbed (makeRelativeToProject, embedFile) import Data.List -- import Data.Maybe -- import Data.PPrint +import Data.String.Here (hereFile) import Data.Text (Text) import qualified Data.Text.IO as T import Data.Time.Clock import Data.Time.LocalTime -- import Data.Text (Text) -- import qualified Data.Text as T +import Language.Haskell.TH.Quote (QuasiQuoter(..)) +import Language.Haskell.TH.Syntax (Q, Exp) import System.Directory (getHomeDirectory) import System.FilePath((), isRelative) import System.IO @@ -220,6 +224,18 @@ sequence' ms = do mapM' :: Monad f => (a -> f b) -> [a] -> f [b] mapM' f = sequence' . map f +-- | Like embedFile, but takes a path relative to the package directory. +-- Similar to hereFileRelative ? +embedFileRelative :: FilePath -> Q Exp +embedFileRelative f = makeRelativeToProject f >>= embedFile + +-- | Like hereFile, but takes a path relative to the package directory. +-- Similar to embedFileRelative ? +hereFileRelative :: FilePath -> Q Exp +hereFileRelative f = makeRelativeToProject f >>= hereFileExp + where + QuasiQuoter{quoteExp=hereFileExp} = hereFile + tests_Utils = tests "Utils" [ tests_Text ] diff --git a/hledger-lib/hledger-lib.cabal b/hledger-lib/hledger-lib.cabal index 730414cc1..5439869cf 100644 --- a/hledger-lib/hledger-lib.cabal +++ b/hledger-lib/hledger-lib.cabal @@ -4,7 +4,7 @@ cabal-version: 1.12 -- -- see: https://github.com/sol/hpack -- --- hash: 510ffa940692e35167ef2f17c5eaa61f6510793dc0a902f0daac254da37fee9e +-- hash: 83c1fff5c5877da9fe972db3b0b57fb31687fbdb4476b7ee0136e76a64e2f69e name: hledger-lib version: 1.12.99 @@ -121,8 +121,10 @@ library , directory , easytest , extra + , file-embed >=0.0.10 , filepath , hashtables >=1.2.3.1 + , here , megaparsec >=7.0.0 && <8 , mtl , mtl-compat @@ -134,6 +136,7 @@ library , safe >=0.2 , split >=0.1 , tabular >=0.2 + , template-haskell , text >=1.2 , time >=1.5 , transformers >=0.2 @@ -221,8 +224,10 @@ test-suite doctests , doctest >=0.16 , easytest , extra + , file-embed >=0.0.10 , filepath , hashtables >=1.2.3.1 + , here , megaparsec >=7.0.0 && <8 , mtl , mtl-compat @@ -234,6 +239,7 @@ test-suite doctests , safe >=0.2 , split >=0.1 , tabular >=0.2 + , template-haskell , text >=1.2 , time >=1.5 , transformers >=0.2 @@ -320,8 +326,10 @@ test-suite easytests , directory , easytest , extra + , file-embed >=0.0.10 , filepath , hashtables >=1.2.3.1 + , here , hledger-lib , megaparsec >=7.0.0 && <8 , mtl @@ -334,6 +342,7 @@ test-suite easytests , safe >=0.2 , split >=0.1 , tabular >=0.2 + , template-haskell , text >=1.2 , time >=1.5 , transformers >=0.2 diff --git a/hledger-lib/package.yaml b/hledger-lib/package.yaml index 9c1c8cbfe..66ebe84bc 100644 --- a/hledger-lib/package.yaml +++ b/hledger-lib/package.yaml @@ -55,8 +55,10 @@ dependencies: - deepseq - directory - easytest +- file-embed >=0.0.10 - filepath - hashtables >=1.2.3.1 +- here - megaparsec >=7.0.0 && <8 - mtl - mtl-compat @@ -68,6 +70,7 @@ dependencies: - safe >=0.2 - split >=0.1 - tabular >=0.2 +- template-haskell - text >=1.2 - time >=1.5 - transformers >=0.2 diff --git a/hledger/Hledger/Cli/Commands/Close.hs b/hledger/Hledger/Cli/Commands/Close.hs index 042b8a2a7..7efa3482c 100755 --- a/hledger/Hledger/Cli/Commands/Close.hs +++ b/hledger/Hledger/Cli/Commands/Close.hs @@ -14,7 +14,6 @@ import System.Console.CmdArgs.Explicit as C import Hledger import Hledger.Cli.CliOptions -import Hledger.Cli.Utils (hereFileRelative) closemode = hledgerCommandMode $(hereFileRelative "Hledger/Cli/Commands/Close.md") diff --git a/hledger/Hledger/Cli/DocFiles.hs b/hledger/Hledger/Cli/DocFiles.hs index b3cd2584e..99da3b042 100644 --- a/hledger/Hledger/Cli/DocFiles.hs +++ b/hledger/Hledger/Cli/DocFiles.hs @@ -24,57 +24,56 @@ import Prelude () import "base-compat-batteries" Prelude.Compat import Data.ByteString (ByteString) import qualified Data.ByteString.Char8 as BC -import Data.FileEmbed import Data.String import System.IO import System.IO.Temp import System.Process -import Hledger.Utils (first3, second3, third3) +import Hledger.Utils (first3, second3, third3, embedFileRelative) type Topic = String docFiles :: [(Topic, (ByteString, ByteString, ByteString))] docFiles = [ ("hledger", - ($(makeRelativeToProject "embeddedfiles/hledger.1" >>= embedFile) - ,$(makeRelativeToProject "embeddedfiles/hledger.txt" >>= embedFile) - ,$(makeRelativeToProject "embeddedfiles/hledger.info" >>= embedFile) + ($(embedFileRelative "embeddedfiles/hledger.1") + ,$(embedFileRelative "embeddedfiles/hledger.txt") + ,$(embedFileRelative "embeddedfiles/hledger.info") )) ,("hledger-ui", - ($(makeRelativeToProject "embeddedfiles/hledger-ui.1" >>= embedFile) - ,$(makeRelativeToProject "embeddedfiles/hledger-ui.txt" >>= embedFile) - ,$(makeRelativeToProject "embeddedfiles/hledger-ui.info" >>= embedFile) + ($(embedFileRelative "embeddedfiles/hledger-ui.1") + ,$(embedFileRelative "embeddedfiles/hledger-ui.txt") + ,$(embedFileRelative "embeddedfiles/hledger-ui.info") )) ,("hledger-web", - ($(makeRelativeToProject "embeddedfiles/hledger-web.1" >>= embedFile) - ,$(makeRelativeToProject "embeddedfiles/hledger-web.txt" >>= embedFile) - ,$(makeRelativeToProject "embeddedfiles/hledger-web.info" >>= embedFile) + ($(embedFileRelative "embeddedfiles/hledger-web.1") + ,$(embedFileRelative "embeddedfiles/hledger-web.txt") + ,$(embedFileRelative "embeddedfiles/hledger-web.info") )) ,("hledger-api", - ($(makeRelativeToProject "embeddedfiles/hledger-api.1" >>= embedFile) - ,$(makeRelativeToProject "embeddedfiles/hledger-api.txt" >>= embedFile) - ,$(makeRelativeToProject "embeddedfiles/hledger-api.info" >>= embedFile) + ($(embedFileRelative "embeddedfiles/hledger-api.1") + ,$(embedFileRelative "embeddedfiles/hledger-api.txt") + ,$(embedFileRelative "embeddedfiles/hledger-api.info") )) ,("journal", - ($(makeRelativeToProject "embeddedfiles/hledger_journal.5" >>= embedFile) - ,$(makeRelativeToProject "embeddedfiles/hledger_journal.txt" >>= embedFile) - ,$(makeRelativeToProject "embeddedfiles/hledger_journal.info" >>= embedFile) + ($(embedFileRelative "embeddedfiles/hledger_journal.5") + ,$(embedFileRelative "embeddedfiles/hledger_journal.txt") + ,$(embedFileRelative "embeddedfiles/hledger_journal.info") )) ,("csv", - ($(makeRelativeToProject "embeddedfiles/hledger_csv.5" >>= embedFile) - ,$(makeRelativeToProject "embeddedfiles/hledger_csv.txt" >>= embedFile) - ,$(makeRelativeToProject "embeddedfiles/hledger_csv.info" >>= embedFile) + ($(embedFileRelative "embeddedfiles/hledger_csv.5") + ,$(embedFileRelative "embeddedfiles/hledger_csv.txt") + ,$(embedFileRelative "embeddedfiles/hledger_csv.info") )) ,("timeclock", - ($(makeRelativeToProject "embeddedfiles/hledger_timeclock.5" >>= embedFile) - ,$(makeRelativeToProject "embeddedfiles/hledger_timeclock.txt" >>= embedFile) - ,$(makeRelativeToProject "embeddedfiles/hledger_timeclock.info" >>= embedFile) + ($(embedFileRelative "embeddedfiles/hledger_timeclock.5") + ,$(embedFileRelative "embeddedfiles/hledger_timeclock.txt") + ,$(embedFileRelative "embeddedfiles/hledger_timeclock.info") )) ,("timedot", - ($(makeRelativeToProject "embeddedfiles/hledger_timedot.5" >>= embedFile) - ,$(makeRelativeToProject "embeddedfiles/hledger_timedot.txt" >>= embedFile) - ,$(makeRelativeToProject "embeddedfiles/hledger_timedot.info" >>= embedFile) + ($(embedFileRelative "embeddedfiles/hledger_timedot.5") + ,$(embedFileRelative "embeddedfiles/hledger_timedot.txt") + ,$(embedFileRelative "embeddedfiles/hledger_timedot.info") )) ] diff --git a/hledger/Hledger/Cli/Utils.hs b/hledger/Hledger/Cli/Utils.hs index 86271b032..c13a49c32 100644 --- a/hledger/Hledger/Cli/Utils.hs +++ b/hledger/Hledger/Cli/Utils.hs @@ -9,7 +9,6 @@ Hledger.Utils. module Hledger.Cli.Utils ( - hereFileRelative, withJournalDo, writeOutput, journalTransform, @@ -32,16 +31,12 @@ import Control.Exception as C import Control.Monad import Data.Hashable (hash) -import Data.FileEmbed (makeRelativeToProject) import Data.List import Data.Maybe import qualified Data.Text as T import qualified Data.Text.IO as T -import Data.String.Here (hereFile) import Data.Time (Day, addDays) import Data.Word -import Language.Haskell.TH.Quote (QuasiQuoter(..)) -import Language.Haskell.TH.Syntax (Q, Exp) import Numeric import Safe (readMay) import System.Console.CmdArgs @@ -63,13 +58,6 @@ import Hledger.Read import Hledger.Reports import Hledger.Utils --- XXX hereFile or embedFile ? QQ or TH ? does it matter ? --- | Embed the contents of a file, given a path relative to the current package. -hereFileRelative :: FilePath -> Q Exp -hereFileRelative f = makeRelativeToProject f >>= hereFileExp - where - QuasiQuoter{quoteExp=hereFileExp} = hereFile - -- | Parse the user's specified journal file(s) as a Journal, maybe apply some -- transformations according to options, and run a hledger command with it. -- Or, throw an error. diff --git a/hledger/hledger.cabal b/hledger/hledger.cabal index 487a6f84b..32f1536b5 100644 --- a/hledger/hledger.cabal +++ b/hledger/hledger.cabal @@ -4,7 +4,7 @@ cabal-version: 1.12 -- -- see: https://github.com/sol/hpack -- --- hash: 2b1a58e0e13c29b497037f556b0bbe5836e1667dc222aafc546683392fd9c211 +-- hash: f7e09ce5d14e5c6c98b49831e7542ad9c40c969033841ca17e144a06bcda89cb name: hledger version: 1.12.99 @@ -125,7 +125,6 @@ library , data-default >=0.5 , directory , easytest - , file-embed >=0.0.10 , filepath , hashable >=1.2.4 , haskeline >=0.6 @@ -145,7 +144,6 @@ library , shakespeare >=2.0.2.2 , split >=0.1 , tabular >=0.2 - , template-haskell , temporary , text >=0.11 , time >=1.5 @@ -178,7 +176,6 @@ executable hledger , data-default >=0.5 , directory , easytest - , file-embed >=0.0.10 , filepath , haskeline >=0.6 , here @@ -197,7 +194,6 @@ executable hledger , shakespeare >=2.0.2.2 , split >=0.1 , tabular >=0.2 - , template-haskell , temporary , text >=0.11 , time >=1.5 @@ -233,7 +229,6 @@ test-suite test , data-default >=0.5 , directory , easytest - , file-embed >=0.0.10 , filepath , haskeline >=0.6 , here @@ -252,7 +247,6 @@ test-suite test , shakespeare >=2.0.2.2 , split >=0.1 , tabular >=0.2 - , template-haskell , temporary , test-framework , test-framework-hunit @@ -288,7 +282,6 @@ benchmark bench , data-default >=0.5 , directory , easytest - , file-embed >=0.0.10 , filepath , haskeline >=0.6 , here @@ -308,7 +301,6 @@ benchmark bench , shakespeare >=2.0.2.2 , split >=0.1 , tabular >=0.2 - , template-haskell , temporary , text >=0.11 , time >=1.5 diff --git a/hledger/package.yaml b/hledger/package.yaml index 47470d1eb..6d00ee1b8 100644 --- a/hledger/package.yaml +++ b/hledger/package.yaml @@ -89,7 +89,6 @@ dependencies: - Decimal - directory - easytest -- file-embed >=0.0.10 - filepath - haskeline >=0.6 - here @@ -104,7 +103,6 @@ dependencies: - safe >=0.2 - shakespeare >=2.0.2.2 - split >=0.1 -- template-haskell - math-functions >=0.2.0.0 - tabular >=0.2 - temporary