at master 1.6 kB view raw
1{ lib, options, ... }: 2let 3 discardPositions = lib.mapAttrs (k: v: v); 4in 5# 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. 6assert builtins.unsafeGetAttrPos "a" { a = true; } != null; 7assert 8 builtins.unsafeGetAttrPos "a" (discardPositions { 9 a = true; 10 }) == null; 11{ 12 imports = [ 13 { 14 options.imported.line14 = lib.mkOption { 15 type = lib.types.int; 16 }; 17 18 # Simulates various patterns of generating modules such as 19 # programs.firefox.nativeMessagingHosts.ff2mpv. We don't expect to get 20 # line numbers for these, but we can fall back on knowing the file. 21 options.generated = discardPositions { 22 line22 = lib.mkOption { 23 type = lib.types.int; 24 }; 25 }; 26 27 options.submoduleLine38.extraOptLine27 = lib.mkOption { 28 default = 1; 29 type = lib.types.int; 30 }; 31 } 32 ]; 33 34 options.nested.nestedLine34 = lib.mkOption { 35 type = lib.types.int; 36 }; 37 38 options.submoduleLine38 = lib.mkOption { 39 default = { }; 40 type = lib.types.submoduleWith { 41 modules = [ 42 ( 43 { options, ... }: 44 { 45 options.submodDeclLine45 = lib.mkOption { }; 46 } 47 ) 48 { freeformType = with lib.types; lazyAttrsOf (uniq unspecified); } 49 ]; 50 }; 51 }; 52 53 config = { 54 submoduleLine38.submodDeclLine45 = 55 (options.submoduleLine38.type.getSubOptions [ ]).submodDeclLine45.declarationPositions; 56 }; 57}