You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This is a ferociously confusing parse, as precedent from Nix and Haskell would have you expect that no operator binds tighter than function calls, and the spaced keyword especially makes it strongly look like (f x.a) or b.
Note that this also applies to e.g. [ x.a or b ] and even x.a or f b. I think the rule should be something like “any non‐parenthesized x.a or b expression that is a direct child of a function call or list should have parentheses added”.
See NixOS/nixpkgs#339006 (review) for a real‐world example where this came up and could avoid future readability nit‐picking.
Small example input
{ a ? x.a or f b }: {
glurk = x.a or 1 + 2;
zorpy = f x.a or b;
yammo = [ x.a or b x.y or c (x.a or f x.y or b) ];
}
Expected output
{
a ? x.a or f b,
}:
{
glurk = x.a or 1 + 2;
zorpy = f (x.a or b);
yammo = [
(x.a or b)
(x.y or c)
((x.a or f) (x.y or b))
];
}
Actual output
{
a ? x.a or f b,
}:
{
glurk = x.a or 1 + 2;
zorpy = f x.a or b;
yammo = [
x.a or b
x.y or c
(x.a or f x.y or b)
];
}
The text was updated successfully, but these errors were encountered:
Note that I think x.a or [ ] ++ b is also confusing, but just the regular kind of confusing that operator precedence tends to be, so I wouldn’t include that here. (Though again the or keyword adds to the confusion vs. a symbolic operator.)
Description
This is a ferociously confusing parse, as precedent from Nix and Haskell would have you expect that no operator binds tighter than function calls, and the spaced keyword especially makes it strongly look like
(f x.a) or b
.Note that this also applies to e.g.
[ x.a or b ]
and evenx.a or f b
. I think the rule should be something like “any non‐parenthesizedx.a or b
expression that is a direct child of a function call or list should have parentheses added”.See NixOS/nixpkgs#339006 (review) for a real‐world example where this came up and could avoid future readability nit‐picking.
Small example input
Expected output
Actual output
The text was updated successfully, but these errors were encountered: