mirror of
https://github.com/simonmichael/hledger.git
synced 2024-12-27 04:13:11 +03:00
bin: hledger-print-location example
This commit is contained in:
parent
4747e2eacf
commit
efa0d43910
53
bin/hledger-print-location.hs
Executable file
53
bin/hledger-print-location.hs
Executable file
@ -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
|
Loading…
Reference in New Issue
Block a user