tvl-depot/nix
sterni 690994a28c fix(nix/yants): make (typedef …).checkType return a result set
Previously, for types defined using typedef (like all primitive types)
type.checkType would return a boolean. This is largely fine since in
most places `type.checkToBool (type.checkType x)` or similar is used.
However, some functions actually take type.checkType up on the promise
that it returns a set of the form:

  {
    ok = <bool>;
    err = <option string>;
  }

This is the case for restrict which has checkToBool = v: v.ok; and will
generate a proper set except if `t.checkToBool (t.checkType v) == false`
in which case it will return t.checkType v. If t was a primitive type or
defined using typedef, previously `t.checkType v` would be a boolean
which meant as soon as (restrict …).checkToBool was called on a restrict
checkType result in cases where the wrapped type didn't match, an
unrelated error would be thrown:

  nix-repl> with nix.yants; restrict "foo" (_: true) int "lol"
  error: value is a boolean while a set was expected, at /home/lukas/src/depot/nix/yants/default.nix:38:39

This is fixed by making typedef return a proper set from checkType and
adjusting its checkToBool accordingly.

Unfortunately I don't think we can easily add test cases for this except
by using recursive nix or VM tests as there is no way to introspect
error messages.

Change-Id: I96a7be065630f04ca33358f21809284911ec14fe
Reviewed-on: https://cl.tvl.fyi/c/depot/+/2536
Tested-by: BuildkiteCI
Reviewed-by: tazjin <mail@tazj.in>
Reviewed-by: Profpatsch <mail@profpatsch.de>
2021-02-19 16:14:55 +00:00
..
binify refactor(nix): use our own writeScript(Bin) 2020-06-30 00:19:27 +00:00
bufCheck feat(ci): run buf check lint in CI 2020-07-17 22:55:13 +00:00
buildGo feat(tools/depot-scanner): init project 2020-08-20 03:05:40 +00:00
buildLisp fix(buildLisp): Override LANG in sbclWith for misconfigured machines 2020-11-08 18:35:28 +00:00
drvSeqL feat(nix/drvSeqL): make build of a drv depend on unrelated drvs 2021-02-14 12:40:06 +00:00
emptyDerivation feat(nix/emptyDerivation) add emptyDerivation 2020-06-28 17:59:46 +00:00
escapeExecline chore(OWNERS): move Profpatsch up to nix/ 2021-01-01 19:03:15 +00:00
getBins chore(OWNERS): move Profpatsch up to nix/ 2021-01-01 19:03:15 +00:00
mergePatch feat(nix): add mergePatch 2021-01-01 19:03:02 +00:00
readTree fix(nix/readTree): make nixFileName only match .nix extensions 2021-02-18 00:07:14 +00:00
runExecline feat(nix): add runExecline.local 2021-01-02 14:24:35 +00:00
runTestsuite feat(nix/runTestsuite): add assertDoesNotThrow 2021-02-09 21:57:56 +00:00
tag feat(nix): add nix.tag, a way of discriminating via tagged unions 2021-01-30 15:41:08 +00:00
tailscale chore: Rename pkgs->depot in all Nix file headers 2020-02-21 13:54:53 +00:00
writeElispBin chore(writeElispBin): Move from //overrides to //nix 2020-12-01 12:55:59 +00:00
writeExecline chore(OWNERS): move Profpatsch up to nix/ 2021-01-01 19:03:15 +00:00
writeScript refactor(nix): use our own writeScript(Bin) 2020-06-30 00:19:27 +00:00
writeScriptBin refactor(nix): use our own writeScript(Bin) 2020-06-30 00:19:27 +00:00
yants fix(nix/yants): make (typedef …).checkType return a result set 2021-02-19 16:14:55 +00:00
OWNERS chore(OWNERS): move Profpatsch up to nix/ 2021-01-01 19:03:15 +00:00