lix/src/nix
eldritch horrors 08252967a8 libexpr: Support structured error classes
While preparing PRs like #9753, I've had to change error messages in
dozens of code paths. It would be nice if instead of

    EvalError("expected 'boolean' but found '%1%'", showType(v))

we could write

    TypeError(v, "boolean")

or similar. Then, changing the error message could be a mechanical
refactor with the compiler pointing out places the constructor needs to
be changed, rather than the error-prone process of grepping through the
codebase. Structured errors would also help prevent the "same" error
from having multiple slightly different messages, and could be a first
step towards error codes / an error index.

This PR reworks the exception infrastructure in `libexpr` to
support exception types with different constructor signatures than
`BaseError`. Actually refactoring the exceptions to use structured data
will come in a future PR (this one is big enough already, as it has to
touch every exception in `libexpr`).

The core design is in `eval-error.hh`. Generally, errors like this:

    state.error("'%s' is not a string", getAttrPathStr())
      .debugThrow<TypeError>()

are transformed like this:

    state.error<TypeError>("'%s' is not a string", getAttrPathStr())
      .debugThrow()

The type annotation has moved from `ErrorBuilder::debugThrow` to
`EvalState::error`.

(cherry picked from commit c6a89c1a1659b31694c0fbcd21d78a6dd521c732)
Change-Id: Iced91ba4e00ca9e801518071fb43798936cbd05a
2024-03-09 04:47:05 -07:00
..
realisation fix spelling mistakes reported by Debian's lintian tool 2022-01-30 10:51:39 +02:00
add-file.md Split 'nix store add-to-store' into 'add-path' and 'add-file' 2020-12-04 00:59:24 +01:00
add-path.md Split 'nix store add-to-store' into 'add-path' and 'add-file' 2020-12-04 00:59:24 +01:00
add-to-store.cc Simplify ContentAddress 2023-07-07 07:30:01 -04:00
app.cc Allow dynamic derivation deps in inputDrvs 2023-09-07 10:39:37 -04:00
build.cc Make the Derived Path family of types inductive for dynamic derivations 2023-08-10 00:08:32 -04:00
build.md Also use long options in src/nix/*.md 2023-05-17 08:10:30 +01:00
bundle.cc Fixing #7479 2023-08-18 11:44:00 -04:00
bundle.md clarify definition of "installable" 2023-03-05 01:46:17 +01:00
cat.cc nix store cat: Use writeFull() 2023-03-02 14:51:14 +01:00
copy.cc Make command infra less stateful and more regular 2023-03-15 16:29:07 -04:00
copy.md Also use long options in src/nix/*.md 2023-05-17 08:10:30 +01:00
daemon.cc Port the flags of nix-daemon to nix daemon (#8788) 2023-08-28 13:43:34 +00:00
daemon.md Port the flags of nix-daemon to nix daemon (#8788) 2023-08-28 13:43:34 +00:00
derivation-add.cc Create nix derivation add command 2023-04-07 08:34:58 -04:00
derivation-add.md Create nix derivation add command 2023-04-07 08:34:58 -04:00
derivation-show.cc Rename files to reflect new nix derivation show name 2023-04-07 08:34:58 -04:00
derivation-show.md Create nix derivation add command 2023-04-07 08:34:58 -04:00
derivation.cc nix show-derivation -> nix derivation show 2023-04-07 08:34:58 -04:00
develop.cc Merge pull request #9032 from Ma27/structured-attrs-env-vars 2024-03-07 10:46:47 +01:00
develop.md docs: make the nix develop --command example unambiguous (#8952) 2023-09-12 17:15:36 +02:00
diff-closures.cc Get rid of some unchecked calls to std::cout 2023-03-02 15:02:24 +01:00
diff-closures.md Add 'nix store diff-closures' manpage 2020-12-21 13:32:29 +01:00
doctor.cc Add Store::isTrustedClient() 2023-04-06 19:59:57 -04:00
dump-path.cc Add 'nix store' NAR-related manpages 2020-12-21 13:32:28 +01:00
edit.cc Move value-only methods to InstallableValue 2023-03-16 20:06:46 -04:00
edit.md nix edit: support kakoune 2022-03-22 23:18:02 +09:00
eval.cc libexpr: Support structured error classes 2024-03-09 04:47:05 -07:00
eval.md Also use long options in src/nix/*.md 2023-05-17 08:10:30 +01:00
flake-archive.md Add 'nix flake' manpages 2020-12-23 18:26:40 +01:00
flake-check.md Also use long options in src/nix/*.md 2023-05-17 08:10:30 +01:00
flake-clone.md Add 'nix flake' manpages 2020-12-23 18:26:40 +01:00
flake-init.md Update docs 2022-02-22 14:32:56 +01:00
flake-lock.md nix flake update: Recreate the lock file 2021-02-26 14:55:54 +01:00
flake-metadata.md Merge 'nix flake {info,list-inputs}' into 'nix flake metadata' 2021-03-16 17:19:04 +01:00
flake-new.md Add 'nix flake' manpages 2020-12-23 18:26:40 +01:00
flake-prefetch.md nix store prefetch-tarball -> nix flake prefetch 2021-01-11 12:36:39 +01:00
flake-show.md Update docs 2022-02-22 14:32:56 +01:00
flake-update.md Trivial changes from the lazy-trees branch 2022-12-07 14:06:34 +01:00
flake.cc libexpr: Support structured error classes 2024-03-09 04:47:05 -07:00
flake.md Document the path flakeref format (#8640) 2023-07-04 08:39:08 +00:00
fmt.cc Merge pull request #9494 from sellout/nix-run-execv 2024-03-04 07:11:25 +01:00
fmt.md nix-fmt: add command 2022-03-11 10:00:19 -05:00
get-env.sh Merge pull request #9032 from Ma27/structured-attrs-env-vars 2024-03-07 10:46:47 +01:00
hash.cc Merge pull request #7750 from obsidiansystems/no-args-prepare 2023-03-15 17:23:40 -04:00
help-stores.md Tweaks 2023-03-23 15:32:59 +01:00
help.md Add 'nix help' manpage 2020-12-21 13:32:29 +01:00
key-convert-secret-to-public.md Add commands for generating secret/public keys 2021-01-06 17:49:31 +01:00
key-generate-secret.md Fix missing ` in key manual 2022-06-08 11:46:50 +02:00
local.mk Dedup some markdown -> C++ big literal stuff in build system 2023-05-15 10:38:11 -04:00
log.cc Make the Derived Path family of types inductive for dynamic derivations 2023-08-10 00:08:32 -04:00
log.md clarify definition of "installable" 2023-03-05 01:46:17 +01:00
ls.cc Get rid of some unchecked calls to std::cout 2023-03-02 15:02:24 +01:00
main.cc Merge pull request #10067 from ramboman/fix-proxy-nix 2024-03-04 09:25:17 +01:00
make-content-addressed.cc Make command infra less stateful and more regular 2023-03-15 16:29:07 -04:00
make-content-addressed.md clarify definition of "installable" 2023-03-05 01:46:17 +01:00
nar-cat.md Add 'nix nar' manpages 2020-12-21 13:32:28 +01:00
nar-dump-path.md Add 'nix nar' manpages 2020-12-21 13:32:28 +01:00
nar-ls.md Also use long options in src/nix/*.md 2023-05-17 08:10:30 +01:00
nar.cc Make command infra less stateful and more regular 2023-03-15 16:29:07 -04:00
nar.md Add 'nix nar' manpages 2020-12-21 13:32:28 +01:00
nix.md Fix some grammar in installables doc (#8682) 2023-07-10 09:33:04 +00:00
optimise-store.cc Add 'nix store optimise' manpage 2020-12-21 13:32:28 +01:00
optimise-store.md Add 'nix store optimise' manpage 2020-12-21 13:32:28 +01:00
path-from-hash-part.cc Add command 'nix store path-from-hash-part' 2022-10-18 16:51:12 +02:00
path-from-hash-part.md Add command 'nix store path-from-hash-part' 2022-10-18 16:51:12 +02:00
path-info.cc Replace src/libutil/json.cc with nlohmann json generation 2022-11-16 16:50:50 +01:00
path-info.md Also use long options in src/nix/*.md 2023-05-17 08:10:30 +01:00
ping-store.cc Add Store::isTrustedClient() 2023-04-06 19:59:57 -04:00
ping-store.md Tweak 2021-01-17 19:49:28 +01:00
prefetch.cc Merge pull request #9805 from yshui/prefetch-unpack 2024-03-04 08:24:18 +01:00
print-dev-env.md clarify definition of "installable" 2023-03-05 01:46:17 +01:00
profile-diff-closures.md Add 'nix profile' manpage 2020-12-21 13:32:29 +01:00
profile-history.md nix profile history: Show profile date 2021-09-14 20:47:33 +02:00
profile-install.md clarify definition of "installable" 2023-03-05 01:46:17 +01:00
profile-list.md nix profile list: Improve readability of the output 2023-07-02 16:17:09 +02:00
profile-remove.md man: fix formatting of nix3-profile-remove 2021-06-28 16:27:03 +02:00
profile-rollback.md Generations -> profile versions 2021-09-14 19:57:45 +02:00
profile-upgrade.md Trivial changes from the lazy-trees branch 2022-12-07 14:06:34 +01:00
profile-wipe-history.md Add 'nix profile wipe-history' command 2021-09-14 20:35:41 +02:00
profile.cc Simplify ContentAddress 2023-07-07 07:30:01 -04:00
profile.md Dedup some markdown -> C++ big literal stuff in build system 2023-05-15 10:38:11 -04:00
realisation.cc Move enabled experimental feature to libutil struct 2023-03-20 11:05:22 -04:00
registry-add.md nix registry: add --registry flag 2021-06-30 22:13:32 +03:00
registry-list.md Add 'nix registry' manpages 2020-12-21 13:32:27 +01:00
registry-pin.md Style tweaks 2021-07-07 10:02:55 +02:00
registry-remove.md nix registry: add --registry flag 2021-06-30 22:13:32 +03:00
registry.cc Move enabled experimental feature to libutil struct 2023-03-20 11:05:22 -04:00
registry.md doc: Fix typo 2022-06-28 22:43:37 -04:00
repl.cc Move evaluator settings (type and global) to separate file/header 2023-07-31 10:14:15 -04:00
repl.md Fix typo -- dashes not underscores 2022-10-17 14:15:32 -06:00
run.cc Merge pull request #9648 from cole-h/nix-shell-ordering 2024-03-04 07:50:55 +01:00
run.hh Merge pull request #9494 from sellout/nix-run-execv 2024-03-04 07:11:25 +01:00
run.md clarify definition of "installable" 2023-03-05 01:46:17 +01:00
search.cc Merge pull request #9481 from iFreilicht/disallow-nix-search-without-search-terms 2024-03-04 08:40:12 +01:00
search.md Merge pull request #9481 from iFreilicht/disallow-nix-search-without-search-terms 2024-03-04 08:40:12 +01:00
shell.md fix: nix shell multiple commands example (#8950) 2023-09-07 22:25:32 +00:00
show-config.cc nix/show-config: allow getting the value of a specific setting 2023-01-12 13:56:35 -08:00
sigs.cc Make command infra less stateful and more regular 2023-03-15 16:29:07 -04:00
store-cat.md Add 'nix store' NAR-related manpages 2020-12-21 13:32:28 +01:00
store-copy-log.cc Fix misrendering of 'nix store --help' 2023-03-21 12:02:19 +01:00
store-copy-log.md link "store derivation" to glossary definition 2022-12-21 11:42:50 +01:00
store-delete.cc Make command infra less stateful and more regular 2023-03-15 16:29:07 -04:00
store-delete.md clarify definition of "installable" 2023-03-05 01:46:17 +01:00
store-dump-path.md clarify definition of "installable" 2023-03-05 01:46:17 +01:00
store-gc.cc Deduplicate the Store downcasting with a template 2022-03-11 13:32:33 +00:00
store-gc.md Add 'nix store gc' command 2021-01-10 23:29:14 +01:00
store-ls.md Also use long options in src/nix/*.md 2023-05-17 08:10:30 +01:00
store-prefetch-file.md Fix some typos 2021-03-26 16:14:38 +01:00
store-repair.cc Make command infra less stateful and more regular 2023-03-15 16:29:07 -04:00
store-repair.md clarify definition of "installable" 2023-03-05 01:46:17 +01:00
store.cc Move store docs to 'nix help-stores' 2023-03-21 14:37:09 +01:00
upgrade-nix.cc Move evaluator settings (type and global) to separate file/header 2023-07-31 10:14:15 -04:00
upgrade-nix.md Also use long options in src/nix/*.md 2023-05-17 08:10:30 +01:00
verify.cc Avoid some StorePath <-> Path round trips 2023-01-30 09:37:57 -05:00
verify.md Also use long options in src/nix/*.md 2023-05-17 08:10:30 +01:00
why-depends.cc nix/why-depends: fix output of --precise 2023-08-04 23:11:08 +02:00
why-depends.md Add 'nix why-depends' manpage 2020-12-21 13:32:28 +01:00