diff --git a/CHANGES.md b/CHANGES.md index 7a0aba5cc..0c7bb7ee0 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,15 +1,21 @@ General/project-related changes in the hledger project. For package-specific changes, see the package changelogs. -# 093c11ec +# f39938d7 +- examples: stripe csv +- The functional tests in tests/ have been moved into the respective + packages, eg hledger/test/ and hledger-ui/test/. -- benchmarks: run just the slowest commands; add some large tabular reports +- Shake cabalfiles: now gives an error when it fails -- tools: use pretty-simple for ghci output +- make bench: add some large tabular reports; + run just the slowest commands by default; + run after make (func)test -- tools: add hie.yaml, hls now works with hledger +- a hie.yaml file has been added, so hledger source loads + easily in IDEs supporting haskell-language-server # 1.19.1 2020-09-07 diff --git a/hledger-lib/CHANGES.md b/hledger-lib/CHANGES.md index 16b241258..cc8f6188d 100644 --- a/hledger-lib/CHANGES.md +++ b/hledger-lib/CHANGES.md @@ -1,7 +1,24 @@ Internal/api/developer-ish changes in the hledger-lib (and hledger) packages. For user-visible changes, see the hledger package changelog. -# 093c11ec +# 3662977c + +- Reverted a stripAnsi change in 1.19.1 that caused a 3x slowdown of amount rendering + in terminal reports. (#1350) + +- Amount and table rendering has been improved, so that stripAnsi is no longer needed. + This speeds up amount rendering in the terminal, speeding up some reports by 10% or more since 1.19. + (Stephen Morgan) + +- global commodity display styles can now be set in InputOpts or Journal, + overriding all others (declared or inferred). This is used by the import + command and probably command-line options in future. + +- Journal keeps a new piece of parsing state, a decimal mark character, + which can optionally be set to force the number format expected by all + amount parsers. + +- Remove Empty Query constructor, which does nothing and has done so for a very long time. (Stephen Morgan) - In ReportOpts, store query terms term-by-term in a list in querystring_. (Stephen Morgan) This helps deal with tricky quoting issues, as we no longer have to make @@ -25,73 +42,81 @@ For user-visible changes, see the hledger package changelog. - Export some MultiBalanceReport helper functions. (Stephen Morgan) -- Introduce ReportSpec, which holds ReportOpts, the day of the report, and the parsed Query. (Stephen Morgan) - -- Remove old impure ReportOpts date functions. (Stephen Morgan) - - Make Default instances clearer, remove Default instance for Bool. (Stephen Morgan) -- Store the original query string in ReportOpts, provide a function for regenerating ReportOpts. (Stephen Morgan) +- Many ReportOpts-related changes, such as the addition of ReportSpec, aimed + at preventing runtime errors (from parsing: regexps, dates, format strings; + from not having today's date set; etc.) + ReportSpec holds a ReportOpts, the day of the report, and the Query generated from these. -- Ensure ReportOpts always has today_ set. (Stephen Morgan) - -- Make sure reportspan doesn't interfere with correctly determining valuation date. (Stephen Morgan) - -- Store parsed Query in ReportOpts, rather than an unparsed String. (Stephen Morgan) - -- Store StringFormat in ReportOpts, rather than unparsed String. (Stephen Morgan) - StringFormat now also takes an optional overline width, which is - currently only used by defaultBalanceLineFormat. - -- Remove checkReportOpts and checkRawOpts. (Stephen Morgan) - checkRawOpts has been a no-op for at least four years, and - checkReportOpts only makes sure that depth_ is positive, which is taken - care of by the maybeposintopt parser. - -- For ymd date parsing, don't consume invalid date components. (Stephen Morgan) +- StringFormat now takes an optional overline width, which is + currently only used by defaultBalanceLineFormat. (Stephen Morgan) - quoteIfNeeded should not escape the backslashes in unicode code points. (Stephen Morgan) -- fix error when P directive has a zero price (#1373) - - Export OrdPlus and constructors. (Stephen Morgan) -- fix a slowdown with report rendering in 1.19.1 (#1350) - stripAnsi is called many times during rendering (by strWidth), so - should be fast. It was originally a regex replacement, and more - recently a custom parser. The parser was slower, particularly the one - in 1.19.1. See #1350, and this rough test: +- Debug output now uses pretty-simple instead pretty-show. + This hopefully gives overall nicer debug output (eg in colour), + including for values which don't have Read-able Show output. + This means that we can start removing custom Show instances + that were a workaround for pretty-show. Eg account names + in debug output no longer show their colons as underscores. - time118ish = timeIt $ print $ length $ concat $ map (fromRight undefined . regexReplace (toRegex' "\ESC\\[([0-9]+;)*([0-9]+)?[ABCDHJKfmsu]") "") testdata - time119 = timeparser (many (takeWhile1P Nothing (/='\ESC') <|> "" <$ ansi)) - time1191 = timeparser (many ("" <$ try ansi <|> pure <$> anySingle)) - timeparser p = timeIt $ print $ length $ concat $ map (concat . fromJust . parseMaybe p) testdata - testdata = concat $ replicate 10000 - [ "2008-01-01 income assets:bank:checking $1 $1" - , "2008-06-01 gift assets:bank:checking $1 $2" - , "2008-06-02 save assets:bank:saving $1 $3" - , " assets:bank:checking ..m$-1\ESC[m\ESC[m $2" - , "2008-06-03 eat & shop assets:cash ..m$-2\ESC[m\ESC[m 0" - , "2008-12-31 pay off assets:bank:checking ..m$-1\ESC[m\ESC[m ..m$-1\ESC[m\ESC[m" - ] + Here's some old pretty-show output: - ghci> time118ish - 4560000 - CPU time: 0.17s - ghci> time119 - 4560000 - CPU time: 0.91s - ghci> time1191 - 4560000 - CPU time: 2.76s + CsvRules + { rdirectives = [ ( "skip" , "1" ) ] + , rcsvfieldindexes = [ ( "date" , 1 ) , ( "amount" , 2 ) ] + , rassignments = [ ( "amount" , "%2" ) , ( "date" , "%1" ) ] + , rconditionalblocks = [] + } - Possibly a more careful parser could beat regexReplace. Note the - latter does memoisation, which could be faster and/or could also use - more resident memory in some situations. + And the new pretty-simple output: - Ideally we would calculate all widths before adding ANSI colour codes, - so we wouldn't have to wastefully strip them. + CsvRules + { rdirectives= + [ ( "skip", "1" ) ] + , rcsvfieldindexes= + [ ( "date", 1 ), ( "amount", 2 ) ] + , rassignments= + [ ( "amount", "%2" ), ( "date", "%1" ) ] + , rconditionalblocks= [] + } + We require pretty-simple 4.0.0.0 to get this compact output. + It's a little less compact than pretty-show, but not too bad. + Non-compact pretty-simple output would be: + + CsvRules + { rdirectives= + [ + ( "skip" + , "1B" + ) + ] + , rcsvfieldindexes= + [ + ( "date" + , 1 + ) + , + ( "amount" + , 2 + ) + ] + , rassignments= + [ + ( "amount" + , "%2" + ) + , + ( "date" + , "%1" + ) + ] + , rconditionalblocks=[] + } # 1.19.1 2020-09-07 diff --git a/hledger-ui/CHANGES.md b/hledger-ui/CHANGES.md index 9a29c7c38..041daa872 100644 --- a/hledger-ui/CHANGES.md +++ b/hledger-ui/CHANGES.md @@ -1,13 +1,21 @@ User-visible changes in hledger-ui. See also the hledger changelog. -# 093c11ec +# 3662977c + +- When entering a query with `/`, malformed queries/regular expressions + no longer cause the program to exit. (Stephen Morgan) - Eliding of multicommodity amounts now makes better use of available space. (Stephen Morgan) -- E ignores file extension, should help positioning on windows +- `E` now parses the `HLEDGER_UI_EDITOR` or `EDITOR` environment variable + correctly on Windows (ignoring the file extension), so if you have that set + it should be better at opening your editor at the correct line. -- E supports positioning when EDITOR is code (VS Code) (#1359) +- `E` now supports positioning when `HLEDGER_UI_EDITOR` or `EDITOR` + is VS Code ("`code`") (#1359) + +- hledger-ui now has a (human-powered) test suite. # 1.19.1 2020-09-07 diff --git a/hledger-web/CHANGES.md b/hledger-web/CHANGES.md index b7cf3d228..e460e2291 100644 --- a/hledger-web/CHANGES.md +++ b/hledger-web/CHANGES.md @@ -1,18 +1,19 @@ User-visible changes in hledger-web. See also the hledger changelog. -# 093c11ec +# 3662977c +- Re-enable hledger-web's test suite, and include it in the main executable. + hledger-web --test [-- HSPECARGS] runs it. +- Fix --forecast, broken in hledger-web since 1.18 (#1390) -- Fix hledger-web description (TANIGUCHI Kohei) - Slashes need to be escaped or they introduce unexpected italic style - due to Haddock markup. +- Fix unescaped slashes in hledger-web description on hackage (TANIGUCHI Kohei) -- The hledger version string, as JSON, is provided at /version (#1152) +- The hledger-web version string is now provided at /version, as JSON (#1152) -- Write the session file (hledger-web_client_session_key.aes) in - $XDG_DATA_DIR rather than in the current directory. +- The session file (hledger-web_client_session_key.aes) is now written in + $XDG_DATA_DIR rather than the current directory. Eg on non-Windows systems this is ~/.cache/ by default (cf https://hackage.haskell.org/package/directory/docs/System-Directory.html#t:XdgDirectory). (#1344) (Félix Sipma) diff --git a/hledger/CHANGES.md b/hledger/CHANGES.md index 4066f53e0..4992dd27b 100644 --- a/hledger/CHANGES.md +++ b/hledger/CHANGES.md @@ -1,25 +1,69 @@ User-visible changes in the hledger command line tool and library. -# 093c11ec +# 3662977c -- Query terms containing quotes (eg to match account names containing quotes) - now work properly (#1368, Stephen Morgan) +## general -- Console rendering is more efficient, speeding up some reports by - 10% or more (Stephen Morgan) +- Reverted a stripAnsi change in 1.19.1 that caused a 3x slowdown of amount rendering + in terminal reports. (#1350) + +- Amount and table rendering has been improved, so that stripAnsi is no longer needed. + This speeds up amount rendering in the terminal, speeding up some reports by 10% or more since 1.19. + (Stephen Morgan) - Amount eliding no longer displays corrupted ANSI codes (#1352, Stephen Morgan) - Eliding of multicommodity amounts now makes better use of available space, - avoiding unnecessary eliding. (Stephen Morgan) + avoiding unnecessary eliding (showing as many amounts as possible within + 32 characters). (Stephen Morgan) -- --no-elide's help now mentions that it also disables eliding of +- Command line help for --no-elide now mentions that it also disables eliding of multicommodity amounts. -- bal: --budget reports no longer insert an extra space inside the brackets (Stephen Morgan) +- Query terms containing quotes (eg to match account names containing quotes) + now work properly. (#1368, Stephen Morgan) -- journal: forecasted transactions are now affected by commodity styles (#1371) +- cli, journal: Date range parsing is more robust, fixing failing/incorrect cases such as: (Stephen Morgan) + + - a hyphenated range with just years (`2017-2018`) + - a hyphenated date with no day in a hyphenated range (`2017-07-2018`) + - a dotted date with no day in a dotted range (`2017.07..2018.02`) + +- Debug output is prettier (eg, in colour), using pretty-simple instead of pretty-show. + +## commands + +- add: number style (eg thousands separators) no longer disturbs the value + that is offered as default. (#1378) + +- bal: --invert now affects -S/--sort-amount, reversing the order. (#1283, #1379) (Stephen Morgan) + +- bal: --budget reports no longer insert an extra space inside the brackets. (Stephen Morgan) + +- bal, is, bs --change: + Valued multiperiod balance change reports now show changes of value, + rather than the value of changes. (#1353, Stephen Morgan) + +- import: The journal's commodity styles (declared or inferred) are now applied + to imported amounts, overriding their original number format. + +## journal format + +- The journal's commodity styles are now applied to forecasted transactions. (#1371) + +- journal, csv: commodity style is now inferred from the first amount, as documented, + not the last. This was "working wrongly" since hledger 1.12.. + +- A zero market price no longer causes "Ratio has zero denominator" error + in valued reports. (#1373) + +## csv format + +- The new `decimal-mark` rule allows reliable number parsing + when CSV numbers contain digit group marks (eg thousands separators). + +- The CSV reader's verbose "assignment" debug output is now at level 9. # 1.19.1 2020-09-07