Skip to content

Commit

Permalink
nix repl: Add :ll to show all recently loaded variables
Browse files Browse the repository at this point in the history
Invoking `:ll` will start a pager with all variables which have just
been loaded by `:lf`, `:l`, or by a flake provided to `nix repl` as an
argument.

#11404
  • Loading branch information
kstrafe committed Sep 3, 2024
1 parent 55ccb40 commit 667a643
Showing 1 changed file with 19 additions and 1 deletion.
20 changes: 19 additions & 1 deletion src/libcmd/repl.cc
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ struct NixRepl

const static int envSize = 32768;
std::shared_ptr<StaticEnv> staticEnv;
Value lastLoaded;
Env * env;
int displ;
StringSet varNames;
Expand All @@ -96,6 +97,7 @@ struct NixRepl
void loadFile(const Path & path);
void loadFlake(const std::string & flakeRef);
void loadFiles();
void showLastLoaded();
void reloadFiles();
void addAttrsToScope(Value & attrs);
void addVarToScope(const Symbol name, Value & v);
Expand Down Expand Up @@ -470,6 +472,10 @@ ProcessLineResult NixRepl::processLine(std::string line)
loadFlake(arg);
}

else if (command == ":ll" || command == ":last-flake") {
showLastLoaded();
}

else if (command == ":r" || command == ":reload") {
state->resetFileCache();
reloadFiles();
Expand Down Expand Up @@ -750,6 +756,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::reloadFiles()
{
Expand Down Expand Up @@ -791,12 +807,14 @@ void NixRepl::addAttrsToScope(Value & attrs)
staticEnv->deduplicate();
notice("Added %1% variables.", attrs.attrs()->size());

lastLoaded = attrs;

const int max_print = 10;
int count = 0;
for (auto & i : *attrs.attrs()) {
count += 1;
if (count > max_print) {
notice("... And %1% other variables", attrs.attrs()->size() - max_print);
notice("... And %1% other variables, use :ll to see these", attrs.attrs()->size() - max_print);
break;
}

Expand Down

0 comments on commit 667a643

Please sign in to comment.