1
0
Fork 0
mirror of https://github.com/NixOS/nix synced 2025-07-07 06:01:48 +02:00

Assemble experimental feature docs outside of Nix itself

Instead of constructing a markdown list in C++ (which involved all sorts
of nasty string literals), export some JSON and assemble it with the
manual build system.

Besides following the precedent set with other dumped data, this is a
better separate of content and presentation; if we decide for example we
want to display this information in a different way, or in a different
section of the manual, it will become much easier to do so.
This commit is contained in:
John Ericson 2023-04-04 22:57:11 -04:00
parent 3f98353f19
commit 53d0836347
8 changed files with 55 additions and 37 deletions

View file

@ -371,8 +371,21 @@ extern GlobalConfig globalConfig;
struct ExperimentalFeatureSettings : Config {
Setting<std::set<ExperimentalFeature>> experimentalFeatures{this, {}, "experimental-features",
getExperimentalFeaturesList()};
Setting<std::set<ExperimentalFeature>> experimentalFeatures{
this, {}, "experimental-features",
R"(
Experimental features that are enabled.
Example:
```
experimental-features = nix-command flakes
```
Experimental features available:
{{#include experimental-features.md}}
)"};
/**
* Check whether the given experimental feature is enabled.

View file

@ -140,32 +140,12 @@ std::string_view showExperimentalFeature(const ExperimentalFeature tag)
return xpFeatureDetails[(size_t)tag].name;
}
std::string getExperimentalFeaturesList() {
std::string experimentalFeaturesList = R"(
Experimental features that can be enabled.
Example:
```
experimental-features = nix-command flakes
Experimental features available:
)";
for (auto & xpFeature : xpFeatureDetails) {
experimentalFeaturesList += std::string {}
/* length of this first string must be 12, matching the indent of
the descriptions in the xpFeatureDetails literal. FIXME compute
markdown in a less hacky way. */
+ " - "
+ "`" + xpFeature.name + "`"
+ "\n"
+ xpFeature.description
+ "\n\n";
}
return experimentalFeaturesList;
nlohmann::json documentExperimentalFeatures() {
StringMap res;
for (auto & xpFeature : xpFeatureDetails)
res[std::string { xpFeature.name }] =
trim(stripIndentation(xpFeature.description));
return (nlohmann::json) res;
}
std::set<ExperimentalFeature> parseFeatures(const std::set<std::string> & rawFeatures)

View file

@ -51,11 +51,9 @@ std::string_view showExperimentalFeature(const ExperimentalFeature);
/**
* Compute the documentation of all experimental features.
*
* This a markdown bulleted list where each item is first (a) the
* experimental feature flag name in backticks, and then (b) the
* description of the experimental feature.
* See `doc/manual` for how this information is used.
*/
std::string getExperimentalFeaturesList();
nlohmann::json documentExperimentalFeatures();
/**
* Shorthand for `str << showExperimentalFeature(feature)`.

View file

@ -374,6 +374,11 @@ void mainWrapped(int argc, char * * argv)
return;
}
if (argc == 2 && std::string(argv[1]) == "__dump-xp-features") {
logger->cout(documentExperimentalFeatures().dump());
return;
}
Finally printCompletions([&]()
{
if (completions) {