lib: Automatically generate lib.filesytem docs

Changed files
+43 -18
doc
doc-support
functions
lib
+1
doc/doc-support/lib-function-docs.nix
···
docgen lists 'List manipulation functions'
docgen debug 'Debugging functions'
docgen options 'NixOS / nixpkgs option handling'
+
docgen filesystem 'Filesystem functions'
docgen sources 'Source filtering functions'
'';
}
+2
doc/functions/library.xml
···
<xi:include href="./library/generated/options.xml" />
+
<xi:include href="./library/generated/filesystem.xml" />
+
<xi:include href="./library/generated/sources.xml" />
</section>
+40 -18
lib/filesystem.nix
···
+
# Functions for copying sources to the Nix store.
{ lib }:
-
{ # haskellPathsInDir : Path -> Map String Path
-
# A map of all haskell packages defined in the given path,
-
# identified by having a cabal file with the same name as the
-
# directory itself.
-
haskellPathsInDir = root:
+
+
let
+
inherit (lib.strings)
+
hasPrefix
+
;
+
in
+
+
{
+
/*
+
A map of all haskell packages defined in the given path,
+
identified by having a cabal file with the same name as the
+
directory itself.
+
+
Type: Path -> Map String Path
+
*/
+
haskellPathsInDir =
+
# The directory within to search
+
root:
let # Files in the root
root-files = builtins.attrNames (builtins.readDir root);
# Files with their full paths
···
builtins.pathExists (value + "/${name}.cabal")
) root-files-with-paths;
in builtins.listToAttrs cabal-subdirs;
-
# locateDominatingFile : RegExp
-
# -> Path
-
# -> Nullable { path : Path;
-
# matches : [ MatchResults ];
-
# }
-
# Find the first directory containing a file matching 'pattern'
-
# upward from a given 'file'.
-
# Returns 'null' if no directories contain a file matching 'pattern'.
-
locateDominatingFile = pattern: file:
+
/*
+
Find the first directory containing a file matching 'pattern'
+
upward from a given 'file'.
+
Returns 'null' if no directories contain a file matching 'pattern'.
+
+
Type: RegExp -> Path -> Nullable { path : Path; matches : [ MatchResults ]; }
+
*/
+
locateDominatingFile =
+
# The pattern to search for
+
pattern:
+
# The file to start searching upward from
+
file:
let go = path:
let files = builtins.attrNames (builtins.readDir path);
matches = builtins.filter (match: match != null)
···
in go (if isDir then file else parent);
-
# listFilesRecursive: Path -> [ Path ]
-
#
-
# Given a directory, return a flattened list of all files within it recursively.
-
listFilesRecursive = dir: lib.flatten (lib.mapAttrsToList (name: type:
+
/*
+
Given a directory, return a flattened list of all files within it recursively.
+
+
Type: Path -> [ Path ]
+
*/
+
listFilesRecursive =
+
# The path to recursively list
+
dir:
+
lib.flatten (lib.mapAttrsToList (name: type:
if type == "directory" then
lib.filesystem.listFilesRecursive (dir + "/${name}")
else