1
1
Fork 0
mirror of https://github.com/NixOS/nix.git synced 2025-12-21 16:31:07 +01:00
nix/src/libutil
John Ericson b461cac21a
Overhaul completions, redo #6693 (#8131)
As I complained in
https://github.com/NixOS/nix/pull/6784#issuecomment-1421777030 (a
comment on the wrong PR, sorry again!), #6693 introduced a second
completions mechanism to fix a bug. Having two completion mechanisms
isn't so nice.

As @thufschmitt also pointed out, it was a bummer to go from `FlakeRef`
to `std::string` when collecting flake refs. Now it is `FlakeRefs`
again.

The underlying issue that sought to work around was that completion of
arguments not at the end can still benefit from the information from
latter arguments.

To fix this better, we rip out that change and simply defer all
completion processing until after all the (regular, already-complete)
arguments have been passed.

In addition, I noticed the original completion logic used some global
variables. I do not like global variables, because even if they save
lines of code, they also obfuscate the architecture of the code.

I got rid of them  moved them to a new `RootArgs` class, which now has
`parseCmdline` instead of `Args`. The idea is that we have many argument
parsers from subcommands and what-not, but only one root args that owns
the other per actual parsing invocation. The state that was global is
now part of the root args instead.

This did, admittedly, add a bunch of new code. And I do feel bad about
that. So I went and added a lot of API docs to try to at least make the
current state of things clear to the next person.

--

This is needed for RFC 134 (tracking issue #7868). It was very hard to
modularize `Installable` parsing when there were two completion
arguments. I wouldn't go as far as to say it is *easy* now, but at least
it is less hard (and the completions test finally passed).

Co-authored-by: Valentin Gagarin <valentin.gagarin@tweag.io>
2023-10-23 15:03:11 +02:00
..
args Overhaul completions, redo #6693 (#8131) 2023-10-23 15:03:11 +02:00
tests Add helper function parseHashFormat[Opt] printHashFormat 2023-10-19 00:56:44 +08:00
abstract-setting-to-json.hh Split OptionalPathSetting from PathSetting 2023-06-18 23:31:18 -04:00
ansicolor.hh Finish converting existing comments for internal API docs (#8146) 2023-04-07 13:55:28 +00:00
archive.cc Move PosixSourceAccessor into its own file 2023-10-23 11:05:50 +02:00
archive.hh Move ParseSink to its own header 2023-09-22 09:10:32 -04:00
args.cc Overhaul completions, redo #6693 (#8131) 2023-10-23 15:03:11 +02:00
args.hh Overhaul completions, redo #6693 (#8131) 2023-10-23 15:03:11 +02:00
callback.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
canon-path.cc Backport SourcePath from the lazy-trees branch 2023-04-06 13:15:50 +02:00
canon-path.hh Merge remote-tracking branch 'upstream/master' into source-path 2023-04-17 11:41:50 +02:00
cgroup.cc Clean up cgroup handling in getMaxCPU() 2022-12-02 12:59:13 +01:00
cgroup.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
chunked-vector.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
closure.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
comparator.hh Allow dynamic derivation deps in inputDrvs 2023-09-07 10:39:37 -04:00
compression.cc Rename and protect BufferedSink::write 2023-04-07 09:21:50 +02:00
compression.hh Rename and protect BufferedSink::write 2023-04-07 09:21:50 +02:00
compute-levels.cc Add x86_64 compute levels as additional system types 2021-02-22 09:11:15 +01:00
compute-levels.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
config-impl.hh Merge pull request #8374 from obsidiansystems/improve-path-setting 2023-06-21 15:40:43 -04:00
config.cc libutil: Remove non-needed constructor 2023-10-19 18:26:49 +01:00
config.hh libutil: Use c++ style cast 2023-10-19 18:26:49 +01:00
error.cc traces: Add _NIX_DEVELOPER_SHOW_UNKNOWN_LOCATIONS 2023-09-03 14:08:03 +02:00
error.hh traces: Do not print unknown location 2023-09-03 13:44:32 +02:00
experimental-features.cc Allow CLI to pass environment variables to FOD builder (#8830) 2023-10-11 11:58:42 +00:00
experimental-features.hh Allow CLI to pass environment variables to FOD builder (#8830) 2023-10-11 11:58:42 +00:00
filesystem.cc Remove dead code (#8504) 2023-06-14 14:09:11 -04:00
finally.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
fmt.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
fs-sink.cc Expose RestoreSink in header (fs-sink.hh) 2023-09-22 09:11:29 -04:00
fs-sink.hh Expose RestoreSink in header (fs-sink.hh) 2023-09-22 09:11:29 -04:00
git.cc Fix the parsing of the sourcehut refs file 2022-05-04 14:38:59 +02:00
git.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
hash.cc Add helper function parseHashFormat[Opt] printHashFormat 2023-10-19 00:56:44 +08:00
hash.hh Add helper function parseHashFormat[Opt] printHashFormat 2023-10-19 00:56:44 +08:00
hilite.cc Fix incorrect comment in hiliteMatches 2022-06-05 20:30:18 +02:00
hilite.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
json-impls.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
json-utils.cc Fix derivation load assertion errors 2023-08-05 01:34:30 +02:00
json-utils.hh Fix derivation load assertion errors 2023-08-05 01:34:30 +02:00
local.mk Overhaul completions, redo #6693 (#8131) 2023-10-23 15:03:11 +02:00
logging.cc Print parent activity field in json log 2023-09-09 18:01:10 +02:00
logging.hh Finish converting existing comments for internal API docs (#8146) 2023-04-07 13:55:28 +00:00
lru-cache.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
monitor-fd.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
namespaces.cc Simplify the PID namespace check: just try to mount /proc 2023-02-10 14:38:14 +01:00
namespaces.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
pool.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
posix-source-accessor.cc Move PosixSourceAccessor into its own file 2023-10-23 11:05:50 +02:00
posix-source-accessor.hh Move PosixSourceAccessor into its own file 2023-10-23 11:05:50 +02:00
ref.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
references.cc Don't assume the type of string::size_type 2023-06-15 21:24:14 +02:00
references.hh Don't assume the type of string::size_type 2023-06-15 21:24:14 +02:00
regex-combinators.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
serialise.cc Merge pull request #8176 from tweag/rename-confusing-write-method 2023-04-14 10:44:36 +02:00
serialise.hh Merge pull request #8176 from tweag/rename-confusing-write-method 2023-04-14 10:44:36 +02:00
source-accessor.cc Move PosixSourceAccessor into its own file 2023-10-23 11:05:50 +02:00
source-accessor.hh Move PosixSourceAccessor into its own file 2023-10-23 11:05:50 +02:00
split.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
suggestions.cc Implement operator<< for Suggestions 2022-03-07 10:09:10 +01:00
suggestions.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
sync.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
tarfile.cc TarArchive: Remove a duplicate constant and increase the buffer size 2023-04-25 16:43:10 +02:00
tarfile.hh TarArchive: Remove a duplicate constant and increase the buffer size 2023-04-25 16:43:10 +02:00
thread-pool.cc Remove CPU locking 2021-12-22 15:56:25 +01:00
thread-pool.hh Finish converting existing comments for internal API docs (#8146) 2023-04-07 13:55:28 +00:00
topo-sort.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
types.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00
url-parts.hh Put functional tests in tests/functional 2023-10-06 09:05:56 -04:00
url.cc fetchTree cleanup 2023-10-13 14:34:23 +02:00
url.hh fetchTree cleanup 2023-10-13 14:34:23 +02:00
util.cc Respect NOCOLOR 2023-09-27 14:49:52 -05:00
util.hh Remove dead code (#8504) 2023-06-14 14:09:11 -04:00
variant-wrapper.hh Fixing #7479 2023-08-18 11:44:00 -04:00
xml-writer.cc xml-writer: Remove std aliases 2022-02-25 16:13:02 +01:00
xml-writer.hh Ensure all headers have #pragma once and are in API docs 2023-03-31 23:19:44 -04:00