2016-08-09 17:24:41 +03:00
|
|
|
name: hledger-lib
|
2023-12-02 22:09:07 +03:00
|
|
|
version: 1.32.99
|
2023-09-21 09:40:24 +03:00
|
|
|
synopsis: A library providing the core functionality of hledger
|
2016-08-09 21:27:00 +03:00
|
|
|
description: |
|
2023-09-21 09:40:24 +03:00
|
|
|
This library contains hledger's core functionality.
|
|
|
|
It is used by most hledger* packages so that they support the same
|
|
|
|
command line options, file formats, reports, etc.
|
2020-03-22 20:49:02 +03:00
|
|
|
|
|
|
|
hledger is a robust, cross-platform set of tools for tracking money,
|
|
|
|
time, or any other commodity, using double-entry accounting and a
|
|
|
|
simple, editable file format, with command-line, terminal and web
|
|
|
|
interfaces. It is a Haskell rewrite of Ledger, and one of the leading
|
2023-09-21 09:40:24 +03:00
|
|
|
implementations of Plain Text Accounting.
|
|
|
|
|
|
|
|
See also:
|
|
|
|
|
|
|
|
- https://hledger.org - hledger's home page
|
|
|
|
|
|
|
|
- https://hledger.org/dev.html - starting point for hledger's developer docs
|
|
|
|
|
|
|
|
- https://hackage.haskell.org/package/hledger-lib/docs/Hledger.html - starting point for hledger's haddock docs
|
2016-08-09 21:27:00 +03:00
|
|
|
|
2016-08-09 17:24:41 +03:00
|
|
|
category: Finance
|
2017-03-08 11:19:13 +03:00
|
|
|
license: GPL-3
|
2016-08-09 17:24:41 +03:00
|
|
|
author: Simon Michael <simon@joyful.com>
|
|
|
|
maintainer: Simon Michael <simon@joyful.com>
|
|
|
|
github: simonmichael/hledger
|
|
|
|
homepage: http://hledger.org
|
|
|
|
bug-reports: http://bugs.hledger.org
|
2017-08-26 02:53:41 +03:00
|
|
|
stability: stable
|
2023-07-01 20:34:46 +03:00
|
|
|
tested-with: GHC==8.10.7, GHC==9.0.2, GHC==9.2.8, GHC==9.4.5, GHC==9.6.2
|
2017-08-26 02:53:41 +03:00
|
|
|
|
2016-08-09 17:24:41 +03:00
|
|
|
extra-source-files:
|
2019-01-26 05:11:04 +03:00
|
|
|
- CHANGES.md
|
2020-03-22 19:07:47 +03:00
|
|
|
- README.md
|
2019-11-29 17:20:22 +03:00
|
|
|
- test/unittest.hs
|
|
|
|
- test/doctests.hs
|
2017-08-26 02:53:41 +03:00
|
|
|
|
2018-01-26 22:49:26 +03:00
|
|
|
#data-files:
|
|
|
|
|
2016-08-09 17:24:41 +03:00
|
|
|
dependencies:
|
2023-03-14 23:39:28 +03:00
|
|
|
- base >=4.14 && <4.19
|
|
|
|
- base-compat
|
2023-07-01 21:10:44 +03:00
|
|
|
- aeson >=1 && <2.3
|
2020-06-05 01:12:57 +03:00
|
|
|
- aeson-pretty
|
2020-07-14 22:08:36 +03:00
|
|
|
- ansi-terminal >=0.9
|
2016-08-09 17:24:41 +03:00
|
|
|
- array
|
|
|
|
- blaze-markup >=0.5.1
|
|
|
|
- bytestring
|
2018-08-16 08:16:09 +03:00
|
|
|
- call-stack
|
2017-12-31 20:13:50 +03:00
|
|
|
- cmdargs >=0.10
|
2021-03-29 18:19:28 +03:00
|
|
|
- containers >=0.5.9
|
2018-09-07 20:12:13 +03:00
|
|
|
- cassava
|
|
|
|
- cassava-megaparsec
|
2023-01-26 13:30:18 +03:00
|
|
|
- colour >=2.3.6
|
2016-08-09 17:24:41 +03:00
|
|
|
- data-default >=0.5
|
2022-08-23 01:31:56 +03:00
|
|
|
- deepseq
|
2020-03-19 20:10:55 +03:00
|
|
|
- Decimal >=0.5.1
|
2016-08-09 17:24:41 +03:00
|
|
|
- directory
|
2022-06-04 13:24:35 +03:00
|
|
|
- doclayout >=0.3 && <0.5
|
2019-01-27 02:52:58 +03:00
|
|
|
- file-embed >=0.0.10
|
2016-08-09 17:24:41 +03:00
|
|
|
- filepath
|
2018-06-05 03:02:57 +03:00
|
|
|
- hashtables >=1.2.3.1
|
2023-09-02 08:25:29 +03:00
|
|
|
- megaparsec >=7.0.0 && <9.6
|
2021-07-27 09:12:02 +03:00
|
|
|
- microlens >=0.4
|
2021-08-25 09:07:16 +03:00
|
|
|
- microlens-th >=0.4
|
2019-12-02 19:23:00 +03:00
|
|
|
- mtl >=2.2.1
|
2018-05-21 03:01:07 +03:00
|
|
|
- parser-combinators >=0.4.0
|
lib: replace pretty-show with pretty-simple
pretty-simple, already used in .ghci, will hopefully give nicer debug
output, including for values which don't have Read-able Show output.
This should mean that we can start removing custom string-like Show
instances that were a workaround for pretty-show.
We are using the latest version (4.0.0.0) to get compact output.
Here's some old pretty-show output:
CsvRules
{ rdirectives = [ ( "skip" , "1" ) ]
, rcsvfieldindexes = [ ( "date" , 1 ) , ( "amount" , 2 ) ]
, rassignments = [ ( "amount" , "%2" ) , ( "date" , "%1" ) ]
, rconditionalblocks = []
}
And the new pretty-simple output:
CsvRules
{ rdirectives=
[ ( "skip", "1" ) ]
, rcsvfieldindexes=
[ ( "date", 1 ), ( "amount", 2 ) ]
, rassignments=
[ ( "amount", "%2" ), ( "date", "%1" ) ]
, rconditionalblocks= []
}
Non-compact pretty-simple output would be:
CsvRules
{ rdirectives=
[
( "skip"
, "1B"
)
]
, rcsvfieldindexes=
[
( "date"
, 1
)
,
( "amount"
, 2
)
]
, rassignments=
[
( "amount"
, "%2"
)
,
( "date"
, "%1"
)
]
, rconditionalblocks=[]
}
Also:
- Account's Show instance no longer converts : to _ in account names
- drop unused pretty-show dependency from hledger, hledger-ui packages
- regenerate hledger-lib with the older hpack that's shipped in stack
2020-11-10 18:08:29 +03:00
|
|
|
- pretty-simple >4 && <5
|
2016-08-09 17:24:41 +03:00
|
|
|
- regex-tdfa
|
2022-07-11 08:02:54 +03:00
|
|
|
- safe >=0.3.19
|
2018-04-03 15:07:13 +03:00
|
|
|
- tabular >=0.2
|
2019-11-27 00:56:14 +03:00
|
|
|
- tasty >=1.2.3
|
|
|
|
- tasty-hunit >=0.10.0.2
|
2019-01-27 02:52:58 +03:00
|
|
|
- template-haskell
|
2023-03-19 08:59:00 +03:00
|
|
|
- terminal-size >=0.3.3
|
2023-11-23 10:11:59 +03:00
|
|
|
- text >=1.2.4.1
|
2023-01-26 07:35:22 +03:00
|
|
|
- text-ansi >=0.2.1
|
2017-08-26 02:56:41 +03:00
|
|
|
- time >=1.5
|
2019-08-01 19:24:40 +03:00
|
|
|
- timeit
|
2017-12-31 20:13:50 +03:00
|
|
|
- transformers >=0.2
|
2020-06-12 05:23:57 +03:00
|
|
|
- unordered-containers >=0.2
|
2016-08-09 17:24:41 +03:00
|
|
|
- uglymemo
|
2017-12-31 20:13:50 +03:00
|
|
|
- utf8-string >=0.3.5
|
2022-06-01 02:33:45 +03:00
|
|
|
- extra >=1.6.3
|
|
|
|
- Glob >= 0.9
|
2023-03-11 08:11:49 +03:00
|
|
|
|
|
|
|
when:
|
|
|
|
- condition: (!(os(windows)))
|
|
|
|
dependencies:
|
|
|
|
- pager >=0.1.1.0
|
2017-08-26 02:53:41 +03:00
|
|
|
|
2016-08-09 17:24:41 +03:00
|
|
|
ghc-options:
|
|
|
|
- -Wall
|
2022-03-26 21:11:52 +03:00
|
|
|
- -Wno-incomplete-uni-patterns
|
2022-03-26 09:28:34 +03:00
|
|
|
- -Wno-missing-signatures
|
|
|
|
- -Wno-orphans
|
2022-03-26 21:11:52 +03:00
|
|
|
- -Wno-type-defaults
|
|
|
|
- -Wno-unused-do-bind
|
2017-08-26 02:53:41 +03:00
|
|
|
|
2016-11-12 21:50:57 +03:00
|
|
|
source-dirs:
|
2017-03-30 07:00:16 +03:00
|
|
|
#- other/ledger-parse
|
2016-11-12 21:50:57 +03:00
|
|
|
- .
|
2017-08-26 02:53:41 +03:00
|
|
|
|
2016-08-09 17:24:41 +03:00
|
|
|
library:
|
|
|
|
exposed-modules:
|
|
|
|
- Hledger
|
|
|
|
- Hledger.Data
|
|
|
|
- Hledger.Data.Account
|
|
|
|
- Hledger.Data.AccountName
|
|
|
|
- Hledger.Data.Amount
|
2021-08-24 05:34:32 +03:00
|
|
|
- Hledger.Data.Balancing
|
2016-08-09 17:24:41 +03:00
|
|
|
- Hledger.Data.Dates
|
2022-05-09 21:45:27 +03:00
|
|
|
- Hledger.Data.Errors
|
2016-08-09 17:24:41 +03:00
|
|
|
- Hledger.Data.Journal
|
2022-05-09 21:45:27 +03:00
|
|
|
- Hledger.Data.JournalChecks
|
|
|
|
- Hledger.Data.JournalChecks.Ordereddates
|
|
|
|
- Hledger.Data.JournalChecks.Uniqueleafnames
|
2019-12-17 04:15:24 +03:00
|
|
|
- Hledger.Data.Json
|
2016-08-09 17:24:41 +03:00
|
|
|
- Hledger.Data.Ledger
|
|
|
|
- Hledger.Data.Period
|
2018-07-30 21:38:47 +03:00
|
|
|
- Hledger.Data.PeriodicTransaction
|
2016-08-09 17:24:41 +03:00
|
|
|
- Hledger.Data.StringFormat
|
|
|
|
- Hledger.Data.Posting
|
|
|
|
- Hledger.Data.RawOptions
|
|
|
|
- Hledger.Data.Timeclock
|
|
|
|
- Hledger.Data.Transaction
|
2018-07-30 21:38:47 +03:00
|
|
|
- Hledger.Data.TransactionModifier
|
2016-08-09 17:24:41 +03:00
|
|
|
- Hledger.Data.Types
|
2019-06-15 02:17:06 +03:00
|
|
|
- Hledger.Data.Valuation
|
2016-08-09 17:24:41 +03:00
|
|
|
- Hledger.Query
|
|
|
|
- Hledger.Read
|
|
|
|
- Hledger.Read.Common
|
|
|
|
- Hledger.Read.CsvReader
|
feat: csv: rules files can be read directly; data file can be specified
CSV rules files can now be read directly, eg you have the option of
writing `hledger -f foo.csv.rules CMD`. By default this will read data
from foo.csv in the same directory. But you can also specify a
different data file with a new `source FILE` rule. This has some
convenience features:
- If the data file does not exist, it is treated as empty, not an
error.
- If FILE is a relative path, it is relative to the rules file's
directory. If it is just a file name with no path, it is relative
to ~/Downloads/.
- If FILE is a glob pattern, the most recently modified matched file
is used.
This helps remove some of the busywork of managing CSV downloads.
Most of your financial institutions's default CSV filenames are
different and can be recognised by a glob pattern. So you can put a
rule like `source Checking1*.csv` in foo-checking.csv.rules,
periodically download CSV from Foo's website accepting your browser's
defaults, and then run `hledger import checking.csv.rules` to import
any new transactions. The next time, if you have done no cleanup, your
browser will probably save it as something like Checking1-2.csv, and
hledger will still see that because of the * wild card. You can choose
whether to delete CSVs after import, or keep them for a while as
temporary backups, or archive them somewhere.
2023-05-13 00:27:41 +03:00
|
|
|
- Hledger.Read.CsvUtils
|
2022-05-09 21:45:27 +03:00
|
|
|
- Hledger.Read.InputOptions
|
2016-08-09 17:24:41 +03:00
|
|
|
- Hledger.Read.JournalReader
|
feat: csv: rules files can be read directly; data file can be specified
CSV rules files can now be read directly, eg you have the option of
writing `hledger -f foo.csv.rules CMD`. By default this will read data
from foo.csv in the same directory. But you can also specify a
different data file with a new `source FILE` rule. This has some
convenience features:
- If the data file does not exist, it is treated as empty, not an
error.
- If FILE is a relative path, it is relative to the rules file's
directory. If it is just a file name with no path, it is relative
to ~/Downloads/.
- If FILE is a glob pattern, the most recently modified matched file
is used.
This helps remove some of the busywork of managing CSV downloads.
Most of your financial institutions's default CSV filenames are
different and can be recognised by a glob pattern. So you can put a
rule like `source Checking1*.csv` in foo-checking.csv.rules,
periodically download CSV from Foo's website accepting your browser's
defaults, and then run `hledger import checking.csv.rules` to import
any new transactions. The next time, if you have done no cleanup, your
browser will probably save it as something like Checking1-2.csv, and
hledger will still see that because of the * wild card. You can choose
whether to delete CSVs after import, or keep them for a while as
temporary backups, or archive them somewhere.
2023-05-13 00:27:41 +03:00
|
|
|
- Hledger.Read.RulesReader
|
2017-03-30 07:00:16 +03:00
|
|
|
# - Hledger.Read.LedgerReader
|
2016-08-09 17:24:41 +03:00
|
|
|
- Hledger.Read.TimedotReader
|
|
|
|
- Hledger.Read.TimeclockReader
|
|
|
|
- Hledger.Reports
|
|
|
|
- Hledger.Reports.ReportOptions
|
2018-04-03 15:06:52 +03:00
|
|
|
- Hledger.Reports.ReportTypes
|
2019-05-24 07:51:45 +03:00
|
|
|
- Hledger.Reports.AccountTransactionsReport
|
2016-08-09 17:24:41 +03:00
|
|
|
- Hledger.Reports.BalanceReport
|
2018-04-03 15:06:52 +03:00
|
|
|
- Hledger.Reports.BudgetReport
|
2016-08-09 17:24:41 +03:00
|
|
|
- Hledger.Reports.EntriesReport
|
2019-06-14 21:45:25 +03:00
|
|
|
- Hledger.Reports.MultiBalanceReport
|
2016-08-09 17:24:41 +03:00
|
|
|
- Hledger.Reports.PostingsReport
|
|
|
|
- Hledger.Utils
|
|
|
|
- Hledger.Utils.Debug
|
2022-11-05 07:39:31 +03:00
|
|
|
- Hledger.Utils.IO
|
2016-08-09 17:24:41 +03:00
|
|
|
- Hledger.Utils.Parse
|
|
|
|
- Hledger.Utils.Regex
|
|
|
|
- Hledger.Utils.String
|
|
|
|
- Hledger.Utils.Test
|
|
|
|
- Hledger.Utils.Text
|
2018-04-03 15:07:13 +03:00
|
|
|
- Text.Tabular.AsciiWide
|
2017-03-30 07:00:16 +03:00
|
|
|
# other-modules:
|
|
|
|
# - Ledger.Parser.Text
|
2017-08-26 02:53:41 +03:00
|
|
|
|
2019-11-29 17:20:22 +03:00
|
|
|
# "cabal test hledger-lib" currently fails, see doctest suite below
|
2016-08-09 17:24:41 +03:00
|
|
|
tests:
|
2018-03-06 04:27:13 +03:00
|
|
|
|
2019-11-29 17:20:22 +03:00
|
|
|
unittest:
|
2019-11-29 17:06:36 +03:00
|
|
|
buildable: true
|
|
|
|
source-dirs: test
|
2019-11-29 17:20:22 +03:00
|
|
|
main: unittest.hs
|
2019-11-29 17:06:36 +03:00
|
|
|
other-modules: [] # prevent double compilation, https://github.com/sol/hpack/issues/188
|
|
|
|
dependencies:
|
|
|
|
- hledger-lib
|
|
|
|
|
2020-03-07 05:18:15 +03:00
|
|
|
# Note when run by cabal, doctest requires a ghc environment file,
|
|
|
|
# so we ensure this is generated, see cabal.project.
|
|
|
|
# https://github.com/simonmichael/hledger/issues/1139
|
2019-11-29 17:20:22 +03:00
|
|
|
doctest:
|
2018-08-18 17:11:48 +03:00
|
|
|
source-dirs: test
|
2019-11-29 17:20:22 +03:00
|
|
|
main: doctests.hs # can't call it doctest.hs ("File name does not match module name")
|
2019-11-19 15:10:46 +03:00
|
|
|
other-modules: [] # prevent double compilation, https://github.com/sol/hpack/issues/188
|
2016-08-09 17:24:41 +03:00
|
|
|
dependencies:
|
2021-07-17 06:58:57 +03:00
|
|
|
# prefer the latest doctest
|
|
|
|
- doctest >=0.18.1
|
2016-08-09 21:52:15 +03:00
|
|
|
- Glob >=0.7
|
2019-07-14 14:55:19 +03:00
|
|
|
|
2021-07-21 00:19:30 +03:00
|
|
|
when:
|
2022-04-25 14:33:53 +03:00
|
|
|
# disable doctest with GHC 9.0, https://github.com/sol/doctest/issues/301
|
2022-08-29 12:53:10 +03:00
|
|
|
- condition: impl(ghc >= 9.0) && impl(ghc < 9.2)
|
2021-07-21 00:19:30 +03:00
|
|
|
buildable: false
|
|
|
|
|
2021-07-17 06:58:57 +03:00
|
|
|
# ghc 8.4+ on mac needs this workaround. See
|
|
|
|
# https://github.com/sol/doctest/issues/199
|
|
|
|
# https://ghc.haskell.org/trac/ghc/ticket/15105#comment:10 :
|
2018-09-07 21:21:32 +03:00
|
|
|
# ~$ locate HSinteger-gmp-1.0.2.0.o
|
|
|
|
# /Users/simon/.stack/programs/x86_64-osx/ghc-8.4.3/lib/ghc-8.4.2/integer-gmp-1.0.2.0/HSinteger-gmp-1.0.2.0.o
|
|
|
|
# ~$ mv /Users/simon/.stack/programs/x86_64-osx/ghc-8.4.3/lib/ghc-8.4.2/integer-gmp-1.0.2.0/HSinteger-gmp-1.0.2.0.o{,_DISABLE_GHC_ISSUE_15105}
|
2019-07-14 14:55:19 +03:00
|
|
|
# Should probably disable it by default:
|
2018-09-07 21:21:32 +03:00
|
|
|
#when:
|
|
|
|
# - condition: os(darwin) && impl(ghc >= 8.4)
|
|
|
|
# buildable: false
|