From efa0d4391089c4a81b51bb5231723fb592cd6ec4 Mon Sep 17 00:00:00 2001 From: Simon Michael Date: Sat, 15 Aug 2020 09:56:53 -0700 Subject: [PATCH] bin: hledger-print-location example --- bin/hledger-print-location.hs | 53 +++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100755 bin/hledger-print-location.hs diff --git a/bin/hledger-print-location.hs b/bin/hledger-print-location.hs new file mode 100755 index 000000000..1bbf2e393 --- /dev/null +++ b/bin/hledger-print-location.hs @@ -0,0 +1,53 @@ +#!/usr/bin/env stack +{- stack script --compile --resolver lts-16.3 + --package hledger + --package string-qq + --package text +-} +{- +Quick script that adds file/line number tags to print output. +cf https://www.reddit.com/r/plaintextaccounting/comments/ddzn8o/finding_corresponding_journal_files_from_hledger/ + +$ hledger print-location -f examples/sample.journal desc:eat +2008/06/03 * eat & shop + ; location: /Users/simon/src/hledger/examples/sample.journal:30 + expenses:food $1 + expenses:supplies $1 + assets:cash +-} + +{-# LANGUAGE OverloadedStrings #-} +{-# LANGUAGE QuasiQuotes #-} + +import Data.String.QQ (s) +import Data.Text (pack) +import Text.Printf +import Hledger.Cli + +------------------------------------------------------------------------------ +cmdmode = hledgerCommandMode + [s| print-location +Like print, but adds tags showing the file path and location of transactions. +FLAGS + |] + [] + [generalflagsgroup1] + [] + ([], Just $ argsFlag "[QUERY]") +------------------------------------------------------------------------------ + +main :: IO () +main = do + opts <- getHledgerCliOpts cmdmode + withJournalDo opts $ \j -> + print' opts j{jtxns = map addLocationTag $ jtxns j} + +addLocationTag :: Transaction -> Transaction +addLocationTag t = t{tcomment = tcomment t `commentAddTagNextLine` loctag} + where + loctag = ("location", pack $ showGenericSourcePosLine $ tsourcepos t) + +-- Like showGenericSourcePos in Hledger.Data.Transaction, but show just the starting line number. +showGenericSourcePosLine :: GenericSourcePos -> String +showGenericSourcePosLine (GenericSourcePos f line _) = printf "%s:%d" f line +showGenericSourcePosLine (JournalSourcePos f (startline, _)) = printf "%s:%d" f startline