forked from lix-project/lix
Allow "bare" dynamic attrs
Now, in addition to a."${b}".c, you can write a.${b}.c (applicable wherever dynamic attributes are valid). Signed-off-by: Shea Levy <shea@shealevy.com>
This commit is contained in:
parent
e640d67144
commit
f9913f4422
|
@ -117,6 +117,8 @@ or { return OR_KW; }
|
||||||
return INT;
|
return INT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
\$\{ { return DOLLAR_CURLY; }
|
||||||
|
|
||||||
\" { BEGIN(STRING); return '"'; }
|
\" { BEGIN(STRING); return '"'; }
|
||||||
<STRING>([^\$\"\\]|\$[^\{\"]|\\.)+ {
|
<STRING>([^\$\"\\]|\$[^\{\"]|\\.)+ {
|
||||||
/* !!! Not quite right: we want a follow restriction on
|
/* !!! Not quite right: we want a follow restriction on
|
||||||
|
|
|
@ -509,6 +509,7 @@ attr
|
||||||
|
|
||||||
string_attr
|
string_attr
|
||||||
: '"' string_parts '"' { $$ = $2; }
|
: '"' string_parts '"' { $$ = $2; }
|
||||||
|
| DOLLAR_CURLY expr '}' { $$ = $2; }
|
||||||
;
|
;
|
||||||
|
|
||||||
expr_list
|
expr_list
|
||||||
|
|
1
tests/lang/eval-okay-dynamic-attrs-bare.exp
Normal file
1
tests/lang/eval-okay-dynamic-attrs-bare.exp
Normal file
|
@ -0,0 +1 @@
|
||||||
|
{ binds = true; hasAttrs = true; multiAttrs = true; recBinds = true; selectAttrs = true; selectOrAttrs = true; }
|
17
tests/lang/eval-okay-dynamic-attrs-bare.nix
Normal file
17
tests/lang/eval-okay-dynamic-attrs-bare.nix
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
let
|
||||||
|
aString = "a";
|
||||||
|
|
||||||
|
bString = "b";
|
||||||
|
in {
|
||||||
|
hasAttrs = { a.b = null; } ? ${aString}.b;
|
||||||
|
|
||||||
|
selectAttrs = { a.b = true; }.a.${bString};
|
||||||
|
|
||||||
|
selectOrAttrs = { }.${aString} or true;
|
||||||
|
|
||||||
|
binds = { ${aString}."${bString}c" = true; }.a.bc;
|
||||||
|
|
||||||
|
recBinds = rec { ${bString} = a; a = true; }.b;
|
||||||
|
|
||||||
|
multiAttrs = { ${aString} = true; ${bString} = false; }.a;
|
||||||
|
}
|
Loading…
Reference in a new issue