Description
Currently, if I wish to define a large list of locals (eg. "importing libraries" at the top of a file), I have two reasonable ways to format it:
local foo = import "foo.libsonnet";
local bar = import "bar.libsonnet";
local baz = import "baz.libsonnet";
local
foo = import "foo.libsonnet",
bar = import "bar.libsonnet",
baz = import "baz.libsonnet";
The first is annoying due to the repetition, it would be nice to be able to define many locals without saying "local" every time and the syntax local x = 1, y = 2;
solves this problem nicely for single-line statements.
The second is annoying when spaced over many lines. You either need to remember to end the last line with a ;
instead of a ,
as above, or you can do a quasi-"closing brace"-style thing like so:
local
foo = import "foo.libsonnet",
bar = import "bar.libsonnet",
baz = import "baz.libsonnet"
;
However, now you need to remember not to include a trailing comma on the final line.
I see two fixes to this problem that I hope should be relatively easy:
-
Allow a redundant
,
before the;
, ie. so that an expression likelocal x = 1, y = 2,;
is valid. This allows a "trailing comma" in the quasi-closing-brace-style shown above, which will go a long way to making this not a pain when changing or re-ordering the list. This is the smallest change. -
Allow a multiple-definition syntax like
local (x = 1, y = 2);
, with optional trailing commas. This would make my example:
local (
foo = import "foo.libsonnet",
bar = import "bar.libsonnet",
baz = import "baz.libsonnet",
);
This is the best option in my opinion as the parentheses indicate immediately to the user that the definitions form a "block" of things which the local keyword applies to, and it has a very visible end while allowing re-ordering or modification of the list of definitions without needing to worry about treating any one specially.
It is also reminiscent of the python syntax:
from foo import (
bar,
baz,
)