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