aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEelco Dolstra <edolstra@gmail.com>2020-08-24 14:49:30 +0200
committerEelco Dolstra <edolstra@gmail.com>2020-08-24 14:49:30 +0200
commit0f314f3c2594e80322c675b70a61dcfda11bf423 (patch)
treeb978499817409cc431b53f27bf180b97561b273d
parenta990f063ff7afc6028ab430170ad23e1285d1a6d (diff)
Generate builtins section of the manual
-rw-r--r--.gitignore2
-rw-r--r--doc/manual/generate-builtins.jq6
-rw-r--r--doc/manual/local.mk11
-rw-r--r--doc/manual/src/expressions/builtins-prefix.md (renamed from doc/manual/src/expressions/builtins.md)0
-rw-r--r--src/nix/main.cc20
5 files changed, 36 insertions, 3 deletions
diff --git a/.gitignore b/.gitignore
index 44dbaa5d7..0ea27c8c8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -27,8 +27,10 @@ perl/Makefile.config
/doc/manual/*.8
/doc/manual/nix.json
/doc/manual/conf-file.json
+/doc/manual/builtins.json
/doc/manual/src/command-ref/nix.md
/doc/manual/src/command-ref/conf-file.md
+/doc/manual/src/expressions/builtins.md
# /scripts/
/scripts/nix-profile.sh
diff --git a/doc/manual/generate-builtins.jq b/doc/manual/generate-builtins.jq
new file mode 100644
index 000000000..c38799479
--- /dev/null
+++ b/doc/manual/generate-builtins.jq
@@ -0,0 +1,6 @@
+. | to_entries | sort_by(.key) | map(
+ " - `builtins." + .key + "` "
+ + (.value.args | map("*" + . + "*") | join(" "))
+ + " \n\n"
+ + (.value.doc | split("\n") | map(" " + . + "\n") | join("")) + "\n\n"
+) | join("")
diff --git a/doc/manual/local.mk b/doc/manual/local.mk
index dcc02d538..297a73414 100644
--- a/doc/manual/local.mk
+++ b/doc/manual/local.mk
@@ -32,15 +32,22 @@ $(d)/src/command-ref/conf-file.md: $(d)/conf-file.json $(d)/generate-options.jq
jq -r -f doc/manual/generate-options.jq $< >> $@
$(d)/nix.json: $(bindir)/nix
- $(trace-gen) $(bindir)/nix dump-args > $@
+ $(trace-gen) $(bindir)/nix __dump-args > $@
$(d)/conf-file.json: $(bindir)/nix
$(trace-gen) env -i NIX_CONF_DIR=/dummy HOME=/dummy $(bindir)/nix show-config --json --experimental-features nix-command > $@
+$(d)/src/expressions/builtins.md: $(d)/builtins.json $(d)/generate-builtins.jq $(d)/src/expressions/builtins-prefix.md
+ cat doc/manual/src/expressions/builtins-prefix.md > $@
+ jq -r -f doc/manual/generate-builtins.jq $< >> $@
+
+$(d)/builtins.json: $(bindir)/nix
+ $(trace-gen) $(bindir)/nix __dump-builtins > $@
+
# Generate the HTML manual.
install: $(docdir)/manual/index.html
-$(docdir)/manual/index.html: $(MANUAL_SRCS) $(d)/book.toml $(d)/custom.css
+$(docdir)/manual/index.html: $(MANUAL_SRCS) $(d)/book.toml $(d)/custom.css $(d)/src/command-ref/nix.md $(d)/src/command-ref/conf-file.md $(d)/src/expressions/builtins.md
$(trace-gen) mdbook build doc/manual -d $(docdir)/manual
@cp doc/manual/highlight.pack.js $(docdir)/manual/highlight.js
diff --git a/doc/manual/src/expressions/builtins.md b/doc/manual/src/expressions/builtins-prefix.md
index ae3bb150c..ae3bb150c 100644
--- a/doc/manual/src/expressions/builtins.md
+++ b/doc/manual/src/expressions/builtins-prefix.md
diff --git a/src/nix/main.cc b/src/nix/main.cc
index 0c4fd46fd..210327927 100644
--- a/src/nix/main.cc
+++ b/src/nix/main.cc
@@ -179,11 +179,29 @@ void mainWrapped(int argc, char * * argv)
NixArgs args;
- if (argc == 2 && std::string(argv[1]) == "dump-args") {
+ if (argc == 2 && std::string(argv[1]) == "__dump-args") {
std::cout << args.toJSON().dump() << "\n";
return;
}
+ if (argc == 2 && std::string(argv[1]) == "__dump-builtins") {
+ EvalState state({}, openStore("ssh://foo.invalid/"));
+ auto res = nlohmann::json::object();
+ auto builtins = state.baseEnv.values[0]->attrs;
+ for (auto & builtin : *builtins) {
+ auto b = nlohmann::json::object();
+ if (builtin.value->type != tPrimOp) continue;
+ auto primOp = builtin.value->primOp;
+ if (!primOp->doc) continue;
+ b["arity"] = primOp->arity;
+ b["args"] = primOp->args;
+ b["doc"] = trim(stripIndentation(primOp->doc));
+ res[(std::string) builtin.name] = std::move(b);
+ }
+ std::cout << res.dump() << "\n";
+ return;
+ }
+
Finally printCompletions([&]()
{
if (completions) {