imp: errors: more error prettification
This commit is contained in:
parent
84f951e020
commit
1c67d0860e
@ -115,11 +115,11 @@ transactionCheckBalanced BalancingOpts{commodity_styles_} t = errs
|
|||||||
where
|
where
|
||||||
rmsg
|
rmsg
|
||||||
| rsumok = ""
|
| rsumok = ""
|
||||||
| not rsignsok = "The real postings all have the same sign."
|
| not rsignsok = "The real postings all have the same sign. Consider negating some of them."
|
||||||
| otherwise = "The real postings' sum should be 0 but is: " ++ showMixedAmountOneLine rsumcost
|
| otherwise = "The real postings' sum should be 0 but is: " ++ showMixedAmountOneLine rsumcost
|
||||||
bvmsg
|
bvmsg
|
||||||
| bvsumok = ""
|
| bvsumok = ""
|
||||||
| not bvsignsok = "The balanced virtual postings all have the same sign."
|
| not bvsignsok = "The balanced virtual postings all have the same sign. Consider negating some of them."
|
||||||
| otherwise = "The balanced virtual postings' sum should be 0 but is: " ++ showMixedAmountOneLine bvsumcost
|
| otherwise = "The balanced virtual postings' sum should be 0 but is: " ++ showMixedAmountOneLine bvsumcost
|
||||||
|
|
||||||
-- | Legacy form of transactionCheckBalanced.
|
-- | Legacy form of transactionCheckBalanced.
|
||||||
@ -159,22 +159,34 @@ balanceTransactionHelper bopts t = do
|
|||||||
[] -> Right (txnTieKnot t', inferredamtsandaccts)
|
[] -> Right (txnTieKnot t', inferredamtsandaccts)
|
||||||
errs -> Left $ transactionBalanceError t' errs'
|
errs -> Left $ transactionBalanceError t' errs'
|
||||||
where
|
where
|
||||||
errs' = errs ++
|
ismulticommodity = (length $ transactionCommodities t') > 1
|
||||||
[ "Inference of conversion costs has been disallowed."
|
errs' =
|
||||||
|
[ "Automatic commodity conversion is not enabled."
|
||||||
| ismulticommodity && not (infer_transaction_prices_ bopts)
|
| ismulticommodity && not (infer_transaction_prices_ bopts)
|
||||||
|
] ++
|
||||||
|
errs ++
|
||||||
|
if ismulticommodity
|
||||||
|
then
|
||||||
|
[ "Consider adjusting this entry's amounts, adding missing postings,"
|
||||||
|
, "or recording conversion price(s) with @, @@ or equity postings."
|
||||||
]
|
]
|
||||||
where
|
else
|
||||||
ismulticommodity = (length $ mconcat $ map (maCommodities . pamount) $ tpostings t') > 1
|
[ "Consider adjusting this entry's amounts, or adding missing postings."
|
||||||
|
]
|
||||||
|
|
||||||
|
transactionCommodities :: Transaction -> S.Set CommoditySymbol
|
||||||
|
transactionCommodities t = mconcat $ map (maCommodities . pamount) $ tpostings t
|
||||||
|
|
||||||
-- | Generate a transaction balancing error message, given the transaction
|
-- | Generate a transaction balancing error message, given the transaction
|
||||||
-- and one or more suberror messages.
|
-- and one or more suberror messages.
|
||||||
transactionBalanceError :: Transaction -> [String] -> String
|
transactionBalanceError :: Transaction -> [String] -> String
|
||||||
transactionBalanceError t errs = printf "%s:\n%s\n\n%s\n%s"
|
transactionBalanceError t errs = printf "%s:\n%s\n\nThis %stransaction is unbalanced.\n%s"
|
||||||
(sourcePosPairPretty $ tsourcepos t)
|
(sourcePosPairPretty $ tsourcepos t)
|
||||||
(textChomp ex)
|
(textChomp ex)
|
||||||
("This transaction is unbalanced."::String)
|
(if ismulticommodity then "multi-commodity " else "" :: String)
|
||||||
(chomp $ unlines errs)
|
(chomp $ unlines errs)
|
||||||
where
|
where
|
||||||
|
ismulticommodity = (length $ transactionCommodities t) > 1
|
||||||
(_f,_l,_mcols,ex) = makeTransactionErrorExcerpt t finderrcols
|
(_f,_l,_mcols,ex) = makeTransactionErrorExcerpt t finderrcols
|
||||||
where
|
where
|
||||||
finderrcols _ = Nothing
|
finderrcols _ = Nothing
|
||||||
@ -591,12 +603,16 @@ checkBalanceAssertionOneCommodityB p@Posting{paccount=assertedacct} assertedamt
|
|||||||
-- "display precision: %d",
|
-- "display precision: %d",
|
||||||
"this balance was asserted: %s", -- (at display precision: %s)",
|
"this balance was asserted: %s", -- (at display precision: %s)",
|
||||||
"but the actual balance is: %s", -- (at display precision: %s)",
|
"but the actual balance is: %s", -- (at display precision: %s)",
|
||||||
"a difference of: %s"
|
"a difference of: %s",
|
||||||
|
"",
|
||||||
|
"Consider viewing this account's register to troubleshoot. Eg:",
|
||||||
|
"",
|
||||||
|
"hledger reg -I '%s'%s"
|
||||||
])
|
])
|
||||||
(sourcePosPretty pos)
|
(sourcePosPretty pos)
|
||||||
(textChomp ex)
|
(textChomp ex)
|
||||||
-- (showDate $ postingDate p)
|
-- (showDate $ postingDate p)
|
||||||
(T.unpack $ paccount p) -- XXX pack
|
acct
|
||||||
(if isinclusive then " (including subaccounts)" else "" :: String)
|
(if isinclusive then " (including subaccounts)" else "" :: String)
|
||||||
assertedcomm
|
assertedcomm
|
||||||
(if istotal then " (no other commodity balance allowed)" else "" :: String)
|
(if istotal then " (no other commodity balance allowed)" else "" :: String)
|
||||||
@ -606,7 +622,10 @@ checkBalanceAssertionOneCommodityB p@Posting{paccount=assertedacct} assertedamt
|
|||||||
(show $ aquantity actualbalincomm)
|
(show $ aquantity actualbalincomm)
|
||||||
-- (showAmount actualbalincommodity)
|
-- (showAmount actualbalincommodity)
|
||||||
(show $ aquantity assertedamt - aquantity actualbalincomm)
|
(show $ aquantity assertedamt - aquantity actualbalincomm)
|
||||||
|
(acct ++ if isinclusive then "" else "$")
|
||||||
|
(if istotal then "" else (" cur:'"++T.unpack assertedcomm++"'"))
|
||||||
where
|
where
|
||||||
|
acct = T.unpack $ paccount p
|
||||||
ass = fromJust $ pbalanceassertion p -- PARTIAL: fromJust won't fail, there is a balance assertion
|
ass = fromJust $ pbalanceassertion p -- PARTIAL: fromJust won't fail, there is a balance assertion
|
||||||
pos = baposition ass
|
pos = baposition ass
|
||||||
(_,_,_,ex) = makePostingErrorExcerpt p finderrcols
|
(_,_,_,ex) = makePostingErrorExcerpt p finderrcols
|
||||||
@ -648,7 +667,7 @@ checkBalanceAssignmentPostingDateB :: Posting -> Balancing s ()
|
|||||||
checkBalanceAssignmentPostingDateB p =
|
checkBalanceAssignmentPostingDateB p =
|
||||||
when (hasBalanceAssignment p && isJust (pdate p)) $
|
when (hasBalanceAssignment p && isJust (pdate p)) $
|
||||||
throwError $ chomp $ unlines [
|
throwError $ chomp $ unlines [
|
||||||
"can't use balance assignment with custom posting date"
|
"Balance assignments and custom posting dates may not be combined."
|
||||||
,""
|
,""
|
||||||
,chomp1 $ T.unpack $ maybe (T.unlines $ showPostingLines p) showTransaction $ ptransaction p
|
,chomp1 $ T.unpack $ maybe (T.unlines $ showPostingLines p) showTransaction $ ptransaction p
|
||||||
,"Balance assignments may not be used on postings with a custom posting date"
|
,"Balance assignments may not be used on postings with a custom posting date"
|
||||||
@ -664,7 +683,7 @@ checkBalanceAssignmentUnassignableAccountB p = do
|
|||||||
unassignable <- R.asks bsUnassignable
|
unassignable <- R.asks bsUnassignable
|
||||||
when (hasBalanceAssignment p && paccount p `S.member` unassignable) $
|
when (hasBalanceAssignment p && paccount p `S.member` unassignable) $
|
||||||
throwError $ chomp $ unlines [
|
throwError $ chomp $ unlines [
|
||||||
"can't use balance assignment with auto postings"
|
"Balance assignments and auto postings may not be combined."
|
||||||
,""
|
,""
|
||||||
,chomp1 $ T.unpack $ maybe (T.unlines $ showPostingLines p) (showTransaction) $ ptransaction p
|
,chomp1 $ T.unpack $ maybe (T.unlines $ showPostingLines p) (showTransaction) $ ptransaction p
|
||||||
,"Balance assignments may not be used on accounts affected by auto posting rules"
|
,"Balance assignments may not be used on accounts affected by auto posting rules"
|
||||||
|
|||||||
@ -40,8 +40,16 @@ journalCheckAccounts j = mapM_ checkacct (journalPostings j)
|
|||||||
where
|
where
|
||||||
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 (unlines [
|
||||||
printf "%s:%d:\n%sundeclared account \"%s\"\n" f l ex a
|
"%s:%d:"
|
||||||
|
,"%s"
|
||||||
|
,"Strict account checking is enabled, and"
|
||||||
|
,"account %s has not been declared."
|
||||||
|
,"Consider adding an account directive. Examples:"
|
||||||
|
,""
|
||||||
|
,"account %s"
|
||||||
|
,"account %s ; type:A ; (L,E,R,X,C,V)"
|
||||||
|
]) f l ex (show a) a a
|
||||||
where
|
where
|
||||||
(f,l,_mcols,ex) = makePostingErrorExcerpt p finderrcols
|
(f,l,_mcols,ex) = makePostingErrorExcerpt p finderrcols
|
||||||
-- Calculate columns suitable for highlighting the excerpt.
|
-- Calculate columns suitable for highlighting the excerpt.
|
||||||
@ -61,7 +69,16 @@ journalCheckCommodities j = mapM_ checkcommodities (journalPostings j)
|
|||||||
case findundeclaredcomm p of
|
case findundeclaredcomm p of
|
||||||
Nothing -> Right ()
|
Nothing -> Right ()
|
||||||
Just (comm, _) ->
|
Just (comm, _) ->
|
||||||
Left $ printf "%s:%d:\n%sundeclared commodity \"%s\"\n" f l ex comm
|
Left $ printf (unlines [
|
||||||
|
"%s:%d:"
|
||||||
|
,"%s"
|
||||||
|
,"Strict commodity checking is enabled, and"
|
||||||
|
,"commodity %s has not been declared."
|
||||||
|
,"Consider adding a commodity directive. Examples:"
|
||||||
|
,""
|
||||||
|
,"commodity %s1000.00"
|
||||||
|
,"commodity 1.000,00 %s"
|
||||||
|
]) f l ex (show comm) comm comm
|
||||||
where
|
where
|
||||||
(f,l,_mcols,ex) = makePostingErrorExcerpt p finderrcols
|
(f,l,_mcols,ex) = makePostingErrorExcerpt p finderrcols
|
||||||
where
|
where
|
||||||
@ -122,7 +139,15 @@ journalCheckPayees 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:\n%sundeclared payee \"%s\"\n" f l ex payee
|
printf (unlines [
|
||||||
|
"%s:%d:"
|
||||||
|
,"%s"
|
||||||
|
,"Strict payee checking is enabled, and"
|
||||||
|
,"payee %s has not been declared."
|
||||||
|
,"Consider adding a payee directive. Examples:"
|
||||||
|
,""
|
||||||
|
,"payee %s"
|
||||||
|
]) f l ex (show payee) payee
|
||||||
where
|
where
|
||||||
payee = transactionPayee t
|
payee = transactionPayee t
|
||||||
(f,l,_mcols,ex) = makeTransactionErrorExcerpt t finderrcols
|
(f,l,_mcols,ex) = makeTransactionErrorExcerpt t finderrcols
|
||||||
|
|||||||
@ -6,10 +6,12 @@ where
|
|||||||
import Control.Monad (forM)
|
import Control.Monad (forM)
|
||||||
import Data.List (groupBy)
|
import Data.List (groupBy)
|
||||||
import Text.Printf (printf)
|
import Text.Printf (printf)
|
||||||
|
import qualified Data.Text as T (pack, unlines)
|
||||||
|
|
||||||
import Hledger.Data.Errors (makeTransactionErrorExcerpt)
|
import Hledger.Data.Errors (makeTransactionErrorExcerpt)
|
||||||
import Hledger.Data.Transaction (transactionFile, transactionDateOrDate2)
|
import Hledger.Data.Transaction (transactionFile, transactionDateOrDate2)
|
||||||
import Hledger.Data.Types
|
import Hledger.Data.Types
|
||||||
|
import Hledger.Utils (textChomp)
|
||||||
|
|
||||||
journalCheckOrdereddates :: WhichDate -> Journal -> Either String ()
|
journalCheckOrdereddates :: WhichDate -> Journal -> Either String ()
|
||||||
journalCheckOrdereddates whichdate j = do
|
journalCheckOrdereddates whichdate j = do
|
||||||
@ -25,13 +27,17 @@ journalCheckOrdereddates whichdate j = do
|
|||||||
FoldAcc{fa_previous=Nothing} -> Right ()
|
FoldAcc{fa_previous=Nothing} -> Right ()
|
||||||
FoldAcc{fa_error=Nothing} -> Right ()
|
FoldAcc{fa_error=Nothing} -> Right ()
|
||||||
FoldAcc{fa_error=Just t, fa_previous=Just tprev} -> Left $ printf
|
FoldAcc{fa_error=Just t, fa_previous=Just tprev} -> Left $ printf
|
||||||
"%s:%d:\n%stransaction date%s is out of order with previous transaction date %s"
|
("%s:%d:\n%s\nOrdered dates checking is enabled, and this transaction's\n"
|
||||||
f l ex datenum tprevdate
|
++ "date%s (%s) is out of order with the previous transaction.\n"
|
||||||
|
++ "Consider moving this entry into date order, or adjusting its date.")
|
||||||
|
f l ex datenum (show $ getdate t)
|
||||||
where
|
where
|
||||||
(f,l,_mcols,ex) = makeTransactionErrorExcerpt t finderrcols
|
(_,_,_,ex1) = makeTransactionErrorExcerpt tprev (const Nothing)
|
||||||
|
(f,l,_,ex2) = makeTransactionErrorExcerpt t finderrcols
|
||||||
|
-- separate the two excerpts by a space-beginning line to help flycheck-hledger parse them
|
||||||
|
ex = T.unlines [textChomp ex1, T.pack " ", textChomp ex2]
|
||||||
finderrcols _t = Just (1, Just 10)
|
finderrcols _t = Just (1, Just 10)
|
||||||
datenum = if whichdate==SecondaryDate then "2" else ""
|
datenum = if whichdate==SecondaryDate then "2" else ""
|
||||||
tprevdate = show $ getdate tprev
|
|
||||||
|
|
||||||
data FoldAcc a b = FoldAcc
|
data FoldAcc a b = FoldAcc
|
||||||
{ fa_error :: Maybe a
|
{ fa_error :: Maybe a
|
||||||
|
|||||||
@ -17,6 +17,7 @@ import Hledger.Data.Errors (makePostingErrorExcerpt)
|
|||||||
import Hledger.Data.Journal (journalPostings, journalAccountNamesUsed)
|
import Hledger.Data.Journal (journalPostings, journalAccountNamesUsed)
|
||||||
import Hledger.Data.Posting (isVirtual)
|
import Hledger.Data.Posting (isVirtual)
|
||||||
import Hledger.Data.Types
|
import Hledger.Data.Types
|
||||||
|
import Hledger.Utils (chomp)
|
||||||
|
|
||||||
-- | 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.
|
||||||
@ -46,9 +47,13 @@ checkposting :: [(Text,[AccountName])] -> Posting -> Either String ()
|
|||||||
checkposting leafandfullnames p@Posting{paccount=a} =
|
checkposting leafandfullnames p@Posting{paccount=a} =
|
||||||
case [lf | lf@(_,fs) <- leafandfullnames, a `elem` fs] of
|
case [lf | lf@(_,fs) <- leafandfullnames, a `elem` fs] of
|
||||||
[] -> Right ()
|
[] -> Right ()
|
||||||
(leaf,fulls):_ -> Left $ printf
|
(leaf,fulls):_ -> Left $ chomp $ printf
|
||||||
"%s:%d:\n%saccount leaf name \"%s\" is not unique\nit is used in account names: %s"
|
("%s:%d:\n%s\nChecking for unique account leaf names is enabled, and\n"
|
||||||
f l ex leaf accts
|
++"account leaf name %s is not unique.\n"
|
||||||
|
++"It appears in these account names:\n%s"
|
||||||
|
++"\nConsider changing these account names so their last parts are different."
|
||||||
|
)
|
||||||
|
f l ex (show leaf) accts
|
||||||
where
|
where
|
||||||
-- t = fromMaybe nulltransaction ptransaction -- XXX sloppy
|
-- t = fromMaybe nulltransaction ptransaction -- XXX sloppy
|
||||||
(f,l,_mcols,ex) = makePostingErrorExcerpt p finderrcols
|
(f,l,_mcols,ex) = makePostingErrorExcerpt p finderrcols
|
||||||
@ -59,4 +64,4 @@ checkposting leafandfullnames p@Posting{paccount=a} =
|
|||||||
llen = T.length $ accountLeafName a
|
llen = T.length $ accountLeafName a
|
||||||
col = 5 + (if isVirtual p then 1 else 0) + alen - llen
|
col = 5 + (if isVirtual p then 1 else 0) + alen - llen
|
||||||
col2 = col + llen - 1
|
col2 = col + llen - 1
|
||||||
accts = T.intercalate ", " $ map (("\""<>).(<>"\"")) fulls
|
accts = T.unlines fulls -- $ map (("\""<>).(<>"\"")) fulls
|
||||||
|
|||||||
@ -498,11 +498,12 @@ datep' mYear = do
|
|||||||
let dateStr = show year ++ [sep1] ++ show month ++ [sep2] ++ show day
|
let dateStr = show year ++ [sep1] ++ show month ++ [sep2] ++ show day
|
||||||
|
|
||||||
when (sep1 /= sep2) $ customFailure $ parseErrorAtRegion startOffset endOffset $
|
when (sep1 /= sep2) $ customFailure $ parseErrorAtRegion startOffset endOffset $
|
||||||
"invalid date: separators are different, should be the same"
|
"This date is malformed because the separators are different.\n"
|
||||||
|
++"Please use consistent separators."
|
||||||
|
|
||||||
case fromGregorianValid year month day of
|
case fromGregorianValid year month day of
|
||||||
Nothing -> customFailure $ parseErrorAtRegion startOffset endOffset $
|
Nothing -> customFailure $ parseErrorAtRegion startOffset endOffset $
|
||||||
"well-formed but invalid date: " ++ dateStr
|
"This date is invalid, please correct it: " ++ dateStr
|
||||||
Just date -> pure $! date
|
Just date -> pure $! date
|
||||||
|
|
||||||
partialDate :: Int -> Maybe Year -> Month -> Char -> MonthDay -> TextParser m Day
|
partialDate :: Int -> Maybe Year -> Month -> Char -> MonthDay -> TextParser m Day
|
||||||
@ -512,12 +513,13 @@ datep' mYear = do
|
|||||||
Just year ->
|
Just year ->
|
||||||
case fromGregorianValid year month day of
|
case fromGregorianValid year month day of
|
||||||
Nothing -> customFailure $ parseErrorAtRegion startOffset endOffset $
|
Nothing -> customFailure $ parseErrorAtRegion startOffset endOffset $
|
||||||
"well-formed but invalid date: " ++ dateStr
|
"This date is invalid, please correct it: " ++ dateStr
|
||||||
Just date -> pure $! date
|
Just date -> pure $! date
|
||||||
where dateStr = show year ++ [sep] ++ show month ++ [sep] ++ show day
|
where dateStr = show year ++ [sep] ++ show month ++ [sep] ++ show day
|
||||||
|
|
||||||
Nothing -> customFailure $ parseErrorAtRegion startOffset endOffset $
|
Nothing -> customFailure $ parseErrorAtRegion startOffset endOffset $
|
||||||
"partial date "++dateStr++" found, but the current year is unknown"
|
"The partial date "++dateStr++" can not be parsed because the current year is unknown.\n"
|
||||||
|
++"Consider making it a full date, or add a default year directive.\n"
|
||||||
where dateStr = show month ++ [sep] ++ show day
|
where dateStr = show month ++ [sep] ++ show day
|
||||||
|
|
||||||
{-# INLINABLE datep' #-}
|
{-# INLINABLE datep' #-}
|
||||||
|
|||||||
@ -134,7 +134,7 @@ toRegexCI = memo $ \s -> mkRegexErr s (RegexpCI s <$> makeRegexOptsM defaultComp
|
|||||||
-- | Make a nice error message for a regexp error.
|
-- | Make a nice error message for a regexp error.
|
||||||
mkRegexErr :: Text -> Maybe a -> Either RegexError a
|
mkRegexErr :: Text -> Maybe a -> Either RegexError a
|
||||||
mkRegexErr s = maybe (Left errmsg) Right
|
mkRegexErr s = maybe (Left errmsg) Right
|
||||||
where errmsg = T.unpack $ "this regular expression could not be compiled: " <> s
|
where errmsg = T.unpack $ "This regular expression is malformed, please correct it:\n" <> s
|
||||||
|
|
||||||
-- Convert a Regexp string to a compiled Regex, throw an error
|
-- Convert a Regexp string to a compiled Regex, throw an error
|
||||||
toRegex' :: Text -> Regexp
|
toRegex' :: Text -> Regexp
|
||||||
|
|||||||
@ -120,8 +120,10 @@ parseErrorAtRegion
|
|||||||
-> HledgerParseErrorData
|
-> HledgerParseErrorData
|
||||||
parseErrorAtRegion startOffset endOffset msg =
|
parseErrorAtRegion startOffset endOffset msg =
|
||||||
if startOffset < endOffset
|
if startOffset < endOffset
|
||||||
then ErrorFailAt startOffset endOffset msg
|
then ErrorFailAt startOffset endOffset msg'
|
||||||
else ErrorFailAt startOffset (startOffset+1) msg
|
else ErrorFailAt startOffset (startOffset+1) msg'
|
||||||
|
where
|
||||||
|
msg' = "\n" ++ msg
|
||||||
|
|
||||||
|
|
||||||
--- * Re-parsing
|
--- * Re-parsing
|
||||||
|
|||||||
@ -10,7 +10,7 @@ $ hledger -f- check accounts
|
|||||||
2020-01-01
|
2020-01-01
|
||||||
(a) 1
|
(a) 1
|
||||||
$ hledger -f- check accounts
|
$ hledger -f- check accounts
|
||||||
>2 /undeclared account "a"/
|
>2 /account "a" has not been declared/
|
||||||
>=1
|
>=1
|
||||||
|
|
||||||
# 3. also fails for forecast accounts
|
# 3. also fails for forecast accounts
|
||||||
@ -20,12 +20,12 @@ account a
|
|||||||
a $1
|
a $1
|
||||||
b
|
b
|
||||||
$ hledger -f- --today 2022-01-01 --forecast check accounts
|
$ hledger -f- --today 2022-01-01 --forecast check accounts
|
||||||
>2 /undeclared account "b"/
|
>2 /account "b" has not been declared/
|
||||||
>=1
|
>=1
|
||||||
|
|
||||||
# 4. also fails in --strict mode
|
# 4. also fails in --strict mode
|
||||||
$ hledger -f- --today 2022-01-01 --forecast --strict bal
|
$ hledger -f- --today 2022-01-01 --forecast --strict bal
|
||||||
>2 /undeclared account "b"/
|
>2 /account "b" has not been declared/
|
||||||
>=1
|
>=1
|
||||||
|
|
||||||
# 5. also fails for auto accounts
|
# 5. also fails for auto accounts
|
||||||
@ -40,10 +40,10 @@ account a
|
|||||||
|
|
||||||
2022-02-01
|
2022-02-01
|
||||||
$ hledger -f- --auto check accounts
|
$ hledger -f- --auto check accounts
|
||||||
>2 /undeclared account "b"/
|
>2 /account "b" has not been declared/
|
||||||
>=1
|
>=1
|
||||||
|
|
||||||
# 6. also fails in --strict mode
|
# 6. also fails in --strict mode
|
||||||
$ hledger -f- --auto --strict bal
|
$ hledger -f- --auto --strict bal
|
||||||
>2 /undeclared account "b"/
|
>2 /account "b" has not been declared/
|
||||||
>=1
|
>=1
|
||||||
|
|||||||
@ -10,7 +10,7 @@ $ hledger -f- check commodities
|
|||||||
2020-01-01
|
2020-01-01
|
||||||
(a) $1
|
(a) $1
|
||||||
$ hledger -f- check commodities
|
$ hledger -f- check commodities
|
||||||
>2 /undeclared commodity "\$"/
|
>2 /commodity "\$" has not been declared/
|
||||||
>=1
|
>=1
|
||||||
|
|
||||||
# 3. But commodityless zero amounts will not fail
|
# 3. But commodityless zero amounts will not fail
|
||||||
@ -27,5 +27,5 @@ $ hledger -f- check commodities
|
|||||||
(a) $0
|
(a) $0
|
||||||
|
|
||||||
$ hledger -f- check commodities
|
$ hledger -f- check commodities
|
||||||
>2 /undeclared commodity "\$"/
|
>2 /commodity "\$" has not been declared/
|
||||||
>=1
|
>=1
|
||||||
|
|||||||
@ -12,7 +12,7 @@ $ hledger -f- check ordereddates
|
|||||||
2020-01-01
|
2020-01-01
|
||||||
(a) 1
|
(a) 1
|
||||||
$ hledger -f- check ordereddates
|
$ hledger -f- check ordereddates
|
||||||
>2 /transaction date is out of order/
|
>2 /date .*is out of order/
|
||||||
>=1
|
>=1
|
||||||
|
|
||||||
# With --date2, it checks secondary dates instead
|
# With --date2, it checks secondary dates instead
|
||||||
@ -26,7 +26,7 @@ $ hledger -f- check ordereddates --date2
|
|||||||
2020-01-01=2020-01-03
|
2020-01-01=2020-01-03
|
||||||
2020-01-02
|
2020-01-02
|
||||||
$ hledger -f- check ordereddates --date2
|
$ hledger -f- check ordereddates --date2
|
||||||
>2 /transaction date2 is out of order/
|
>2 /date2 .*is out of order/
|
||||||
>=1
|
>=1
|
||||||
|
|
||||||
# XXX not supported: With a query, only matched transactions' dates are checked.
|
# XXX not supported: With a query, only matched transactions' dates are checked.
|
||||||
|
|||||||
@ -9,7 +9,7 @@ $ hledger -f - check payees
|
|||||||
<
|
<
|
||||||
2020-01-01 foo
|
2020-01-01 foo
|
||||||
$ hledger -f - check payees
|
$ hledger -f - check payees
|
||||||
>2 /undeclared payee "foo"/
|
>2 /payee "foo" has not been declared/
|
||||||
>=1
|
>=1
|
||||||
|
|
||||||
# or:
|
# or:
|
||||||
@ -17,5 +17,5 @@ $ hledger -f - check payees
|
|||||||
payee foo
|
payee foo
|
||||||
2020-01-01 the payee | foo
|
2020-01-01 the payee | foo
|
||||||
$ hledger -f - check payees
|
$ hledger -f - check payees
|
||||||
>2 /undeclared payee "the payee"/
|
>2 /payee "the payee" has not been declared/
|
||||||
>=1
|
>=1
|
||||||
|
|||||||
@ -160,7 +160,7 @@ $ hledger -f- print --auto -x
|
|||||||
|
|
||||||
# 9.
|
# 9.
|
||||||
$ hledger print -f- --auto
|
$ hledger print -f- --auto
|
||||||
>2 /can't use balance assignment with auto postings/
|
>2 /Balance assignments and auto postings may not be combined/
|
||||||
>=1
|
>=1
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -225,7 +225,7 @@ $ hledger -f - stats
|
|||||||
b =$-1 ; date:2012/1/1
|
b =$-1 ; date:2012/1/1
|
||||||
|
|
||||||
$ hledger -f - stats
|
$ hledger -f - stats
|
||||||
>2 /can't use balance assignment with custom posting date/
|
>2 /Balance assignments and custom posting dates may not be combined/
|
||||||
>=1
|
>=1
|
||||||
|
|
||||||
# 13. Posting Date
|
# 13. Posting Date
|
||||||
|
|||||||
@ -5,7 +5,7 @@ hledger -f- print
|
|||||||
2010/31/12 x
|
2010/31/12 x
|
||||||
a 1
|
a 1
|
||||||
b
|
b
|
||||||
>>>2 /invalid date/
|
>>>2 /date is invalid/
|
||||||
>>>= 1
|
>>>= 1
|
||||||
# 2. too-large day
|
# 2. too-large day
|
||||||
hledger -f- print
|
hledger -f- print
|
||||||
@ -13,7 +13,7 @@ hledger -f- print
|
|||||||
2010/12/32 x
|
2010/12/32 x
|
||||||
a 1
|
a 1
|
||||||
b
|
b
|
||||||
>>>2 /invalid date/
|
>>>2 /date is invalid/
|
||||||
>>>= 1
|
>>>= 1
|
||||||
# 3. 29th feb on leap year should be ok
|
# 3. 29th feb on leap year should be ok
|
||||||
hledger -f- print
|
hledger -f- print
|
||||||
@ -33,7 +33,7 @@ hledger -f- print
|
|||||||
2001/2/29 x
|
2001/2/29 x
|
||||||
a 1
|
a 1
|
||||||
b
|
b
|
||||||
>>>2 /invalid date/
|
>>>2 /date is invalid/
|
||||||
>>>= 1
|
>>>= 1
|
||||||
# 5. dates must be followed by whitespace or newline
|
# 5. dates must be followed by whitespace or newline
|
||||||
hledger -f- print
|
hledger -f- print
|
||||||
|
|||||||
@ -128,8 +128,10 @@ hledger: Error: -:1-3:
|
|||||||
| a 1A
|
| a 1A
|
||||||
| b 1B
|
| b 1B
|
||||||
|
|
||||||
This transaction is unbalanced.
|
This multi-commodity transaction is unbalanced.
|
||||||
The real postings all have the same sign.
|
The real postings all have the same sign. Consider negating some of them.
|
||||||
|
Consider adjusting this entry's amounts, adding missing postings,
|
||||||
|
or recording conversion price(s) with @, @@ or equity postings.
|
||||||
>=1
|
>=1
|
||||||
|
|
||||||
# 12. Typical "hledger equity --close" transaction does not trigger sign error.
|
# 12. Typical "hledger equity --close" transaction does not trigger sign error.
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user