tangled
alpha
login
or
join now
pyrox.dev
/
nixpkgs
0
fork
atom
lol
0
fork
atom
overview
issues
pulls
pipelines
lib.types.attrTag: Fix declarationPositions after merge
Robert Hensing
2 years ago
22d7f146
cf4968a9
+18
-4
2 changed files
expand all
collapse all
unified
split
lib
tests
modules
types-attrTag.nix
types.nix
+17
-3
lib/tests/modules/types-attrTag.nix
···
1
1
-
{ lib, config, ... }:
1
1
+
{ lib, config, options, ... }:
2
2
let
3
3
inherit (lib) mkOption types;
4
4
forceDeep = x: builtins.deepSeq x x;
5
5
+
mergedSubOption = (options.merged.type.getSubOptions options.merged.loc).extensible."merged.<name>";
5
6
in
6
7
{
7
8
options = {
···
98
99
merged.positive.yay = 100;
99
100
merged.extensi-foo.extensible = "foo";
100
101
merged.extensi-bar.extensible = "bar";
101
101
-
okChecks =
102
102
+
okChecks = builtins.addErrorContext "while evaluating the assertions" (
102
103
assert config.intStrings.hello == { right = "hello world"; };
103
104
assert config.intStrings.numberOne == { left = 1; };
104
105
assert config.merged.negative == { nay = false; };
···
115
116
assert config.docs."submodules.<name>.qux".visible == true;
116
117
# Not available (yet?)
117
118
# assert config.docs."submodules.<name>.qux".declarationsWithPositions == [ ... ];
119
119
+
assert options.submodules.declarations == [ __curPos.file ];
120
120
+
assert lib.length options.submodules.declarationPositions == 1;
121
121
+
assert (lib.head options.submodules.declarationPositions).file == __curPos.file;
122
122
+
assert options.merged.declarations == [ __curPos.file __curPos.file ];
123
123
+
assert lib.length options.merged.declarationPositions == 2;
124
124
+
assert (lib.elemAt options.merged.declarationPositions 0).file == __curPos.file;
125
125
+
assert (lib.elemAt options.merged.declarationPositions 1).file == __curPos.file;
126
126
+
assert (lib.elemAt options.merged.declarationPositions 0).line != (lib.elemAt options.merged.declarationPositions 1).line;
127
127
+
assert mergedSubOption.declarations == [ __curPos.file __curPos.file ];
128
128
+
assert lib.length mergedSubOption.declarationPositions == 2;
129
129
+
assert (lib.elemAt mergedSubOption.declarationPositions 0).file == __curPos.file;
130
130
+
assert (lib.elemAt mergedSubOption.declarationPositions 1).file == __curPos.file;
131
131
+
assert (lib.elemAt mergedSubOption.declarationPositions 0).line != (lib.elemAt mergedSubOption.declarationPositions 1).line;
118
132
assert lib.length config.docs."merged.<name>.extensible".declarations == 2;
119
119
-
true;
133
133
+
true);
120
134
};
121
135
}
+1
-1
lib/types.nix
···
707
707
// {
708
708
# mergeOptionDecls is not idempotent in these attrs:
709
709
declarations = a.tags.${tagName}.declarations ++ bOpt.declarations;
710
710
-
declarationPositions = a.tags.${tagName}.declarations ++ bOpt.declarations;
710
710
+
declarationPositions = a.tags.${tagName}.declarationPositions ++ bOpt.declarationPositions;
711
711
}
712
712
)
713
713
(builtins.intersectAttrs a.tags b.tags);