Commit Graph

201 Commits

Author SHA1 Message Date
Stephen Morgan
21e62ffcbd cln: hlint: Remove unless and $> warnings. 2021-08-27 06:13:56 -10:00
Stephen Morgan
e13239386f cln: hlint: Clean up == and elem related hlint warnings. 2021-08-27 06:13:56 -10:00
Stephen Morgan
7edcbe4be8 cln: hlint: Remove rendundant guard warnings. 2021-08-26 07:23:11 -10:00
Simon Michael
4d04da94fb ci: commitlint: ignore boring commits: github merge commit (#1606) 2021-07-13 12:35:48 -10:00
Simon Michael
7f2ad64e7b bin:commitlint:doc, policy: allow more spaces, slash/comma in topics 2021-07-11 14:24:54 -10:00
Simon Michael
f7f88a4a9a bin: commitlint: don't exit successfully if a command fails (#1602) 2021-07-10 22:05:32 -10:00
Simon Michael
ec2436025c ;dev: bin: commitlint: advertise how to use it locally 2021-07-06 16:06:07 -10:00
Simon Michael
103813f116 ;dev: bin: commitlint: also work a git commit-msg hook 2021-07-06 15:33:18 -10:00
Simon Michael
215e90ad78 ;dev: bin: commitlint: check for preferred style in commit messages 2021-07-06 11:54:35 -10:00
Stephen Morgan
0a019e2167 lib,cli,web,bin: Replace journalSelectingAmountFromOpts with journalApplyValuationFromOpts.
This also has the effect of allowing valuation in more reports, for
example the transactionReport.
2021-06-08 14:55:05 +10:00
Stephen Morgan
7cb621b82f lib,cli,ui,bin: Remove unnecessary normalisedMixedAmount, replace
normaliseMixedAmountSquashPricesForDisplay with mixedAmountStripPrices.
2021-05-01 09:45:29 -10:00
Stephen Morgan
5e7b69356f lib: Change internal representation of MixedAmount to use a strict Map
instead of a list of Amounts. No longer export Mixed constructor, to
keep API clean (if you really need it, you can import it directly from
Hledger.Data.Types). We also ensure the JSON representation of
MixedAmount doesn't change: it is stored as a normalised list of
Amounts.

This commit improves performance. Here are some indicative results.

hledger reg -f examples/10000x1000x10.journal
- Maximum residency decreases from 65MB to 60MB (8% decrease)
- Total memory in use decreases from 178MiB to 157MiB (12% decrease)

hledger reg -f examples/10000x10000x10.journal
- Maximum residency decreases from 69MB to 60MB (13% decrease)
- Total memory in use decreases from 198MiB to 153MiB (23% decrease)

hledger bal -f examples/10000x1000x10.journal
- Total heap usage decreases from 6.4GB to 6.0GB (6% decrease)
- Total memory in use decreases from 178MiB to 153MiB (14% decrease)

hledger bal -f examples/10000x10000x10.journal
- Total heap usage decreases from 7.3GB to 6.9GB (5% decrease)
- Total memory in use decreases from 196MiB to 185MiB (5% decrease)

hledger bal -M -f examples/10000x1000x10.journal
- Total heap usage decreases from 16.8GB to 10.6GB (47% decrease)
- Total time decreases from 14.3s to 12.0s (16% decrease)

hledger bal -M -f examples/10000x10000x10.journal
- Total heap usage decreases from 108GB to 48GB (56% decrease)
- Total time decreases from 62s to 41s (33% decrease)

If you never directly use the constructor Mixed or pattern match against
it then you don't need to make any changes. If you do, then do the
following:

- If you really care about the individual Amounts and never normalise
  your MixedAmount (for example, just storing `Mixed amts` and then
  extracting `amts` as a pattern match, then use should switch to using
  [Amount]. This should just involve removing the `Mixed` constructor.
- If you ever call `mixed`, `normaliseMixedAmount`, or do any sort of
  amount arithmetic (+), (-), then you should replace the constructor
  `Mixed` with the function `mixed`. To extract the list of Amounts, use
  the function `amounts`.
- If you ever call `normaliseMixedAmountSquashPricesForDisplay`, you can
  replace that with `mixedAmountStripPrices`. (N.B. this does something
  slightly different from `normaliseMixedAmountSquashPricesForDisplay`,
  but I don't think there's any use case for squashing prices and then
  keeping the first of the squashed prices around. If you disagree let
  me know.)
- Any remaining calls to `normaliseMixedAmount` can be removed, as that
  is now the identity function.
2021-05-01 09:45:29 -10:00
Stephen Morgan
d6a4310d8f lib,cli,ui,bin: Eliminate all uses of Mixed outside of Hledger.Data.Amount.
Exceptions are for dealing with the pamount field, which is really just
dealing with an unnormalised list of amounts.

This creates an API for dealing with MixedAmount, so we never have to
access the internals outside of Hledger.Data.Amount.

Also remove a comment, since it looks like #1207 has been resolved.
2021-03-18 09:47:59 +11:00
Stephen Morgan
dabb3ef82e lib,cli,ui,bin: Create a new API for MixedAmount arithmetic. This should
supplant the old interface, which relied on the Num typeclass.

MixedAmount did not have a very good Num instance. The only functions
which were defined were fromInteger, (+), and negate. Furthermore, it
was not law-abiding, as 0 + a /= a in general. Replacements for used
functions are:
0 -> nullmixedamt / mempty
(+) -> maPlus / (<>)
(-) -> maMinus
negate -> maNegate
sum -> maSum
sumStrict -> maSum

Also creates some new constructors for MixedAmount:
mixedAmount :: Amount -> MixedAmount
maAddAmount :: MixedAmount -> Amount -> MixedAmount
maAddAmounts :: MixedAmount -> [Amount] -> MixedAmount

Add Semigroup and Monoid instances for MixedAmount.
Ideally we would remove the Num instance entirely.

The only change needed have nullmixedamt/mempty substitute for
0 without problems was to not squash prices in
mixedAmount(Looks|Is)Zero. This is correct behaviour in any case.
2021-03-18 09:47:21 +11:00
Simon Michael
4b2c943867 ;bin: hledger-combine-balances: fix haddock error 2021-03-16 07:20:01 -07:00
Simon Michael
c8bc9c7088 bin: more robust --package syntax, comma form sometimes fails 2021-02-12 13:55:31 -08:00
Simon Michael
37290eec04 ;bin: smooth: note beancount tool 2021-01-30 17:27:46 -08:00
Simon Michael
a477aa95b0 ;bin: ignore stderr in func tests, check only exit code
This avoids failures when stack prints to stderr, eg when fetching
hackage index.
2021-01-29 12:09:58 -08:00
Simon Michael
db3fe16645 ;bin: readme updates 2021-01-12 15:11:20 -08:00
Simon Michael
93bf6cf299 ;ci: give up on bin/ compilation tests for now (#1453)
They need more work to become CI-ready.
Contributors can run them locally with "make functest".
2021-01-12 15:00:13 -08:00
Simon Michael
fef0e3a3bf ;bin: ensure required packages (string-qq) are visible (#1453) 2021-01-12 12:24:08 -08:00
Simon Michael
84bf42a9fc ;bin: linux/pr CI uses ghc 8.2, make functest uses default ghc (#1453) 2021-01-12 12:11:56 -08:00
Simon Michael
1023a3cc1a ;ci: run bin/ compilation tests only with GHC 8.2 CI for now (#1453) 2021-01-12 11:47:57 -08:00
Simon Michael
3fc3914e14 ;bin: doc 2021-01-12 11:07:29 -08:00
Simon Michael
32ccbba805 bin: switch to "runghc", drop "env -S" (#1453)
env -S isn't a thing on linux of course. Go back to using standard
env, which means using a stack options line, which means not using
"ghc". This new setup is probably simpler anyway. I've just had to
give up on the goal of having each script's required packages being
defined in one place; now (to they extent they are required) they
must be defined both in the script header and in compile.sh.
2021-01-12 10:55:00 -08:00
Simon Michael
2db87333d7 bin: switch scripts to "stack ghc" and "env -S" (#1453)
Using stack's script command meant that the scripts needed to be
compatible, and regularly tested, with a hledger release in stackage,
rather than the latest hledger source. This created hassles for
maintainers, contributors and sometimes for users.

To simplify things overall, we now require script users to check out
the hledger source tree and run the scripts (or, bin/compile.sh) from
there once so they compile themselves. Some notes on alternative
setups are included (in one of the scripts, and referenced by the
others). This ensures that users and our CI tests are building scripts
the same way.

Current stack does not allow a stack options line to be used with the
"stack ghc" command, unfortunately, so instead we are using env's -S
flag, which hopefully has sufficiently wide support by now, and
putting all arguments in the shebang line.

This method will probably require complete explicit --package options,
unlike "stack script", so more testing and tweaking is expected.
Probably we're going to end up with some long shebang lines.

This isn't pretty but seems like a possible way to keep things
manageable.
2021-01-11 21:04:07 -08:00
Stephen Morgan
ef250e5673 bin: Update bin scripts for new API. 2021-01-02 15:08:09 +11:00
Simon Michael
f8afb94d09 ;bin: readme update 2020-12-31 12:24:44 -08:00
Stephen Morgan
a64d1aa6d0 bin: Update bin scripts for current hledger-lib.
(cherry picked from commit bc4aef17b7fa13ec0754b93325e1c5e5ee04f1e7)
2020-12-30 08:59:03 -08:00
Simon Michael
06b466d847 ci: also test compilation of bin/ add-on scripts 2020-12-30 08:59:03 -08:00
Simon Michael
d17d92b338 ;stack, bin: bump all to lts-16.25 2020-12-08 12:59:25 -08:00
Simon Michael
7a692284a9 ;doc: replace a few addon with add-on 2020-12-08 09:27:36 -08:00
Simon Michael
1b6f8e0b19 bin: rename hledger-check* per "How to check for errors" 2020-11-27 12:29:54 -08:00
Simon Michael
18f8f91520 ;more budget-related cleanup 2020-11-18 16:29:04 -08:00
Stephen Morgan
19ab222599 lib,cli: Remove old impure ReportOpts date functions. 2020-10-23 14:14:11 -07:00
Simon Michael
c2929939e4 make account type autodetection (& hledger-smooth) case insensitive again (#1341)
lib: added case-insensitive variants of the accountNameToRegex functions.
2020-09-03 09:52:00 -07:00
Stephen Morgan
ba59fed6b2 lib: Replace more instances of fromIntegral with safer versions. 2020-08-30 22:20:58 +10:00
Simon Michael
7e26d6626c ;bin: warn about breakage here 2020-08-20 11:20:13 -07:00
Simon Michael
5405a63aad ;bin: print-location, smooth, swap-dates: update _FLAG marker 2020-08-15 11:29:35 -07:00
Simon Michael
8023d1e8d7 ;bin: more scripts how-tos 2020-08-15 10:52:49 -07:00
Simon Michael
c7f1800185 ;bin: update scripts readme 2020-08-15 10:25:13 -07:00
Simon Michael
99789bd4de bin: drop explicit --package options from stack scripts, not needed
If there are no --package options, stack's script command infers them
from the imports.
2020-08-15 09:59:59 -07:00
Simon Michael
efa0d43910 bin: hledger-print-location example 2020-08-15 09:56:53 -07:00
Simon Michael
4747e2eacf ;bin: consistent use of stack script, package updates 2020-08-15 09:51:59 -07:00
Simon Michael
431a502a0a ;bin: rename example cabal script 2020-08-15 09:51:44 -07:00
Simon Michael
7f8192ba75 bin: hledger-swap-dates: replace here with string-qq, as elsewhere 2020-08-15 09:06:09 -07:00
Simon Michael
e2bccf8645 ;bin: better script install instructions 2020-06-28 10:00:36 -07:00
Simon Michael
caa004889b ;bin: update stack url 2020-06-28 09:55:24 -07:00
Simon Michael
88b03e73cd ;bin: better script install instructions 2020-06-28 09:53:34 -07:00
Simon Michael
ecbc9aa0cf ;bin: better script install instructions 2020-06-28 09:52:51 -07:00
Simon Michael
fea7a1faf4 bin: hledger-check: use stack script command 2020-06-28 09:35:05 -07:00
Dmitry Astapov
54300328cd cli: ability to pass arguments to getHledgerCliOpts + two example scripts 2020-05-27 04:58:57 -07:00
Simon Michael
90d4bb9c0f ;bin: hledger-check-tag-files: fix comments 2020-03-27 17:22:56 -07:00
Simon Michael
53c08f45b2 ;bin: hledger-check-tag-files: consistency 2020-03-27 17:21:23 -07:00
Simon Michael
b78b98e372 bin: hledger-check-tag-files2, a version using cabal's v2-run command 2020-03-27 17:20:43 -07:00
Simon Michael
a38694b247 bin: hledger-check-tag-files, a script using stack's script command 2020-03-27 16:43:14 -07:00
Simon Michael
76776e28b2 ;bin: smooth: link to #1171
[ci skip]
2020-01-23 12:53:43 -08:00
Simon Michael
21fec478d4 ;bin: smooth: note/warn about date-order requirement (#1171)
[ci skip]
2020-01-23 12:40:25 -08:00
Simon Michael
4589ec51ba ;bin: smooth: fix Text "Empty stream" error (#1171)
[ci skip]
2020-01-23 12:22:24 -08:00
Simon Michael
82421d0eab ;bin: smooth: doesn't use hledger-lib
[ci skip]
2020-01-23 12:04:36 -08:00
Simon Michael
db74540280 ;bin: smooth: here -> string-qq, save several minutes of build time
[ci skip]
2020-01-23 12:04:28 -08:00
Simon Michael
8efae769c0 bin: smooth: update for current lib (RawOpts)
[ci skip]
2020-01-23 10:28:57 -08:00
Mykola Orliuk
ab9c150759 ;lib: clean out showTransactionUnelided
Keep aliases until next major release.
2019-11-16 12:53:07 +01:00
Simon Michael
a5cae2a859 bin: check: fix weird hashbang error (#1072)
Hashbangs and CPP on mac don't mix well.
https://gitlab.haskell.org/ghc/ghc/issues/6132

[ci skip]
2019-07-17 00:01:10 +01:00
Simon Michael
45bb513eb8 bin: smooth, swap-dates: fix compile.sh warnings (#1072)
[ci skip]
2019-07-17 00:01:06 +01:00
Simon Michael
64d6878d6c ;bin: update readme (#1072)
[ci skip]
2019-07-16 23:41:36 +01:00
Simon Michael
cb5334c8df bin: hledger-smooth: update for latest hledger-lib (#1072)
[ci skip]
2019-07-16 23:36:37 +01:00
Simon Michael
acd6e5bfe3 bin: hledger-swap-dates: update for latest hledger-lib, finish (#1072)
[ci skip]
2019-07-16 23:31:45 +01:00
Simon Michael
cfb32a89d6 bin: hledger-check: update for latest hledger-lib (#1072)
[ci skip]
2019-07-16 23:31:35 +01:00
Simon Michael
8bdcd9b38c bin: add hledger-swap-dates 2019-07-16 05:19:52 +01:00
Simon Michael
bc95f39757 ;bin: update, markdownify readme
[ci skip]
2019-07-16 05:19:33 +01:00
Caleb Maclennan
11d9e5eb6a code: Strip extraneous trailing whitespace from Haskell sources 2019-07-15 16:40:49 +01:00
Simon Michael
aebd6c50d6 smooth: smoothes out irregular transactions (experimental addon) 2018-07-16 23:36:06 +01:00
Alex Chen
b245ec7b3d lib: remove the megaparsec compatability module 2018-05-22 12:16:46 -07:00
Simon Michael
4474e4bd43 bin: drop hledger-autosync symlink, it breaks make watch-* 2018-05-17 19:00:09 -07:00
Simon Michael
84579bb1b4 silence redundant import warnings with ghc 8.4 2018-03-24 22:51:56 +00:00
Simon Michael
61f7563fa2 budget: drop obsolete hledger-budget addon (close #620)
[ci skip]
2018-03-12 23:14:00 +00:00
Simon Michael
88ef586480 lib: rename, clarify purpose of balanceReportFromMultiBalanceReport 2018-01-23 11:32:24 -08:00
Mykola Orliuk
d05bdd5b4e hledger-check: compatibility with stack8.0.yaml 2017-11-29 07:05:22 -08:00
Dmitry Astapov
f101d5b515 cli: --forecast adds periodic transactions to reports
Ledger-style periodic transactions, previously supported only by
hledger-budget, have landed as a first-class feature.  The --forecast
flag activates them, so that any transactions they generate are
included in reports.
2017-11-26 14:57:41 +00:00
Dmitry Astapov
fbd28be6cb Allow hledger-budget to generate transactions past the end date of the last real transaction if -b/-e are supplied 2017-11-16 16:45:08 -08:00
Simon Michael
49090d9e53 bin: stop listing addons after compiling them 2017-11-01 08:05:17 -07:00
Simon Michael
78c97650f5 budget: include docs in command line help
[ci skip]
2017-10-15 19:35:02 -07:00
Mykola Orliuk
7cb7554ad1 bin: budget: re-factor to use hledgerCommandMode
This is preparation to make it part of of hledger.
2017-10-02 20:17:57 -10:00
Mykola Orliuk
8922d86eb9 bin: budget: adapt to CliOpts re-factoring
Fixes simonmichael/hledger#615
2017-10-01 11:27:12 -10:00
Simon Michael
e3902ebc6f cli: make tags a builtin command 2017-09-12 19:54:39 -07:00
Simon Michael
d2d7dbbce0 cli: make rewrite a builtin command 2017-09-12 19:51:27 -07:00
Simon Michael
89f694707b cli: make register-match a builtin command 2017-09-12 19:43:41 -07:00
Simon Michael
bf99c74198 cli: make print-unique a builtin command 2017-09-12 19:37:31 -07:00
Simon Michael
258efdf83c cli: make prices a builtin command 2017-09-12 19:28:01 -07:00
Simon Michael
4e6aa06b62 cli: make equity a builtin command 2017-09-12 19:17:47 -07:00
Simon Michael
fe9cd2a186 cli: make check-dupes a builtin command 2017-09-12 19:09:00 -07:00
Simon Michael
7f5985067d cli: begin merging addons, make check-dates a builtin command 2017-09-12 17:54:25 -07:00
Simon Michael
e4782d1184 bin: budget: info, man are no more 2017-09-12 10:04:52 -07:00
Simon Michael
5e4673bd1f bin: chart: rename script, skip deps to avoid breaking func tests
hledger-chart's deps are not currently GHC 8.2 compatible
2017-09-11 18:36:20 -07:00
Simon Michael
b1646b9f05 chart: specify older resolver, this doesn't build with GHC 8.2 2017-09-11 11:59:25 -07:00
Simon Michael
15a24da126 check: fix some string/text bitrot 2017-09-11 09:08:00 -07:00
Peter Simons
c571c6ff25 hledger-check: fix the name of this tool in the usage example comments 2017-09-09 13:10:21 -07:00
Simon Michael
2a3feb9288 bin: check: fix megaparsec-related build error 2017-07-31 08:09:05 -07:00
Simon Michael
d7d5f8a064 add support for megaparsec 6 (fixes #594)
Older megaparsec is still supported.
Also cleans up our custom parser types,
and some text (un)packing is done in different places
(possible performance impact).
2017-07-27 19:20:46 -07:00