lib: add a field to 'Journal' for a stack of include files
- In anticipation of megaparsec 7, which removes support for stacks of
  include files (as far as I can tell)
- Intended for the 'StateT Journal' layer of the parser
  - A stack of include files would be better in a 'ReaderT' layer, but I
    don't want to add another layer to the parser
- Intended for detecting cycles of include files
  - Potential issue: for proper error messages for include file cycles,
    we must remember to provide the filepath of the root journal file via
    the initial journal state passed to a 'JournalParser'; I imagine
    that we may forget to do so because in all other cases it is okay
    not to do so.
			
			
This commit is contained in:
		
							parent
							
								
									743098034b
								
							
						
					
					
						commit
						5e1f0ba6f7
					
				| @ -163,6 +163,7 @@ instance Sem.Semigroup Journal where | ||||
|     ,jparsealiases              = jparsealiases              j2 | ||||
|     -- ,jparsetransactioncount     = jparsetransactioncount     j1 +  jparsetransactioncount     j2 | ||||
|     ,jparsetimeclockentries = jparsetimeclockentries j1 <> jparsetimeclockentries j2 | ||||
|     ,jincludefilestack          = jincludefilestack          j2 | ||||
|     ,jdeclaredaccounts                  = jdeclaredaccounts                  j1 <> jdeclaredaccounts                  j2 | ||||
|     ,jcommodities               = jcommodities               j1 <> jcommodities               j2 | ||||
|     ,jinferredcommodities       = jinferredcommodities       j1 <> jinferredcommodities       j2 | ||||
| @ -189,8 +190,9 @@ nulljournal = Journal { | ||||
|   ,jparseparentaccounts       = [] | ||||
|   ,jparsealiases              = [] | ||||
|   -- ,jparsetransactioncount     = 0 | ||||
|   ,jparsetimeclockentries = [] | ||||
|   ,jdeclaredaccounts                  = [] | ||||
|   ,jparsetimeclockentries     = [] | ||||
|   ,jincludefilestack          = [] | ||||
|   ,jdeclaredaccounts          = [] | ||||
|   ,jcommodities               = M.fromList [] | ||||
|   ,jinferredcommodities       = M.fromList [] | ||||
|   ,jmarketprices              = [] | ||||
|  | ||||
| @ -363,6 +363,7 @@ data Journal = Journal { | ||||
|   ,jparsealiases          :: [AccountAlias]                        -- ^ the current account name aliases in effect, specified by alias directives (& options ?) | ||||
|   -- ,jparsetransactioncount :: Integer                               -- ^ the current count of transactions parsed so far (only journal format txns, currently) | ||||
|   ,jparsetimeclockentries :: [TimeclockEntry]                       -- ^ timeclock sessions which have not been clocked out | ||||
|   ,jincludefilestack      :: [FilePath] | ||||
|   -- principal data | ||||
|   ,jdeclaredaccounts      :: [AccountName]                          -- ^ Accounts declared by account directives, in parse order (after journal finalisation)  | ||||
|   ,jcommodities           :: M.Map CommoditySymbol Commodity        -- ^ commodities and formats declared by commodity directives | ||||
|  | ||||
| @ -226,7 +226,10 @@ parseAndFinaliseJournal :: JournalParser IO ParsedJournal -> InputOpts | ||||
| parseAndFinaliseJournal parser iopts f txt = do | ||||
|   t <- liftIO getClockTime | ||||
|   y <- liftIO getCurrentYear | ||||
|   ep <- liftIO $ runParserT (evalStateT parser nulljournal {jparsedefaultyear=Just y}) f txt | ||||
|   let initJournal = nulljournal | ||||
|         { jparsedefaultyear = Just y | ||||
|         , jincludefilestack = [f] } | ||||
|   ep <- liftIO $ runParserT (evalStateT parser initJournal) f txt | ||||
|   case ep of | ||||
|     Right pj ->  | ||||
|       let pj' = if auto_ iopts then applyTransactionModifiers pj else pj in | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user