diff options
author | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2013-10-28 14:25:58 +0100 |
---|---|---|
committer | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2013-10-28 22:45:56 +0100 |
commit | 89bd18b3affc6612ad6402c05cc4d80a59efe9b8 (patch) | |
tree | 14a313a7bd2d405668f737754756c503bf93a2b2 /lib/options.nix | |
parent | 7cf0e0bda87a1b71aac70d4eaf04aceda3dc3188 (diff) | |
download | nixpkgs-89bd18b3affc6612ad6402c05cc4d80a59efe9b8.tar nixpkgs-89bd18b3affc6612ad6402c05cc4d80a59efe9b8.tar.gz nixpkgs-89bd18b3affc6612ad6402c05cc4d80a59efe9b8.tar.bz2 nixpkgs-89bd18b3affc6612ad6402c05cc4d80a59efe9b8.tar.lz nixpkgs-89bd18b3affc6612ad6402c05cc4d80a59efe9b8.tar.xz nixpkgs-89bd18b3affc6612ad6402c05cc4d80a59efe9b8.tar.zst nixpkgs-89bd18b3affc6612ad6402c05cc4d80a59efe9b8.zip |
Fix manual generation
Diffstat (limited to 'lib/options.nix')
-rw-r--r-- | lib/options.nix | 48 |
1 files changed, 23 insertions, 25 deletions
diff --git a/lib/options.nix b/lib/options.nix index d94a9fad388..480837fd1cf 100644 --- a/lib/options.nix +++ b/lib/options.nix @@ -87,31 +87,28 @@ rec { # Generate documentation template from the list of option declaration like # the set generated with filterOptionSets. - optionAttrSetToDocList = attrs: - let options = collect isOption attrs; in - fold (opt: rest: - let - docOption = { - inherit (opt) name; - description = opt.description or (throw "Option ${opt.name}: No description."); - declarations = map (x: toString x.source) opt.declarations; - #definitions = map (x: toString x.source) opt.definitions; - internal = opt.internal or false; - visible = opt.visible or true; - } - // optionalAttrs (opt ? example) { example = scrubOptionValue opt.example; } - // optionalAttrs (opt ? default) { default = scrubOptionValue opt.default; } - // optionalAttrs (opt ? defaultText) { default = opt.defaultText; }; - - subOptions = - if opt ? options then - optionAttrSetToDocList opt.options - else - []; - in - # FIXME: expensive (O(n^2) - [ docOption ] ++ subOptions ++ rest - ) [] options; + optionAttrSetToDocList = optionAttrSetToDocList' []; + + optionAttrSetToDocList' = prefix: options: + fold (opt: rest: + let + docOption = rec { + name = showOption opt.loc; + description = opt.description or (throw "Option `${name}' has no description."); + declarations = filter (x: x != unknownModule) opt.declarations; + internal = opt.internal or false; + visible = opt.visible or true; + } + // optionalAttrs (opt ? example) { example = scrubOptionValue opt.example; } + // optionalAttrs (opt ? default) { default = scrubOptionValue opt.default; } + // optionalAttrs (opt ? defaultText) { default = opt.defaultText; }; + + subOptions = + let ss = opt.type.getSubOptions opt.loc; + in if ss != {} then optionAttrSetToDocList' opt.loc ss else []; + in + # FIXME: expensive, O(n^2) + [ docOption ] ++ subOptions ++ rest) [] (collect isOption options); /* This function recursively removes all derivation attributes from @@ -135,5 +132,6 @@ rec { /* Helper functions. */ showOption = concatStringsSep "."; + unknownModule = "<unknown-file>"; } |