imp: check: uniqueleafnames: use the standard error format (#1436)
Hledger.Read.Common: export makePostingErrorExcerpt
This commit is contained in:
		
							parent
							
								
									7e45ab338f
								
							
						
					
					
						commit
						a00dc04e0d
					
				| @ -113,6 +113,7 @@ module Hledger.Read.Common ( | |||||||
|   skipNonNewlineSpaces1, |   skipNonNewlineSpaces1, | ||||||
|   aliasesFromOpts, |   aliasesFromOpts, | ||||||
|   makeTransactionErrorExcerpt, |   makeTransactionErrorExcerpt, | ||||||
|  |   makePostingErrorExcerpt, | ||||||
| 
 | 
 | ||||||
|   -- * tests |   -- * tests | ||||||
|   tests_Common, |   tests_Common, | ||||||
|  | |||||||
| @ -12,6 +12,7 @@ import Data.Text (Text) | |||||||
| import qualified Data.Text as T | import qualified Data.Text as T | ||||||
| import Hledger | import Hledger | ||||||
| import Text.Printf (printf) | import Text.Printf (printf) | ||||||
|  | import Data.Maybe (fromMaybe) | ||||||
| 
 | 
 | ||||||
| -- | Check that all the journal's postings are to accounts with a unique leaf name. | -- | Check that all the journal's postings are to accounts with a unique leaf name. | ||||||
| -- Otherwise, return an error message for the first offending posting. | -- Otherwise, return an error message for the first offending posting. | ||||||
| @ -38,16 +39,22 @@ journalLeafAndFullAccountNames = map leafAndAccountName . journalAccountNamesUse | |||||||
|   where leafAndAccountName a = (accountLeafName a, a) |   where leafAndAccountName a = (accountLeafName a, a) | ||||||
| 
 | 
 | ||||||
| checkposting :: [(Text,[AccountName])] -> Posting -> Either String () | checkposting :: [(Text,[AccountName])] -> Posting -> Either String () | ||||||
| checkposting leafandfullnames Posting{paccount,ptransaction} = | checkposting leafandfullnames p@Posting{paccount=a} = | ||||||
|   case [lf | lf@(_,fs) <- leafandfullnames, paccount `elem` fs] of |   case [lf | lf@(_,fs) <- leafandfullnames, a `elem` fs] of | ||||||
|     []             -> Right () |     []             -> Right () | ||||||
|     (leaf,fulls):_ -> Left $ printf |     (leaf,fulls):_ -> Left $ printf | ||||||
|       "account leaf names are not unique\nleaf name \"%s\" appears in account names: %s%s" |       "%s:%d:%d-%d:\n%saccount leaf name \"%s\" is not unique\nit is used in account names: %s"  | ||||||
|       leaf |       f l col col2 ex leaf accts | ||||||
|       (T.intercalate ", " $ map (("\""<>).(<>"\"")) fulls) |       where | ||||||
|       (case ptransaction of |         -- t = fromMaybe nulltransaction ptransaction  -- XXX sloppy | ||||||
|         Nothing -> "" |         col  = maybe 0 fst mcols | ||||||
|         Just t  -> printf "\nseen in \"%s\" in transaction at: %s\n\n%s" |         col2 = maybe 0 (fromMaybe 0 . snd) mcols | ||||||
|                     paccount |         (f,l,mcols,ex) = makePostingErrorExcerpt p finderrcols | ||||||
|                     (sourcePosPairPretty $ tsourcepos t) |           where | ||||||
|                     (linesPrepend "> " . (<>"\n") . textChomp $ showTransaction t) :: String) |             finderrcols p _ _ = Just (col, Just col2) | ||||||
|  |               where | ||||||
|  |                 alen = T.length $ paccount p | ||||||
|  |                 llen = T.length $ accountLeafName a | ||||||
|  |                 col = 5 + (if isVirtual p then 1 else 0) + alen - llen | ||||||
|  |                 col2 = col + llen - 1 | ||||||
|  |         accts = T.intercalate ", " $ map (("\""<>).(<>"\"")) fulls | ||||||
|  | |||||||
| @ -11,5 +11,5 @@ $ hledger -f- check uniqueleafnames | |||||||
|   (a)     1 |   (a)     1 | ||||||
|   (b:a)   1 |   (b:a)   1 | ||||||
| $ hledger -f- check uniqueleafnames | $ hledger -f- check uniqueleafnames | ||||||
| >2 /account leaf names are not unique/ | >2 /account leaf name .* is not unique/ | ||||||
| >=1 | >=1 | ||||||
|  | |||||||
| @ -1,10 +1,9 @@ | |||||||
| $$$ hledger check uniqueleafnames -f uniqueleafnames.j | $$$ hledger check uniqueleafnames -f uniqueleafnames.j | ||||||
| >>>2 | >>>2 | ||||||
| hledger: Error: account leaf names are not unique | hledger: Error: /Users/simon/src/hledger/hledger/test/errors/uniqueleafnames.j:9:8-8: | ||||||
| leaf name "c" appears in account names: "a:c", "b:c" |   | 2022-01-01 p | ||||||
| seen in "a:c" in transaction at: /Users/simon/src/hledger/hledger/test/errors/uniqueleafnames.j:8-9 | 9 |     (a:c)               1 | ||||||
| 
 |   |        ^ | ||||||
| > 2022-01-01 p | account leaf name "c" is not unique | ||||||
| >     (a:c)               1 | it is used in account names: "a:c", "b:c" | ||||||
| 
 |  | ||||||
| >>>=1 | >>>=1 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user