diff --git a/src/libexpr/flake/flake.cc b/src/libexpr/flake/flake.cc index 460eea5eaf6..1b823ff4673 100644 --- a/src/libexpr/flake/flake.cc +++ b/src/libexpr/flake/flake.cc @@ -218,11 +218,14 @@ static Flake getFlake( if (outputs->value->lambda.fun->matchAttrs) { for (auto & formal : outputs->value->lambda.fun->formals->formals) { - if (formal.name != state.sSelf) + if (formal.name != state.sSelf) { + if (!flake.inputs.count(formal.name)) + warn("implicit flake:%s input via output function argument in %s", formal.name, lockedRef); flake.inputs.emplace(formal.name, FlakeInput { .ref = parseFlakeRef(formal.name) }); - } + }; + }; } } else diff --git a/tests/flakes.sh b/tests/flakes.sh index 5aec563ac09..014f41c02b5 100644 --- a/tests/flakes.sh +++ b/tests/flakes.sh @@ -245,6 +245,53 @@ nix build -o $TEST_ROOT/result --no-registries git+file://$flake2Dir#bar --refre nix build -o $TEST_ROOT/result $flake3Dir#xyzzy git -C $flake3Dir add flake.lock +# Check how non-existent implicit input references are handled with +# body eval errors +rm $flake3Dir/flake.nix + +cat > $flake3Dir/flake.nix <$err +cat $err +grep -q UndefinedVarError $err +grep -q nofluke $err + +# Check how non-existent implicit input references are handled +rm $flake3Dir/flake.nix + +cat > $flake3Dir/flake.nix <$err +cat $err +grep "warning: implicit flake:noflake input via output function argument in git+file:///" $err +grep error $err +grep "cannot find flake 'flake:noflake' in the flake registries" $err + # Add dependency to flake3. rm $flake3Dir/flake.nix