50 lines
1.5 KiB
Nix
50 lines
1.5 KiB
Nix
{ lib, options, ... }:
|
|
let
|
|
discardPositions = lib.mapAttrs (k: v: v);
|
|
in
|
|
# unsafeGetAttrPos is unspecified best-effort behavior, so we only want to consider this test on an evaluator that satisfies some basic assumptions about this function.
|
|
assert builtins.unsafeGetAttrPos "a" { a = true; } != null;
|
|
assert
|
|
builtins.unsafeGetAttrPos "a" (discardPositions {
|
|
a = true;
|
|
}) == null;
|
|
{
|
|
imports = [
|
|
{
|
|
options.imported.line10 = lib.mkOption { type = lib.types.int; };
|
|
|
|
# Simulates various patterns of generating modules such as
|
|
# programs.firefox.nativeMessagingHosts.ff2mpv. We don't expect to get
|
|
# line numbers for these, but we can fall back on knowing the file.
|
|
options.generated = discardPositions { line18 = lib.mkOption { type = lib.types.int; }; };
|
|
|
|
options.submoduleLine34.extraOptLine23 = lib.mkOption {
|
|
default = 1;
|
|
type = lib.types.int;
|
|
};
|
|
}
|
|
];
|
|
|
|
options.nested.nestedLine30 = lib.mkOption { type = lib.types.int; };
|
|
|
|
options.submoduleLine34 = lib.mkOption {
|
|
default = { };
|
|
type = lib.types.submoduleWith {
|
|
modules = [
|
|
(
|
|
{ options, ... }:
|
|
{
|
|
options.submodDeclLine39 = lib.mkOption { };
|
|
}
|
|
)
|
|
{ freeformType = with lib.types; lazyAttrsOf (uniq unspecified); }
|
|
];
|
|
};
|
|
};
|
|
|
|
config = {
|
|
submoduleLine34.submodDeclLine39 =
|
|
(options.submoduleLine34.type.getSubOptions [ ]).submodDeclLine39.declarationPositions;
|
|
};
|
|
}
|