51 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Haskell
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			51 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Haskell
		
	
	
		
			Executable File
		
	
	
	
	
#!/usr/bin/env stack
 | 
						|
{- stack script --compile --resolver lts-16.3
 | 
						|
-}
 | 
						|
{-
 | 
						|
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
 |