mirror of
https://github.com/NixOS/nix.git
synced 2024-11-25 16:23:02 +00:00
builtins.warn: Require string argument
... so that we may perhaps later extend the interface. Note that Nixpkgs' lib.warn already requires a string coercible argument, so this is reasonable. Also note that string coercible values aren't all strings, but in practice, for warn, they are.
This commit is contained in:
parent
923cbea2af
commit
da82d67022
@ -1045,16 +1045,12 @@ static RegisterPrimOp primop_trace({
|
|||||||
|
|
||||||
static void prim_warn(EvalState & state, const PosIdx pos, Value * * args, Value & v)
|
static void prim_warn(EvalState & state, const PosIdx pos, Value * * args, Value & v)
|
||||||
{
|
{
|
||||||
state.forceValue(*args[0], pos);
|
// We only accept a string argument for now. The use case for pretty printing a value is covered by `trace`.
|
||||||
|
// By rejecting non-strings we allow future versions to add more features without breaking existing code.
|
||||||
|
auto msgStr = state.forceString(*args[0], pos, "while evaluating the first argument; the message passed to builtins.warn");
|
||||||
|
|
||||||
{
|
{
|
||||||
BaseError msg(args[0]->type() == nString
|
BaseError msg(std::string{msgStr});
|
||||||
? std::string(args[0]->string_view())
|
|
||||||
: ({
|
|
||||||
std::stringstream s;
|
|
||||||
s << ValuePrinter(state, *args[0]);
|
|
||||||
s.str();
|
|
||||||
}));
|
|
||||||
msg.atPos(state.positions[pos]);
|
msg.atPos(state.positions[pos]);
|
||||||
auto info = msg.info();
|
auto info = msg.info();
|
||||||
info.level = lvlWarn;
|
info.level = lvlWarn;
|
||||||
|
@ -38,8 +38,10 @@ nix-instantiate --eval -E 'let x = { repeating = x; tracing = builtins.trace x t
|
|||||||
|
|
||||||
nix-instantiate --eval -E 'builtins.warn "Hello" 123' 2>&1 | grepQuiet 'warning: Hello'
|
nix-instantiate --eval -E 'builtins.warn "Hello" 123' 2>&1 | grepQuiet 'warning: Hello'
|
||||||
nix-instantiate --eval -E 'builtins.addErrorContext "while doing ${"something"} interesting" (builtins.warn "Hello" 123)' 2>/dev/null | grepQuiet 123
|
nix-instantiate --eval -E 'builtins.addErrorContext "while doing ${"something"} interesting" (builtins.warn "Hello" 123)' 2>/dev/null | grepQuiet 123
|
||||||
nix-instantiate --eval -E 'let x = builtins.warn { x = x; } true; in x' \
|
|
||||||
2>&1 | grepQuiet -E 'warning: { x = «potential infinite recursion»; }'
|
# warn does not accept non-strings for now
|
||||||
|
expectStderr 1 nix-instantiate --eval -E 'let x = builtins.warn { x = x; } true; in x' \
|
||||||
|
| grepQuiet "expected a string but found a set"
|
||||||
expectStderr 1 nix-instantiate --eval --abort-on-warn -E 'builtins.warn "Hello" 123' | grepQuiet Hello
|
expectStderr 1 nix-instantiate --eval --abort-on-warn -E 'builtins.warn "Hello" 123' | grepQuiet Hello
|
||||||
NIX_ABORT_ON_WARN=1 expectStderr 1 nix-instantiate --eval -E 'builtins.addErrorContext "while doing ${"something"} interesting" (builtins.warn "Hello" 123)' | grepQuiet "while doing something interesting"
|
NIX_ABORT_ON_WARN=1 expectStderr 1 nix-instantiate --eval -E 'builtins.addErrorContext "while doing ${"something"} interesting" (builtins.warn "Hello" 123)' | grepQuiet "while doing something interesting"
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user