forked from lix-project/lix
libexpr: findDerivationFilename return Pos instead of tuple
This commit is contained in:
parent
59c7249769
commit
ec448f8bb6
|
@ -93,7 +93,7 @@ Value * findAlongAttrPath(EvalState & state, const string & attrPath,
|
|||
}
|
||||
|
||||
|
||||
std::tuple<std::string, int> findDerivationFilename(EvalState & state, Value & v, std::string what)
|
||||
Pos findDerivationFilename(EvalState & state, Value & v, std::string what)
|
||||
{
|
||||
Value * v2;
|
||||
try {
|
||||
|
@ -110,14 +110,16 @@ std::tuple<std::string, int> findDerivationFilename(EvalState & state, Value & v
|
|||
throw Error("cannot parse meta.position attribute '%s'", pos);
|
||||
|
||||
std::string filename(pos, 0, colon);
|
||||
int lineno;
|
||||
unsigned int lineno;
|
||||
try {
|
||||
lineno = std::stoi(std::string(pos, colon + 1));
|
||||
} catch (std::invalid_argument & e) {
|
||||
throw Error("cannot parse line number '%s'", pos);
|
||||
}
|
||||
|
||||
return std::make_tuple(filename, lineno);
|
||||
Symbol file = state.symbols.create(filename);
|
||||
|
||||
return { file, lineno, 0 };
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -4,15 +4,13 @@
|
|||
|
||||
#include <string>
|
||||
#include <map>
|
||||
#include <tuple>
|
||||
|
||||
namespace nix {
|
||||
|
||||
Value * findAlongAttrPath(EvalState & state, const string & attrPath,
|
||||
Bindings & autoArgs, Value & vIn);
|
||||
|
||||
/* Heuristic to find the filename and lineno or a derivation. */
|
||||
std::tuple<std::string, int> findDerivationFilename(EvalState & state,
|
||||
Value & v, std::string what);
|
||||
/* Heuristic to find the filename and lineno or a nix value. */
|
||||
Pos findDerivationFilename(EvalState & state, Value & v, std::string what);
|
||||
|
||||
}
|
||||
|
|
|
@ -36,9 +36,9 @@ struct CmdEdit : InstallableCommand
|
|||
|
||||
auto v = installable->toValue(*state);
|
||||
|
||||
std::string filename;
|
||||
int lineno;
|
||||
std::tie(filename, lineno) = findDerivationFilename(*state, *v, installable->what());
|
||||
Pos pos = findDerivationFilename(*state, *v, installable->what());
|
||||
std::string filename(pos.file);
|
||||
int lineno(pos.line);
|
||||
|
||||
stopProgressBar();
|
||||
|
||||
|
|
|
@ -481,7 +481,9 @@ bool NixRepl::processLine(string line)
|
|||
lineno = 0;
|
||||
} else {
|
||||
// assume it's a derivation
|
||||
std::tie(filename, lineno) = findDerivationFilename(state, v, arg);
|
||||
Pos pos = findDerivationFilename(state, v, arg);
|
||||
filename = pos.file;
|
||||
lineno = pos.line;
|
||||
}
|
||||
|
||||
// Open in EDITOR
|
||||
|
|
Loading…
Reference in a new issue