diff --git a/hledger/Hledger/Cli/Commands/Close.hs b/hledger/Hledger/Cli/Commands/Close.hs index 1df87ca1e..517d3ce42 100755 --- a/hledger/Hledger/Cli/Commands/Close.hs +++ b/hledger/Hledger/Cli/Commands/Close.hs @@ -1,5 +1,5 @@ {-# LANGUAGE OverloadedStrings #-} -{-# LANGUAGE QuasiQuotes #-} +{-# LANGUAGE TemplateHaskell #-} module Hledger.Cli.Commands.Close ( closemode @@ -9,16 +9,15 @@ where import Control.Monad (when) import Data.Maybe -import Data.String.Here import Data.Time.Calendar -import Hledger -import Hledger.Cli.CliOptions import System.Console.CmdArgs.Explicit as C +import Hledger +import Hledger.Cli.CliOptions +import Hledger.Cli.Utils (hereFileRelativeToPackage) + closemode = hledgerCommandMode - [hereFile|Hledger/Cli/Commands/Close.md|] - -- XXX need the hledger/ eg for ghci.. file-embed's makeRelativeToProject should help - -- ($(makeRelativeToProject "Hledger/Cli/Commands/Close.md" >>= hereFileExp)) + $(hereFileRelativeToPackage "Hledger/Cli/Commands/Close.md") [flagNone ["opening"] (\opts -> setboolopt "opening" opts) "show just opening transaction" ,flagNone ["closing"] (\opts -> setboolopt "closing" opts) "show just closing transaction" ] diff --git a/hledger/Hledger/Cli/Utils.hs b/hledger/Hledger/Cli/Utils.hs index d1f5d6e47..2b5d71bdc 100644 --- a/hledger/Hledger/Cli/Utils.hs +++ b/hledger/Hledger/Cli/Utils.hs @@ -9,6 +9,7 @@ Hledger.Utils. module Hledger.Cli.Utils ( + hereFileRelativeToPackage, withJournalDo, writeOutput, journalTransform, @@ -31,12 +32,16 @@ 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 @@ -58,6 +63,13 @@ 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. +hereFileRelativeToPackage :: FilePath -> Q Exp +hereFileRelativeToPackage 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 b5ac6255a..32d05d70f 100644 --- a/hledger/hledger.cabal +++ b/hledger/hledger.cabal @@ -4,7 +4,7 @@ cabal-version: 1.12 -- -- see: https://github.com/sol/hpack -- --- hash: 5e004994f6f3f961edee83542d3b428dc7eb7cb365b32822b513b988c351f697 +-- hash: 725d6fac0dd1253d2b6f12ee2384d62f9204cae3c8a553906084b771b364861c name: hledger version: 1.12.99 @@ -145,6 +145,7 @@ library , shakespeare >=2.0.2.2 , split >=0.1 , tabular >=0.2 + , template-haskell , temporary , text >=0.11 , time >=1.5 @@ -196,6 +197,7 @@ executable hledger , shakespeare >=2.0.2.2 , split >=0.1 , tabular >=0.2 + , template-haskell , temporary , text >=0.11 , time >=1.5 @@ -250,6 +252,7 @@ test-suite test , shakespeare >=2.0.2.2 , split >=0.1 , tabular >=0.2 + , template-haskell , temporary , test-framework , test-framework-hunit @@ -305,6 +308,7 @@ 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 256f5e016..3ab404598 100644 --- a/hledger/package.yaml +++ b/hledger/package.yaml @@ -104,6 +104,7 @@ dependencies: - safe >=0.2 - shakespeare >=2.0.2.2 - split >=0.1 +- template-haskell - math-functions >=0.2.0.0 - tabular >=0.2 - temporary