Skip to content

Commit

Permalink
nix repl: Print which variables are just loaded
Browse files Browse the repository at this point in the history
When we run `nix repl nixpkgs` we get "Added 6 variables". This is not
useful as it doesn't tell us which variables the flake has exported to
our global repl scope.

This patch prints the name of each variable that was just loaded. We
currently cap printing to 10 variables in order to avoid excessive
prints.

#11404
  • Loading branch information
kstrafe committed Feb 1, 2025
1 parent d949c8d commit 54cf934
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 0 deletions.
19 changes: 19 additions & 0 deletions src/libcmd/repl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -791,6 +791,25 @@ void NixRepl::addAttrsToScope(Value & attrs)
staticEnv->sort();
staticEnv->deduplicate();
notice("Added %1% variables.", attrs.attrs()->size());

const int max_print = 10;
int counter = 0;
std::string loaded;
for (auto & i : attrs.attrs()->lexicographicOrder(state->symbols)) {
if (counter >= max_print)
break;

if (counter > 0)
loaded += ", ";

loaded += printIdentifier(state->symbols[i->name]);
counter += 1;
}

notice("%1%", loaded);

if (attrs.attrs()->size() > max_print)
notice("... and %1% more", attrs.attrs()->size() - max_print);
}


Expand Down
28 changes: 28 additions & 0 deletions tests/functional/repl.sh
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,32 @@ foo + baz
' "3" \
./flake ./flake\#bar --experimental-features 'flakes'

testReplResponse $'
:a { a = 1; b = 2; longerName = 3; "with spaces" = 4; }
' 'Added 4 variables.
a, b, longerName, with spaces
'

cat <<EOF > attribute-set.nix
{
a = 1;
b = 2;
longerName = 3;
"with spaces" = 4;
}
EOF
testReplResponse '
:l ./attribute-set.nix
' 'Added 4 variables.
a, b, longerName, with spaces
'

testReplResponseNoRegex $'
:a builtins.foldl\' (x: y: x // y) {} (map (x: { ${builtins.toString x} = x; }) (builtins.genList (x: x) 13))
' 'Added 13 variables.
0, 1, 10, 11, 12, 2, 3, 4, 5, 6
... and 3 more'

# Test the `:reload` mechansim with flakes:
# - Eval `./flake#changingThing`
# - Modify the flake
Expand Down Expand Up @@ -302,6 +328,8 @@ runRepl () {
-e "s@$testDirNoUnderscores@/path/to/tests/functional@g" \
-e "s@$nixVersion@<nix version>@g" \
-e "s@Added [0-9]* variables@Added <number omitted> variables@g" \
-e '/^- /d' \
-e '/\.\.\. and [0-9]* more/d' \
| grep -vF $'warning: you don\'t have Internet access; disabling some network-dependent features' \
;
}
Expand Down

0 comments on commit 54cf934

Please sign in to comment.