lib: save account directive positions, for troubleshooting (#1909)
This commit is contained in:
parent
f5680529cd
commit
3d6e363461
@ -49,7 +49,7 @@ import Data.Time.Clock.POSIX (POSIXTime)
|
|||||||
import Data.Time.LocalTime (LocalTime)
|
import Data.Time.LocalTime (LocalTime)
|
||||||
import Data.Word (Word8)
|
import Data.Word (Word8)
|
||||||
import Text.Blaze (ToMarkup(..))
|
import Text.Blaze (ToMarkup(..))
|
||||||
import Text.Megaparsec (SourcePos)
|
import Text.Megaparsec (SourcePos(SourcePos), mkPos)
|
||||||
|
|
||||||
import Hledger.Utils.Regex
|
import Hledger.Utils.Regex
|
||||||
|
|
||||||
@ -585,12 +585,14 @@ data AccountDeclarationInfo = AccountDeclarationInfo {
|
|||||||
,aditags :: [Tag] -- ^ tags extracted from the account comment, if any
|
,aditags :: [Tag] -- ^ tags extracted from the account comment, if any
|
||||||
,adideclarationorder :: Int -- ^ the order in which this account was declared,
|
,adideclarationorder :: Int -- ^ the order in which this account was declared,
|
||||||
-- relative to other account declarations, during parsing (1..)
|
-- relative to other account declarations, during parsing (1..)
|
||||||
|
,adisourcepos :: SourcePos -- ^ source file and position
|
||||||
} deriving (Eq,Show,Generic)
|
} deriving (Eq,Show,Generic)
|
||||||
|
|
||||||
nullaccountdeclarationinfo = AccountDeclarationInfo {
|
nullaccountdeclarationinfo = AccountDeclarationInfo {
|
||||||
adicomment = ""
|
adicomment = ""
|
||||||
,aditags = []
|
,aditags = []
|
||||||
,adideclarationorder = 0
|
,adideclarationorder = 0
|
||||||
|
,adisourcepos = SourcePos "" (mkPos 1) (mkPos 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
-- | An account, with its balances, parent/subaccount relationships, etc.
|
-- | An account, with its balances, parent/subaccount relationships, etc.
|
||||||
|
|||||||
@ -344,6 +344,7 @@ orRethrowIOError io msg = do
|
|||||||
accountdirectivep :: JournalParser m ()
|
accountdirectivep :: JournalParser m ()
|
||||||
accountdirectivep = do
|
accountdirectivep = do
|
||||||
off <- getOffset -- XXX figure out a more precise position later
|
off <- getOffset -- XXX figure out a more precise position later
|
||||||
|
pos <- getSourcePos
|
||||||
|
|
||||||
string "account"
|
string "account"
|
||||||
lift skipNonNewlineSpaces1
|
lift skipNonNewlineSpaces1
|
||||||
@ -363,7 +364,7 @@ accountdirectivep = do
|
|||||||
metype = parseAccountTypeCode <$> lookup accountTypeTagName tags
|
metype = parseAccountTypeCode <$> lookup accountTypeTagName tags
|
||||||
|
|
||||||
-- update the journal
|
-- update the journal
|
||||||
addAccountDeclaration (acct, cmt, tags)
|
addAccountDeclaration (acct, cmt, tags, pos)
|
||||||
unless (null tags) $ addDeclaredAccountTags acct tags
|
unless (null tags) $ addDeclaredAccountTags acct tags
|
||||||
case metype of
|
case metype of
|
||||||
Nothing -> return ()
|
Nothing -> return ()
|
||||||
@ -396,18 +397,19 @@ parseAccountTypeCode s =
|
|||||||
T.intercalate ", " ["A","L","E","R","X","C","V","Asset","Liability","Equity","Revenue","Expense","Cash","Conversion"]
|
T.intercalate ", " ["A","L","E","R","X","C","V","Asset","Liability","Equity","Revenue","Expense","Cash","Conversion"]
|
||||||
|
|
||||||
-- Add an account declaration to the journal, auto-numbering it.
|
-- Add an account declaration to the journal, auto-numbering it.
|
||||||
addAccountDeclaration :: (AccountName,Text,[Tag]) -> JournalParser m ()
|
addAccountDeclaration :: (AccountName,Text,[Tag],SourcePos) -> JournalParser m ()
|
||||||
addAccountDeclaration (a,cmt,tags) =
|
addAccountDeclaration (a,cmt,tags,pos) = do
|
||||||
modify' (\j ->
|
modify' (\j ->
|
||||||
let
|
let
|
||||||
decls = jdeclaredaccounts j
|
decls = jdeclaredaccounts j
|
||||||
d = (a, nullaccountdeclarationinfo{
|
d = (a, nullaccountdeclarationinfo{
|
||||||
adicomment = cmt
|
adicomment = cmt
|
||||||
,aditags = tags
|
,aditags = tags
|
||||||
|
-- this restarts from 1 in each file, which is not that useful
|
||||||
|
-- when there are multiple files; so it gets renumbered
|
||||||
|
-- automatically when combining Journals with <>
|
||||||
,adideclarationorder = length decls + 1
|
,adideclarationorder = length decls + 1
|
||||||
-- this restarts from 1 in each file, which is not that useful
|
,adisourcepos = pos
|
||||||
-- when there are multiple files; so it gets renumbered
|
|
||||||
-- automatically when combining Journals with <>
|
|
||||||
})
|
})
|
||||||
in
|
in
|
||||||
j{jdeclaredaccounts = d:decls})
|
j{jdeclaredaccounts = d:decls})
|
||||||
@ -1017,6 +1019,7 @@ tests_JournalReader = testGroup "JournalReader" [
|
|||||||
[("a:b", AccountDeclarationInfo{adicomment = "type:asset\n"
|
[("a:b", AccountDeclarationInfo{adicomment = "type:asset\n"
|
||||||
,aditags = [("type","asset")]
|
,aditags = [("type","asset")]
|
||||||
,adideclarationorder = 1
|
,adideclarationorder = 1
|
||||||
|
,adisourcepos = fst nullsourcepos
|
||||||
})
|
})
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user