|
17 | 17 | tools = import ./tools.nix { inherit lib; }; |
18 | 18 | inherit (tools) getDocsFromSet collectFns toFile; |
19 | 19 |
|
20 | | - # Contains separate sets of metadata. |
21 | | - # which then allows running separate evaluations. Once at a time for better error tracing and memory management. |
22 | | - |
23 | | - docs = { |
24 | | - ############# Recusive analysis sets |
25 | | - lib = collectFns lib { initialPath = [ "lib" ]; }; |
26 | | - rustTools = collectFns pkgs.rustPackages { |
27 | | - initialPath = [ "pkgs" "rustPackages" ]; |
28 | | - }; |
29 | | - appimageTools = collectFns pkgs.appimageTools { initialPath = [ "pkgs" "appimageTools" ]; }; |
30 | | - elmPackages = collectFns pkgs.elmPackages { initialPath = [ "pkgs" "elmPackages" ]; }; |
31 | | - |
32 | | - agdaPackages = collectFns pkgs.agdaPackages { initialPath = [ "pkgs" "agdaPackages" ]; ignores = [ "lib" ]; }; |
33 | | - dhallPackages = collectFns pkgs.dhallPackages { initialPath = [ "pkgs" "dhallPackages" ]; ignores = [ "lib" ]; }; |
| 20 | + # Evaluate a single entry based on its mode |
| 21 | + evalEntry = _name: entry: |
| 22 | + if entry.mode == "recursive" then |
| 23 | + collectFns entry.set { |
| 24 | + initialPath = entry.path; |
| 25 | + ignores = entry.ignores or [ ]; |
| 26 | + } |
| 27 | + else if entry.mode == "shallow" then |
| 28 | + getDocsFromSet entry.set entry.path |
| 29 | + else |
| 30 | + throw "unknown mode '${entry.mode}' for entry '${_name}'"; |
34 | 31 |
|
35 | | - beamPackages = collectFns pkgs.beamPackages { initialPath = [ "pkgs" "beamPackages" ]; }; |
36 | | - testers = collectFns pkgs.testers { initialPath = [ "pkgs" "testers" ]; }; |
| 32 | + # Named datasets, each with declarative entries. |
| 33 | + # Each entry specifies: |
| 34 | + # - set: the attribute set to analyze |
| 35 | + # - path: display path in noogle |
| 36 | + # - mode: "recursive" (traverse nested sets) or "shallow" (top-level functions only) |
| 37 | + # - ignores: (optional, recursive only) attribute names to skip |
37 | 38 |
|
38 | | - dotnetCorePackages = collectFns pkgs.dotnetCorePackages { initialPath = [ "pkgs" "dotnetCorePackages" ]; }; |
39 | | - emacsPackages = collectFns pkgs.emacsPackages { initialPath = [ "pkgs" "emacsPackages" ]; }; |
40 | | - gradle-packages = collectFns pkgs.gradle-packages { initialPath = [ "pkgs" "gradle-packages" ]; }; |
| 39 | + datasets = { |
| 40 | + nix = { |
| 41 | + entries = { |
| 42 | + ############# Recursive analysis |
| 43 | + lib = { set = lib; path = [ "lib" ]; mode = "recursive"; }; |
| 44 | + rustPackages = { set = pkgs.rustPackages; path = [ "pkgs" "rustPackages" ]; mode = "recursive"; }; |
| 45 | + appimageTools = { set = pkgs.appimageTools; path = [ "pkgs" "appimageTools" ]; mode = "recursive"; }; |
| 46 | + elmPackages = { set = pkgs.elmPackages; path = [ "pkgs" "elmPackages" ]; mode = "recursive"; }; |
| 47 | + agdaPackages = { set = pkgs.agdaPackages; path = [ "pkgs" "agdaPackages" ]; mode = "recursive"; ignores = [ "lib" ]; }; |
| 48 | + dhallPackages = { set = pkgs.dhallPackages; path = [ "pkgs" "dhallPackages" ]; mode = "recursive"; ignores = [ "lib" ]; }; |
| 49 | + beamPackages = { set = pkgs.beamPackages; path = [ "pkgs" "beamPackages" ]; mode = "recursive"; }; |
| 50 | + testers = { set = pkgs.testers; path = [ "pkgs" "testers" ]; mode = "recursive"; }; |
| 51 | + dotnetCorePackages = { set = pkgs.dotnetCorePackages; path = [ "pkgs" "dotnetCorePackages" ]; mode = "recursive"; }; |
| 52 | + emacsPackages = { set = pkgs.emacsPackages; path = [ "pkgs" "emacsPackages" ]; mode = "recursive"; }; |
| 53 | + gradle-packages = { set = pkgs.gradle-packages; path = [ "pkgs" "gradle-packages" ]; mode = "recursive"; }; |
| 54 | + ociTools = { set = pkgs.ociTools; path = [ "pkgs" "ociTools" ]; mode = "recursive"; }; |
| 55 | + releaseTools = { set = pkgs.releaseTools; path = [ "pkgs" "releaseTools" ]; mode = "recursive"; }; |
| 56 | + vmTools = { set = pkgs.vmTools; path = [ "pkgs" "vmTools" ]; mode = "recursive"; }; |
41 | 57 |
|
42 | | - ociTools = collectFns pkgs.ociTools { initialPath = [ "pkgs" "ociTools" ]; }; |
43 | | - releaseTools = collectFns pkgs.releaseTools { initialPath = [ "pkgs" "releaseTools" ]; }; |
44 | | - vmTools = collectFns pkgs.vmTools { initialPath = [ "pkgs" "vmTools" ]; }; |
| 58 | + ############# Shallow analysis |
| 59 | + # pkgs cannot be analyzed recursively; nested items must be configured specifically |
| 60 | + stdenv = { set = pkgs.stdenv; path = [ "pkgs" "stdenv" ]; mode = "shallow"; }; |
| 61 | + pkgs = { set = pkgs; path = [ "pkgs" ]; mode = "shallow"; }; |
| 62 | + dockerTools = { set = pkgs.dockerTools; path = [ "pkgs" "dockerTools" ]; mode = "shallow"; }; |
| 63 | + writers = { set = pkgs.writers; path = [ "pkgs" "writers" ]; mode = "shallow"; }; |
| 64 | + haskellLib = { set = pkgs.haskell.lib; path = [ "pkgs" "haskell" "lib" ]; mode = "shallow"; }; |
| 65 | + python3Packages = { set = pkgs.python3Packages; path = [ "pkgs" "python3Packages" ]; mode = "shallow"; }; |
| 66 | + builtins = { set = builtins; path = [ "builtins" ]; mode = "shallow"; }; |
| 67 | + make-disk-image = { set = { inherit make-disk-image; }; path = [ ]; mode = "shallow"; }; |
| 68 | + }; |
| 69 | + }; |
| 70 | + }; |
45 | 71 |
|
| 72 | + # Evaluate all entries in a dataset |
| 73 | + evalDataset = dataset: |
| 74 | + let |
| 75 | + docs = lib.mapAttrs evalEntry dataset.entries; |
| 76 | + in |
| 77 | + builtins.foldl' (acc: name: acc ++ docs.${name}) [ ] (builtins.attrNames docs); |
46 | 78 |
|
47 | | - ############# Non-recursive analysis sets (pkgs.<nested>) |
48 | | - # pkgs cannot be analysed recursively |
49 | | - # nested documentation items must be configured specifically |
50 | | - stdenvTools = getDocsFromSet pkgs.stdenv [ "pkgs" "stdenv" ]; |
51 | | - pkgs = getDocsFromSet pkgs [ "pkgs" ]; |
52 | | - dockerTools = getDocsFromSet pkgs.dockerTools [ "pkgs" "dockerTools" ]; |
53 | | - writers = getDocsFromSet pkgs.writers [ "pkgs" "writers" ]; |
54 | | - haskellLib = getDocsFromSet pkgs.haskell.lib [ "pkgs" "haskell" "lib" ]; |
55 | | - pythonTools = |
56 | | - getDocsFromSet pkgs.python3Packages [ "pkgs" "python3Packages" ]; |
57 | | - builtins = |
58 | | - getDocsFromSet builtins [ "builtins" ]; |
59 | | - mkDiskImage = [ |
60 | | - { |
61 | | - path = [ "make-disk-image" ]; |
62 | | - docs = tools.getDocs { inherit make-disk-image; } "make-disk-image"; |
63 | | - } |
64 | | - ]; |
65 | | - }; |
| 79 | + # Evaluate each dataset separately |
| 80 | + docs = lib.mapAttrs (_: evalDataset) datasets; |
66 | 81 |
|
67 | | - all = builtins.foldl' (acc: name: acc ++ docs.${name}) [ ] (builtins.attrNames docs); |
| 82 | + # For backwards compat: flatten the "nix" dataset |
| 83 | + all = docs.nix; |
68 | 84 |
|
69 | 85 | # generate test_data for pesto |
70 | 86 | test_data = { |
71 | 87 | attrsets = getDocsFromSet lib.attrsets [ "lib" "attrsets" ]; |
72 | 88 | }; |
73 | 89 | in |
74 | | -{ inherit tools pkgs docs toFile getDocsFromSet collectFns all test_data; } |
| 90 | +{ inherit tools pkgs datasets docs evalDataset evalEntry toFile getDocsFromSet collectFns all test_data; } |
0 commit comments