lib: refactor, add embedFileRelative

This commit is contained in:
Simon Michael 2019-01-26 15:52:58 -08:00
parent 4f8153cf82
commit 550aa408eb
8 changed files with 55 additions and 51 deletions

View File

@ -37,15 +37,19 @@ where
import Control.Monad (liftM, when) import Control.Monad (liftM, when)
-- import Data.Char -- import Data.Char
import Data.Default import Data.Default
import Data.FileEmbed (makeRelativeToProject, embedFile)
import Data.List import Data.List
-- import Data.Maybe -- import Data.Maybe
-- import Data.PPrint -- import Data.PPrint
import Data.String.Here (hereFile)
import Data.Text (Text) import Data.Text (Text)
import qualified Data.Text.IO as T import qualified Data.Text.IO as T
import Data.Time.Clock import Data.Time.Clock
import Data.Time.LocalTime import Data.Time.LocalTime
-- import Data.Text (Text) -- import Data.Text (Text)
-- import qualified Data.Text as T -- 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.Directory (getHomeDirectory)
import System.FilePath((</>), isRelative) import System.FilePath((</>), isRelative)
import System.IO import System.IO
@ -220,6 +224,18 @@ sequence' ms = do
mapM' :: Monad f => (a -> f b) -> [a] -> f [b] mapM' :: Monad f => (a -> f b) -> [a] -> f [b]
mapM' f = sequence' . map f 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_Utils = tests "Utils" [
tests_Text tests_Text
] ]

View File

@ -4,7 +4,7 @@ cabal-version: 1.12
-- --
-- see: https://github.com/sol/hpack -- see: https://github.com/sol/hpack
-- --
-- hash: 510ffa940692e35167ef2f17c5eaa61f6510793dc0a902f0daac254da37fee9e -- hash: 83c1fff5c5877da9fe972db3b0b57fb31687fbdb4476b7ee0136e76a64e2f69e
name: hledger-lib name: hledger-lib
version: 1.12.99 version: 1.12.99
@ -121,8 +121,10 @@ library
, directory , directory
, easytest , easytest
, extra , extra
, file-embed >=0.0.10
, filepath , filepath
, hashtables >=1.2.3.1 , hashtables >=1.2.3.1
, here
, megaparsec >=7.0.0 && <8 , megaparsec >=7.0.0 && <8
, mtl , mtl
, mtl-compat , mtl-compat
@ -134,6 +136,7 @@ library
, safe >=0.2 , safe >=0.2
, split >=0.1 , split >=0.1
, tabular >=0.2 , tabular >=0.2
, template-haskell
, text >=1.2 , text >=1.2
, time >=1.5 , time >=1.5
, transformers >=0.2 , transformers >=0.2
@ -221,8 +224,10 @@ test-suite doctests
, doctest >=0.16 , doctest >=0.16
, easytest , easytest
, extra , extra
, file-embed >=0.0.10
, filepath , filepath
, hashtables >=1.2.3.1 , hashtables >=1.2.3.1
, here
, megaparsec >=7.0.0 && <8 , megaparsec >=7.0.0 && <8
, mtl , mtl
, mtl-compat , mtl-compat
@ -234,6 +239,7 @@ test-suite doctests
, safe >=0.2 , safe >=0.2
, split >=0.1 , split >=0.1
, tabular >=0.2 , tabular >=0.2
, template-haskell
, text >=1.2 , text >=1.2
, time >=1.5 , time >=1.5
, transformers >=0.2 , transformers >=0.2
@ -320,8 +326,10 @@ test-suite easytests
, directory , directory
, easytest , easytest
, extra , extra
, file-embed >=0.0.10
, filepath , filepath
, hashtables >=1.2.3.1 , hashtables >=1.2.3.1
, here
, hledger-lib , hledger-lib
, megaparsec >=7.0.0 && <8 , megaparsec >=7.0.0 && <8
, mtl , mtl
@ -334,6 +342,7 @@ test-suite easytests
, safe >=0.2 , safe >=0.2
, split >=0.1 , split >=0.1
, tabular >=0.2 , tabular >=0.2
, template-haskell
, text >=1.2 , text >=1.2
, time >=1.5 , time >=1.5
, transformers >=0.2 , transformers >=0.2

View File

@ -55,8 +55,10 @@ dependencies:
- deepseq - deepseq
- directory - directory
- easytest - easytest
- file-embed >=0.0.10
- filepath - filepath
- hashtables >=1.2.3.1 - hashtables >=1.2.3.1
- here
- megaparsec >=7.0.0 && <8 - megaparsec >=7.0.0 && <8
- mtl - mtl
- mtl-compat - mtl-compat
@ -68,6 +70,7 @@ dependencies:
- safe >=0.2 - safe >=0.2
- split >=0.1 - split >=0.1
- tabular >=0.2 - tabular >=0.2
- template-haskell
- text >=1.2 - text >=1.2
- time >=1.5 - time >=1.5
- transformers >=0.2 - transformers >=0.2

View File

@ -14,7 +14,6 @@ import System.Console.CmdArgs.Explicit as C
import Hledger import Hledger
import Hledger.Cli.CliOptions import Hledger.Cli.CliOptions
import Hledger.Cli.Utils (hereFileRelative)
closemode = hledgerCommandMode closemode = hledgerCommandMode
$(hereFileRelative "Hledger/Cli/Commands/Close.md") $(hereFileRelative "Hledger/Cli/Commands/Close.md")

View File

@ -24,57 +24,56 @@ import Prelude ()
import "base-compat-batteries" Prelude.Compat import "base-compat-batteries" Prelude.Compat
import Data.ByteString (ByteString) import Data.ByteString (ByteString)
import qualified Data.ByteString.Char8 as BC import qualified Data.ByteString.Char8 as BC
import Data.FileEmbed
import Data.String import Data.String
import System.IO import System.IO
import System.IO.Temp import System.IO.Temp
import System.Process import System.Process
import Hledger.Utils (first3, second3, third3) import Hledger.Utils (first3, second3, third3, embedFileRelative)
type Topic = String type Topic = String
docFiles :: [(Topic, (ByteString, ByteString, ByteString))] docFiles :: [(Topic, (ByteString, ByteString, ByteString))]
docFiles = [ docFiles = [
("hledger", ("hledger",
($(makeRelativeToProject "embeddedfiles/hledger.1" >>= embedFile) ($(embedFileRelative "embeddedfiles/hledger.1")
,$(makeRelativeToProject "embeddedfiles/hledger.txt" >>= embedFile) ,$(embedFileRelative "embeddedfiles/hledger.txt")
,$(makeRelativeToProject "embeddedfiles/hledger.info" >>= embedFile) ,$(embedFileRelative "embeddedfiles/hledger.info")
)) ))
,("hledger-ui", ,("hledger-ui",
($(makeRelativeToProject "embeddedfiles/hledger-ui.1" >>= embedFile) ($(embedFileRelative "embeddedfiles/hledger-ui.1")
,$(makeRelativeToProject "embeddedfiles/hledger-ui.txt" >>= embedFile) ,$(embedFileRelative "embeddedfiles/hledger-ui.txt")
,$(makeRelativeToProject "embeddedfiles/hledger-ui.info" >>= embedFile) ,$(embedFileRelative "embeddedfiles/hledger-ui.info")
)) ))
,("hledger-web", ,("hledger-web",
($(makeRelativeToProject "embeddedfiles/hledger-web.1" >>= embedFile) ($(embedFileRelative "embeddedfiles/hledger-web.1")
,$(makeRelativeToProject "embeddedfiles/hledger-web.txt" >>= embedFile) ,$(embedFileRelative "embeddedfiles/hledger-web.txt")
,$(makeRelativeToProject "embeddedfiles/hledger-web.info" >>= embedFile) ,$(embedFileRelative "embeddedfiles/hledger-web.info")
)) ))
,("hledger-api", ,("hledger-api",
($(makeRelativeToProject "embeddedfiles/hledger-api.1" >>= embedFile) ($(embedFileRelative "embeddedfiles/hledger-api.1")
,$(makeRelativeToProject "embeddedfiles/hledger-api.txt" >>= embedFile) ,$(embedFileRelative "embeddedfiles/hledger-api.txt")
,$(makeRelativeToProject "embeddedfiles/hledger-api.info" >>= embedFile) ,$(embedFileRelative "embeddedfiles/hledger-api.info")
)) ))
,("journal", ,("journal",
($(makeRelativeToProject "embeddedfiles/hledger_journal.5" >>= embedFile) ($(embedFileRelative "embeddedfiles/hledger_journal.5")
,$(makeRelativeToProject "embeddedfiles/hledger_journal.txt" >>= embedFile) ,$(embedFileRelative "embeddedfiles/hledger_journal.txt")
,$(makeRelativeToProject "embeddedfiles/hledger_journal.info" >>= embedFile) ,$(embedFileRelative "embeddedfiles/hledger_journal.info")
)) ))
,("csv", ,("csv",
($(makeRelativeToProject "embeddedfiles/hledger_csv.5" >>= embedFile) ($(embedFileRelative "embeddedfiles/hledger_csv.5")
,$(makeRelativeToProject "embeddedfiles/hledger_csv.txt" >>= embedFile) ,$(embedFileRelative "embeddedfiles/hledger_csv.txt")
,$(makeRelativeToProject "embeddedfiles/hledger_csv.info" >>= embedFile) ,$(embedFileRelative "embeddedfiles/hledger_csv.info")
)) ))
,("timeclock", ,("timeclock",
($(makeRelativeToProject "embeddedfiles/hledger_timeclock.5" >>= embedFile) ($(embedFileRelative "embeddedfiles/hledger_timeclock.5")
,$(makeRelativeToProject "embeddedfiles/hledger_timeclock.txt" >>= embedFile) ,$(embedFileRelative "embeddedfiles/hledger_timeclock.txt")
,$(makeRelativeToProject "embeddedfiles/hledger_timeclock.info" >>= embedFile) ,$(embedFileRelative "embeddedfiles/hledger_timeclock.info")
)) ))
,("timedot", ,("timedot",
($(makeRelativeToProject "embeddedfiles/hledger_timedot.5" >>= embedFile) ($(embedFileRelative "embeddedfiles/hledger_timedot.5")
,$(makeRelativeToProject "embeddedfiles/hledger_timedot.txt" >>= embedFile) ,$(embedFileRelative "embeddedfiles/hledger_timedot.txt")
,$(makeRelativeToProject "embeddedfiles/hledger_timedot.info" >>= embedFile) ,$(embedFileRelative "embeddedfiles/hledger_timedot.info")
)) ))
] ]

View File

@ -9,7 +9,6 @@ Hledger.Utils.
module Hledger.Cli.Utils module Hledger.Cli.Utils
( (
hereFileRelative,
withJournalDo, withJournalDo,
writeOutput, writeOutput,
journalTransform, journalTransform,
@ -32,16 +31,12 @@ import Control.Exception as C
import Control.Monad import Control.Monad
import Data.Hashable (hash) import Data.Hashable (hash)
import Data.FileEmbed (makeRelativeToProject)
import Data.List import Data.List
import Data.Maybe import Data.Maybe
import qualified Data.Text as T import qualified Data.Text as T
import qualified Data.Text.IO as T import qualified Data.Text.IO as T
import Data.String.Here (hereFile)
import Data.Time (Day, addDays) import Data.Time (Day, addDays)
import Data.Word import Data.Word
import Language.Haskell.TH.Quote (QuasiQuoter(..))
import Language.Haskell.TH.Syntax (Q, Exp)
import Numeric import Numeric
import Safe (readMay) import Safe (readMay)
import System.Console.CmdArgs import System.Console.CmdArgs
@ -63,13 +58,6 @@ import Hledger.Read
import Hledger.Reports import Hledger.Reports
import Hledger.Utils 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 -- | 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. -- transformations according to options, and run a hledger command with it.
-- Or, throw an error. -- Or, throw an error.

View File

@ -4,7 +4,7 @@ cabal-version: 1.12
-- --
-- see: https://github.com/sol/hpack -- see: https://github.com/sol/hpack
-- --
-- hash: 2b1a58e0e13c29b497037f556b0bbe5836e1667dc222aafc546683392fd9c211 -- hash: f7e09ce5d14e5c6c98b49831e7542ad9c40c969033841ca17e144a06bcda89cb
name: hledger name: hledger
version: 1.12.99 version: 1.12.99
@ -125,7 +125,6 @@ library
, data-default >=0.5 , data-default >=0.5
, directory , directory
, easytest , easytest
, file-embed >=0.0.10
, filepath , filepath
, hashable >=1.2.4 , hashable >=1.2.4
, haskeline >=0.6 , haskeline >=0.6
@ -145,7 +144,6 @@ library
, shakespeare >=2.0.2.2 , shakespeare >=2.0.2.2
, split >=0.1 , split >=0.1
, tabular >=0.2 , tabular >=0.2
, template-haskell
, temporary , temporary
, text >=0.11 , text >=0.11
, time >=1.5 , time >=1.5
@ -178,7 +176,6 @@ executable hledger
, data-default >=0.5 , data-default >=0.5
, directory , directory
, easytest , easytest
, file-embed >=0.0.10
, filepath , filepath
, haskeline >=0.6 , haskeline >=0.6
, here , here
@ -197,7 +194,6 @@ executable hledger
, shakespeare >=2.0.2.2 , shakespeare >=2.0.2.2
, split >=0.1 , split >=0.1
, tabular >=0.2 , tabular >=0.2
, template-haskell
, temporary , temporary
, text >=0.11 , text >=0.11
, time >=1.5 , time >=1.5
@ -233,7 +229,6 @@ test-suite test
, data-default >=0.5 , data-default >=0.5
, directory , directory
, easytest , easytest
, file-embed >=0.0.10
, filepath , filepath
, haskeline >=0.6 , haskeline >=0.6
, here , here
@ -252,7 +247,6 @@ test-suite test
, shakespeare >=2.0.2.2 , shakespeare >=2.0.2.2
, split >=0.1 , split >=0.1
, tabular >=0.2 , tabular >=0.2
, template-haskell
, temporary , temporary
, test-framework , test-framework
, test-framework-hunit , test-framework-hunit
@ -288,7 +282,6 @@ benchmark bench
, data-default >=0.5 , data-default >=0.5
, directory , directory
, easytest , easytest
, file-embed >=0.0.10
, filepath , filepath
, haskeline >=0.6 , haskeline >=0.6
, here , here
@ -308,7 +301,6 @@ benchmark bench
, shakespeare >=2.0.2.2 , shakespeare >=2.0.2.2
, split >=0.1 , split >=0.1
, tabular >=0.2 , tabular >=0.2
, template-haskell
, temporary , temporary
, text >=0.11 , text >=0.11
, time >=1.5 , time >=1.5

View File

@ -89,7 +89,6 @@ dependencies:
- Decimal - Decimal
- directory - directory
- easytest - easytest
- file-embed >=0.0.10
- filepath - filepath
- haskeline >=0.6 - haskeline >=0.6
- here - here
@ -104,7 +103,6 @@ dependencies:
- safe >=0.2 - safe >=0.2
- shakespeare >=2.0.2.2 - shakespeare >=2.0.2.2
- split >=0.1 - split >=0.1
- template-haskell
- math-functions >=0.2.0.0 - math-functions >=0.2.0.0
- tabular >=0.2 - tabular >=0.2
- temporary - temporary