mirror of
https://github.com/NixOS/nix
synced 2025-06-24 22:11:15 +02:00
Merge pull request #11406 from kstrafe/master
nix repl: Print which variables are just loaded
This commit is contained in:
commit
c5b1be46b4
2 changed files with 66 additions and 1 deletions
|
@ -69,6 +69,7 @@ struct NixRepl
|
|||
|
||||
const static int envSize = 32768;
|
||||
std::shared_ptr<StaticEnv> staticEnv;
|
||||
Value lastLoaded;
|
||||
Env * env;
|
||||
int displ;
|
||||
StringSet varNames;
|
||||
|
@ -95,6 +96,7 @@ struct NixRepl
|
|||
void loadFiles();
|
||||
void loadFlakes();
|
||||
void reloadFilesAndFlakes();
|
||||
void showLastLoaded();
|
||||
void addAttrsToScope(Value & attrs);
|
||||
void addVarToScope(const Symbol name, Value & v);
|
||||
Expr * parseString(std::string s);
|
||||
|
@ -372,6 +374,7 @@ ProcessLineResult NixRepl::processLine(std::string line)
|
|||
<< " current profile\n"
|
||||
<< " :l, :load <path> Load Nix expression and add it to scope\n"
|
||||
<< " :lf, :load-flake <ref> Load Nix flake and add it to scope\n"
|
||||
<< " :ll, :last-loaded Show most recently loaded variables added to scope\n"
|
||||
<< " :p, :print <expr> Evaluate and print expression recursively\n"
|
||||
<< " Strings are printed directly, without escaping.\n"
|
||||
<< " :q, :quit Exit nix-repl\n"
|
||||
|
@ -462,6 +465,10 @@ ProcessLineResult NixRepl::processLine(std::string line)
|
|||
loadFlake(arg);
|
||||
}
|
||||
|
||||
else if (command == ":ll" || command == ":last-loaded") {
|
||||
showLastLoaded();
|
||||
}
|
||||
|
||||
else if (command == ":r" || command == ":reload") {
|
||||
state->resetFileCache();
|
||||
reloadFilesAndFlakes();
|
||||
|
@ -754,6 +761,16 @@ void NixRepl::initEnv()
|
|||
varNames.emplace(state->symbols[i.first]);
|
||||
}
|
||||
|
||||
void NixRepl::showLastLoaded()
|
||||
{
|
||||
RunPager pager;
|
||||
|
||||
for (auto & i : *lastLoaded.attrs()) {
|
||||
std::string_view name = state->symbols[i.name];
|
||||
logger->cout(name);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void NixRepl::reloadFilesAndFlakes()
|
||||
{
|
||||
|
@ -807,6 +824,27 @@ void NixRepl::addAttrsToScope(Value & attrs)
|
|||
staticEnv->sort();
|
||||
staticEnv->deduplicate();
|
||||
notice("Added %1% variables.", attrs.attrs()->size());
|
||||
|
||||
lastLoaded = attrs;
|
||||
|
||||
const int max_print = 20;
|
||||
int counter = 0;
|
||||
std::ostringstream loaded;
|
||||
for (auto & i : attrs.attrs()->lexicographicOrder(state->symbols)) {
|
||||
if (counter >= max_print)
|
||||
break;
|
||||
|
||||
if (counter > 0)
|
||||
loaded << ", ";
|
||||
|
||||
printIdentifier(loaded, state->symbols[i->name]);
|
||||
counter += 1;
|
||||
}
|
||||
|
||||
notice("%1%", loaded.str());
|
||||
|
||||
if (attrs.attrs()->size() > max_print)
|
||||
notice("... and %1% more; view with :ll", attrs.attrs()->size() - max_print);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -157,6 +157,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) 23))
|
||||
' 'Added 23 variables.
|
||||
"0", "1", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "2", "20", "21", "22", "3", "4", "5", "6"
|
||||
... and 3 more; view with :ll'
|
||||
|
||||
# Test the `:reload` mechansim with flakes:
|
||||
# - Eval `./flake#changingThing`
|
||||
# - Modify the flake
|
||||
|
@ -328,7 +354,8 @@ runRepl () {
|
|||
-e "s@$testDir@/path/to/tests/functional@g" \
|
||||
-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 "/Added [0-9]* variables/{s@ [0-9]* @ <number omitted> @;n;d}" \
|
||||
-e '/\.\.\. and [0-9]* more; view with :ll/d' \
|
||||
| grep -vF $'warning: you don\'t have Internet access; disabling some network-dependent features' \
|
||||
;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue