imp: check: show column ranges properly (#1436)

This commit is contained in:
Simon Michael 2022-04-24 18:29:01 -10:00
parent 66d0beea5e
commit 7e45ab338f
4 changed files with 22 additions and 15 deletions

View File

@ -366,14 +366,16 @@ journalCheckPayeesDeclared j = mapM_ checkpayee (jtxns j)
checkpayee t checkpayee t
| payee `elem` journalPayeesDeclared j = Right () | payee `elem` journalPayeesDeclared j = Right ()
| otherwise = Left $ | otherwise = Left $
printf "%s:%d:%d:\n%sundeclared payee \"%s\"\n" f l (maybe 0 ((+1).fst) mcols) ex payee printf "%s:%d:%d-%d:\n%sundeclared payee \"%s\"\n" f l col col2 ex payee
where where
payee = transactionPayee t payee = transactionPayee t
(f,l,mcols,ex) = makeTransactionErrorExcerpt t finderrcols (f,l,mcols,ex) = makeTransactionErrorExcerpt t finderrcols
col = maybe 0 fst mcols
col2 = maybe 0 (fromMaybe 0 . snd) mcols
finderrcols t = Just (col, Just col2) finderrcols t = Just (col, Just col2)
where where
col = T.length (showTransactionLineFirstPart t) + 1 col = T.length (showTransactionLineFirstPart t) + 2
col2 = col + T.length (transactionPayee t) col2 = col + T.length (transactionPayee t) - 1
-- | Check that all the journal's postings are to accounts declared with -- | Check that all the journal's postings are to accounts declared with
-- account directives, returning an error message otherwise. -- account directives, returning an error message otherwise.
@ -383,13 +385,15 @@ journalCheckAccountsDeclared j = mapM_ checkacct (journalPostings j)
checkacct p@Posting{paccount=a} checkacct p@Posting{paccount=a}
| a `elem` journalAccountNamesDeclared j = Right () | a `elem` journalAccountNamesDeclared j = Right ()
| otherwise = Left $ | otherwise = Left $
printf "%s:%d:%d:\n%sundeclared account \"%s\"\n" f l (maybe 0 ((+1).fst) mcols) ex a printf "%s:%d:%d-%d:\n%sundeclared account \"%s\"\n" f l col col2 ex a
where where
(f,l,mcols,ex) = makePostingErrorExcerpt p finderrcols (f,l,mcols,ex) = makePostingErrorExcerpt p finderrcols
col = maybe 0 fst mcols
col2 = maybe 0 (fromMaybe 0 . snd) mcols
finderrcols p _ _ = Just (col, Just col2) finderrcols p _ _ = Just (col, Just col2)
where where
col = 4 + if isVirtual p then 1 else 0 col = 5 + if isVirtual p then 1 else 0
col2 = col + T.length a col2 = col + T.length a - 1
-- | Check that all the commodities used in this journal's postings have been declared -- | Check that all the commodities used in this journal's postings have been declared
-- by commodity directives, returning an error message otherwise. -- by commodity directives, returning an error message otherwise.
@ -399,9 +403,12 @@ journalCheckCommoditiesDeclared j = mapM_ checkcommodities (journalPostings j)
checkcommodities p = checkcommodities p =
case findundeclaredcomm p of case findundeclaredcomm p of
Nothing -> Right () Nothing -> Right ()
Just (c, _) -> Just (comm, _) ->
Left $ printf "%s:%d:\n%sundeclared commodity \"%s\"\n" f l ex c Left $ printf "%s:%d:%d-%d:\n%sundeclared commodity \"%s\"\n" f l col col2 ex comm
where (f,l,_,ex) = makePostingErrorExcerpt p finderrcols where
(f,l,mcols,ex) = makePostingErrorExcerpt p finderrcols
col = maybe 0 fst mcols
col2 = maybe 0 (fromMaybe 0 . snd) mcols
where where
-- Find the first undeclared commodity symbol in this posting's amount -- Find the first undeclared commodity symbol in this posting's amount
-- or balance assertion amount, if any. The boolean will be true if -- or balance assertion amount, if any. The boolean will be true if
@ -444,7 +451,7 @@ journalCheckCommoditiesDeclared j = mapM_ checkcommodities (journalPostings j)
errrelline = 1 + tcommentlines + pindex -- XXX doesn't count posting coment lines errrelline = 1 + tcommentlines + pindex -- XXX doesn't count posting coment lines
errline = fromMaybe "" (T.lines txntxt `atMay` (errrelline-1)) errline = fromMaybe "" (T.lines txntxt `atMay` (errrelline-1))
acctend = 4 + T.length (paccount p) + if isVirtual p then 2 else 0 acctend = 4 + T.length (paccount p) + if isVirtual p then 2 else 0
amtstart = acctend + (T.length $ T.takeWhile isSpace $ T.drop acctend errline) amtstart = acctend + (T.length $ T.takeWhile isSpace $ T.drop acctend errline) + 1
amtend = amtstart + (T.length $ T.stripEnd $ T.takeWhile (/=';') $ T.drop amtstart errline) amtend = amtstart + (T.length $ T.stripEnd $ T.takeWhile (/=';') $ T.drop amtstart errline)
-- | Given a problem transaction and a function calculating the best -- | Given a problem transaction and a function calculating the best
@ -512,9 +519,9 @@ decoratePostingErrorExcerpt absline relline mcols txt =
_ -> ([], []) _ -> ([], [])
ms' = map (lineprefix<>) ms ms' = map (lineprefix<>) ms
colmarkerline = colmarkerline =
[lineprefix <> T.replicate col " " <> T.replicate regionw "^" [lineprefix <> T.replicate (col-1) " " <> T.replicate regionw "^"
| Just (col, mendcol) <- [mcols] | Just (col, mendcol) <- [mcols]
, let regionw = maybe 1 (subtract col) mendcol , let regionw = 1 + maybe 0 (subtract col) mendcol
] ]
lineprefix = T.replicate marginw " " <> "| " lineprefix = T.replicate marginw " " <> "| "
where marginw = length (show absline) + 1 where marginw = length (show absline) + 1

View File

@ -1,6 +1,6 @@
$$$ hledger check accounts -f accounts.j $$$ hledger check accounts -f accounts.j
>>>2 >>>2
hledger: Error: /Users/simon/src/hledger/hledger/test/errors/accounts.j:4:6: hledger: Error: /Users/simon/src/hledger/hledger/test/errors/accounts.j:4:6-6:
| 2022-01-01 | 2022-01-01
4 | (a) 1 4 | (a) 1
| ^ | ^

View File

@ -1,6 +1,6 @@
$$$ hledger check commodities -f commodities.j $$$ hledger check commodities -f commodities.j
>>>2 >>>2
hledger: Error: /Users/simon/src/hledger/hledger/test/errors/commodities.j:6: hledger: Error: /Users/simon/src/hledger/hledger/test/errors/commodities.j:6:21-23:
| 2022-01-01 | 2022-01-01
6 | (a) A 1 6 | (a) A 1
| ^^^ | ^^^

View File

@ -1,6 +1,6 @@
$$$ hledger check payees -f payees.j $$$ hledger check payees -f payees.j
>>>2 >>>2
hledger: Error: /Users/simon/src/hledger/hledger/test/errors/payees.j:6:12: hledger: Error: /Users/simon/src/hledger/hledger/test/errors/payees.j:6:12-12:
6 | 2022-01-01 p 6 | 2022-01-01 p
| ^ | ^
| (a) A 1 | (a) A 1