cln: register: Remove unused knot-tying code.
The conclusion is that trying to tie that knot will inevitably lead to linear memory consumption; any solution which avoids this, if it exists, will need significantly different code. cf. https://stackoverflow.com/questions/66563595/can-i-exploit-lazy-evaluation-to-reference-future-values-without-space-leaks
This commit is contained in:
parent
59b89947eb
commit
90fd2a9aaf
@ -24,7 +24,6 @@ import qualified Data.Text as T
|
|||||||
import qualified Data.Text.Lazy as TL
|
import qualified Data.Text.Lazy as TL
|
||||||
import qualified Data.Text.Lazy.Builder as TB
|
import qualified Data.Text.Lazy.Builder as TB
|
||||||
import System.Console.CmdArgs.Explicit (flagNone, flagReq)
|
import System.Console.CmdArgs.Explicit (flagNone, flagReq)
|
||||||
import Safe (maximumDef)
|
|
||||||
|
|
||||||
import Hledger
|
import Hledger
|
||||||
import Hledger.Read.CsvReader (CSV, CsvRecord, printCSV)
|
import Hledger.Read.CsvReader (CSV, CsvRecord, printCSV)
|
||||||
@ -95,16 +94,11 @@ postingsReportItemAsCsvRecord (_, _, _, p, b) = [idx,date,code,desc,acct,amt,bal
|
|||||||
|
|
||||||
-- | Render a register report as plain text suitable for console output.
|
-- | Render a register report as plain text suitable for console output.
|
||||||
postingsReportAsText :: CliOpts -> PostingsReport -> TL.Text
|
postingsReportAsText :: CliOpts -> PostingsReport -> TL.Text
|
||||||
postingsReportAsText opts items = TB.toLazyText $ foldMap first3 linesWithWidths
|
postingsReportAsText opts items = TB.toLazyText lines
|
||||||
where
|
where
|
||||||
linesWithWidths = map (postingsReportItemAsText opts amtwidth balwidth) items
|
lines = foldMap (postingsReportItemAsText opts amtwidth balwidth) items
|
||||||
-- Tying this knot seems like it will save work, but ends up creating a big
|
|
||||||
-- space leak. Can we fix that leak without recalculating everything?
|
|
||||||
-- amtwidth = maximum $ 12 : map second3 linesWithWidths
|
|
||||||
-- balwidth = maximum $ 12 : map third3 linesWithWidths
|
|
||||||
amtwidth = maximumStrict $ 12 : widths (map itemamt items)
|
amtwidth = maximumStrict $ 12 : widths (map itemamt items)
|
||||||
balwidth = maximumStrict $ 12 : widths (map itembal items)
|
balwidth = maximumStrict $ 12 : widths (map itembal items)
|
||||||
-- Since postingsReport strips prices from all Amounts when not used, we can display prices.
|
|
||||||
widths = map wbWidth . concatMap (showMixedAmountLinesB oneLine)
|
widths = map wbWidth . concatMap (showMixedAmountLinesB oneLine)
|
||||||
itemamt (_,_,_,Posting{pamount=a},_) = a
|
itemamt (_,_,_,Posting{pamount=a},_) = a
|
||||||
itembal (_,_,_,_,a) = a
|
itembal (_,_,_,_,a) = a
|
||||||
@ -133,9 +127,9 @@ postingsReportAsText opts items = TB.toLazyText $ foldMap first3 linesWithWidths
|
|||||||
--
|
--
|
||||||
-- Also returns the natural width (without padding) of the amount and balance
|
-- Also returns the natural width (without padding) of the amount and balance
|
||||||
-- fields.
|
-- fields.
|
||||||
postingsReportItemAsText :: CliOpts -> Int -> Int -> PostingsReportItem -> (TB.Builder, Int, Int)
|
postingsReportItemAsText :: CliOpts -> Int -> Int -> PostingsReportItem -> TB.Builder
|
||||||
postingsReportItemAsText opts preferredamtwidth preferredbalwidth (mdate, mperiod, mdesc, p, b) =
|
postingsReportItemAsText opts preferredamtwidth preferredbalwidth (mdate, mperiod, mdesc, p, b) =
|
||||||
(table <> TB.singleton '\n', thisamtwidth, thisbalwidth)
|
table <> TB.singleton '\n'
|
||||||
where
|
where
|
||||||
table = renderRowB def{tableBorders=False, borderSpaces=False} . Group NoLine $ map Header
|
table = renderRowB def{tableBorders=False, borderSpaces=False} . Group NoLine $ map Header
|
||||||
[ textCell TopLeft $ fitText (Just datewidth) (Just datewidth) True True date
|
[ textCell TopLeft $ fitText (Just datewidth) (Just datewidth) True True date
|
||||||
@ -187,10 +181,6 @@ postingsReportItemAsText opts preferredamtwidth preferredbalwidth (mdate, mperio
|
|||||||
amt = showamt $ pamount p
|
amt = showamt $ pamount p
|
||||||
bal = showamt b
|
bal = showamt b
|
||||||
showamt = showMixedAmountLinesB oneLine{displayColour=color_ . _rsReportOpts $ reportspec_ opts}
|
showamt = showMixedAmountLinesB oneLine{displayColour=color_ . _rsReportOpts $ reportspec_ opts}
|
||||||
-- Since this will usually be called with the knot tied between this(amt|bal)width and
|
|
||||||
-- preferred(amt|bal)width, make sure the former do not depend on the latter to avoid loops.
|
|
||||||
thisamtwidth = maximumDef 0 $ map wbWidth amt
|
|
||||||
thisbalwidth = maximumDef 0 $ map wbWidth bal
|
|
||||||
|
|
||||||
-- tests
|
-- tests
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user