From e17cd1540d4b1c1a3b51d0b286c214d2c262c499 Mon Sep 17 00:00:00 2001 From: Stephen Morgan Date: Tue, 1 Feb 2022 16:04:03 +1100 Subject: [PATCH] fix: Correctly infer Cash accounts using accountNameInferType. --- hledger-lib/Hledger/Data/AccountName.hs | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/hledger-lib/Hledger/Data/AccountName.hs b/hledger-lib/Hledger/Data/AccountName.hs index 0cdc5115b..df617da28 100644 --- a/hledger-lib/Hledger/Data/AccountName.hs +++ b/hledger-lib/Hledger/Data/AccountName.hs @@ -99,16 +99,16 @@ revenueAccountRegex = toRegexCI' "^(income|revenue)s?(:|$)" expenseAccountRegex = toRegexCI' "^expenses?(:|$)" -- | Try to guess an account's type from its name, --- matching common english top-level account names. +-- matching common English top-level account names. accountNameInferType :: AccountName -> Maybe AccountType accountNameInferType a - | regexMatchText cashAccountRegex a = Just Cash - | regexMatchText assetAccountRegex a = Just Asset + | a == "asset" || a == "assets" = Just Asset + | regexMatchText assetAccountRegex a = Just $ if regexMatchText cashAccountRegex a then Asset else Cash | regexMatchText liabilityAccountRegex a = Just Liability | regexMatchText equityAccountRegex a = Just Equity | regexMatchText revenueAccountRegex a = Just Revenue | regexMatchText expenseAccountRegex a = Just Expense - | otherwise = Nothing + | otherwise = Nothing accountNameLevel :: AccountName -> Int accountNameLevel "" = 0 @@ -283,5 +283,15 @@ tests_AccountName = testGroup "AccountName" [ "assets:bank" `isSubAccountNameOf` "assets" @?= True "assets:bank:checking" `isSubAccountNameOf` "assets" @?= False "assets:bank" `isSubAccountNameOf` "my assets" @?= False + ,testCase "accountNameInferType" $ do + accountNameInferType "assets" @?= Just Asset + accountNameInferType "assets:cash" @?= Just Cash + accountNameInferType "assets:A/R" @?= Just Asset + accountNameInferType "liabilities" @?= Just Liability + accountNameInferType "equity" @?= Just Equity + accountNameInferType "expenses" @?= Just Expense + accountNameInferType "revenues" @?= Just Revenue + accountNameInferType "revenue" @?= Just Revenue + accountNameInferType "income" @?= Just Revenue ]