dxvk_1: fix build compatibility with GCC 14 (#360918)
[NixPkgs.git] / lib / tests / modules / declaration-positions.nix
blobb1f8acaecf838e11aeff12538571b7da3df1eacc
1 { lib, options, ... }:
2 let
3   discardPositions = lib.mapAttrs (k: v: v);
4 in
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.
6 assert builtins.unsafeGetAttrPos "a" { a = true; } != null;
7 assert
8   builtins.unsafeGetAttrPos "a" (discardPositions {
9     a = true;
10   }) == null;
12   imports = [
13     {
14       options.imported.line14 = lib.mkOption {
15         type = lib.types.int;
16       };
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       };
27       options.submoduleLine38.extraOptLine27 = lib.mkOption {
28         default = 1;
29         type = lib.types.int;
30       };
31     }
32   ];
34   options.nested.nestedLine34 = lib.mkOption {
35     type = lib.types.int;
36   };
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   };
53   config = {
54     submoduleLine38.submodDeclLine45 =
55       (options.submoduleLine38.type.getSubOptions [ ]).submodDeclLine45.declarationPositions;
56   };