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