fake.modules transposition for aspect-oriented Dendritic Nix. with cross-aspect dependencies. Discussions: https://oeiuwq.zulipchat.com/join/nqp26cd4kngon6mo3ncgnuap/
dendrix.oeiuwq.com/Dendritic.html
dendritic
nix
aspect
oriented
1{
2 mkFlake,
3 evalMod,
4 lib,
5 ...
6}:
7{
8
9 flake.tests."test override default provider" =
10 let
11 flake = mkFlake {
12 flake.aspects =
13 { aspects, ... }:
14 {
15 aspectOne =
16 { aspect, ... }:
17 {
18 includes = [ (aspects.aspectTwo { message = "hello ${aspect.name}"; }) ];
19 classOne = { }; # required for propagation
20 };
21
22 aspectTwo.__functor =
23 _:
24 { message }: # args must be always named
25 { class, aspect-chain }:
26 { aspect, ... }:
27 {
28 classOne.bar = [
29 "foo"
30 aspect.name
31 message
32 class
33 ]
34 ++ (lib.map (x: x.name) aspect-chain);
35 };
36 aspectTwo.classOne.bar = [ "itself not included" ];
37 };
38 };
39
40 expr = (evalMod "classOne" flake.modules.classOne.aspectOne).bar;
41 expected = [
42 "foo"
43 "<function body>"
44 "hello aspectOne"
45 "classOne"
46 "aspectOne"
47 ];
48 in
49 {
50 inherit expr expected;
51 };
52
53}