Skip to content

Commit ba44bc5

Browse files
committed
datasets: create named default dataset
Prepare for allowing to register external datasets
1 parent edc713c commit ba44bc5

3 files changed

Lines changed: 64 additions & 46 deletions

File tree

pasta/default.nix

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
{ pkgs, nixpkgs, noogle-plugin, ... }:
1+
{ pkgs, nixpkgs, noogle-plugin, dataset ? "nix", ... }:
22
let nix = noogle-plugin.passthru.nix; in
33
pkgs.stdenv.mkDerivation {
4-
name = "pasta";
4+
name = "pasta-${dataset}";
55
src = ./src;
66
nativeBuildInputs = [ nix ];
77
buildPhase = ''
88
nix-instantiate --extra-experimental-features 'nix-command flakes' --plugin-files ${noogle-plugin}/lib/libnoogle-plugin.so --eval --strict --json --store $PWD --show-trace \
9-
eval.nix --arg 'pkgs' 'import ${nixpkgs} {}' --arg 'repo' '${nixpkgs.outPath}' -A all \
9+
eval.nix --arg 'pkgs' 'import ${nixpkgs} {}' --arg 'repo' '${nixpkgs.outPath}' -A docs.${dataset} \
1010
> $out
1111
'';
1212
}

pasta/flake-module.nix

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,11 @@
1717
cat ${metaFile} > $out
1818
'';
1919
};
20+
# Default "nix" dataset (nixpkgs-master)
2021
pasta = pkgs.callPackage ./default.nix {
2122
inherit nixpkgs pkgs;
2223
inherit (self'.packages) noogle-plugin;
24+
dataset = "nix";
2325
};
2426
};
2527
devShells.pastaMaker = pkgs.callPackage ./shell.nix { inherit pkgs; inherit (self'.packages) noogle-plugin; };

pasta/src/eval.nix

Lines changed: 59 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -17,58 +17,74 @@ let
1717
tools = import ./tools.nix { inherit lib; };
1818
inherit (tools) getDocsFromSet collectFns toFile;
1919

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}'";
3431

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
3738

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"; };
4157

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+
};
4571

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);
4678

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;
6681

67-
all = builtins.foldl' (acc: name: acc ++ docs.${name}) [ ] (builtins.attrNames docs);
82+
# For backwards compat: flatten the "nix" dataset
83+
all = docs.nix;
6884

6985
# generate test_data for pesto
7086
test_data = {
7187
attrsets = getDocsFromSet lib.attrsets [ "lib" "attrsets" ];
7288
};
7389
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

Comments
 (0)