journal: tests/docs for aliases corrupting account names (#1788)

This commit is contained in:
Simon Michael 2021-12-22 14:44:06 -10:00
parent e9dd77e82b
commit 9c173bc18b
3 changed files with 67 additions and 1 deletions

View File

@ -58,6 +58,7 @@ There are some situations where print's output can become unparseable:
- [Valuation](#valuation) affects posting amounts but not [balance assertion](#balance-assertions) or [balance assignment](#balance-assignments) amounts, potentially causing those to [fail](https://github.com/simonmichael/hledger/issues/1429). - [Valuation](#valuation) affects posting amounts but not [balance assertion](#balance-assertions) or [balance assignment](#balance-assignments) amounts, potentially causing those to [fail](https://github.com/simonmichael/hledger/issues/1429).
- [Auto postings](#auto-postings) can generate postings with [too many missing amounts](https://github.com/simonmichael/hledger/issues/1276). - [Auto postings](#auto-postings) can generate postings with [too many missing amounts](https://github.com/simonmichael/hledger/issues/1276).
- [Account aliases can generate invalid account names](#account-aliases-can-generate-invalid-account-names).
Normally, the journal entry's explicit or implicit amount style is preserved. Normally, the journal entry's explicit or implicit amount style is preserved.
For example, when an amount is omitted in the journal, it will not appear in the output. For example, when an amount is omitted in the journal, it will not appear in the output.

View File

@ -3153,12 +3153,17 @@ This can be useful for:
- expanding shorthand account names to their full form, allowing easier data entry and a less verbose journal - expanding shorthand account names to their full form, allowing easier data entry and a less verbose journal
- adapting old journals to your current chart of accounts - adapting old journals to your current chart of accounts
- experimenting with new account organisations, like a new hierarchy or combining two accounts into one - experimenting with new account organisations, like a new hierarchy
- combining two accounts into one, eg to see their sum or difference on one line
- customising reports - customising reports
Account aliases also rewrite account names in [account directives](#declaring-accounts). Account aliases also rewrite account names in [account directives](#declaring-accounts).
They do not affect account names being entered via hledger add or hledger-web. They do not affect account names being entered via hledger add or hledger-web.
Account aliases are very powerful.
They are generally easy to use correctly, but you can also generate
invalid account names with them; more on this below.
See also [Rewrite account names](rewrite-account-names.html). See also [Rewrite account names](rewrite-account-names.html).
### Basic aliases ### Basic aliases
@ -3276,6 +3281,39 @@ with this directive:
end aliases end aliases
``` ```
### Aliases can generate invalid account names
Be aware that account aliases can produce malformed account names,
which could cause confusing reports or and invalid [`print`](#print) output.
Two examples: you can erase an account name:
```journal
2021-01-01
a:aa 1
b
```
```shell
$ hledger -f- print --alias '/a:.*/='
2021-01-01
1
b
```
or insert an illegal double space, causing part of the account name
to be treated as part of the amount if reparsed:
```journal
2021-01-01
old 1
other
```
```shell
$ hledger -f- --alias old="new USD" print | hledger -f- print
2021-01-01
new USD 1
other
```
## Default parent account ## Default parent account
You can specify a parent account which will be prepended to all accounts You can specify a parent account which will be prepended to all accounts

View File

@ -225,3 +225,30 @@ $ hledger -f- print
>=0 >=0
# Aliases can produce malformed account names and invalid print output (#1788).
# 16. For example, you can erase an account name:
<
alias /a:.*/=
2021-01-01
a:aa 1
b
$ hledger -f- print
2021-01-01
1
b
>=0
# 17. Another example: you can insert an illegal double space,
# with the second part considered part of the amount if reparsed:
<
2021-01-01
old 1
other
$ hledger -f- --alias old="new USD" print | hledger -f- print
2021-01-01
new USD 1
other
>=0