blob: 2ca7102593306f038671c1701849da647f23ab73 [file] [log] [blame]
40 columns |
### Test how argument lists split eagerly when they contain other calls.
>>> Don't split if outer call has only positional arguments.
a(b(c(d), e(f)), g(h), i(j));
<<<
a(b(c(d), e(f)), g(h), i(j));
>>> Don't split even if outer call has many named arguments.
outer(a: a(1), b: b(2), c: c(3), d: d);
<<<
outer(a: a(1), b: b(2), c: c(3), d: d);
>>> Don't split if outer and inner each have only one named argument.
outer(1, n: value, inner(n: value, 2));
<<<
outer(1, n: value, inner(n: value, 2));
>>> Don't split if inner has many named arguments when outer has none.
f(1, g(a: a, b: b, c: c, d: d));
<<<
f(1, g(a: a, b: b, c: c, d: d));
>>> Split outer call if there are more than two outer and inner named arguments.
outer(a: a, b: inner(c: c));
<<< 3.7
outer(a: a, b: inner(c: c));
<<< 3.8
outer(
a: a,
b: inner(c: c),
);
>>> Split outer call if there are more than two outer and inner named arguments.
outer(a: a, inner(b: b, c: c));
<<< 3.7
outer(a: a, inner(b: b, c: c));
<<< 3.8
outer(
a: a,
inner(b: b, c: c),
);
>>> Split outer call if there are more than two outer and inner named arguments.
outer(a: inner(b: b, c: c));
<<< 3.7
outer(a: inner(b: b, c: c));
<<< 3.8
outer(
a: inner(b: b, c: c),
);
>>> Count deeper nested calls.
outer(a: inner(b: b, nest(c: c)));
<<< 3.7
outer(a: inner(b: b, nest(c: c)));
<<< 3.8
outer(
a: inner(b: b, nest(c: c)),
);
>>> Split outer call on indirect inner call.
outer(name: !(inner(x: x, y: y)));
<<< 3.7
outer(name: !(inner(x: x, y: y)));
<<< 3.8
outer(
name: !(inner(x: x, y: y)),
);
>>> Split outer `new` expression.
new Outer(name: inner(x: x, y: y));
<<< 3.7
new Outer(name: inner(x: x, y: y));
<<< 3.8
new Outer(
name: inner(x: x, y: y),
);
>>> Split outer `const` expression.
const Outer(name: inner(x: x, y: y));
<<< 3.7
const Outer(name: inner(x: x, y: y));
<<< 3.8
const Outer(
name: inner(x: x, y: y),
);
>>> Split on inner `new` expression.
outer(name: new Inner(x: x, y: y));
<<< 3.7
outer(name: new Inner(x: x, y: y));
<<< 3.8
outer(
name: new Inner(x: x, y: y),
);
>>> Split on inner `const` expression.
outer(name: const Inner(x: x, y: y));
<<< 3.7
outer(name: const Inner(x: x, y: y));
<<< 3.8
outer(
name: const Inner(x: x, y: y),
);
>>> Don't count named argument if it's a trivial expression.
{
outer(name: inner(x: x, y: 123));
outer(name: inner(x: x, y: -123));
outer(name: inner(x: x, y: 12.3));
outer(name: inner(x: x, y: -12.3));
outer(name: inner(x: x, y: null));
outer(name: inner(x: x, y: true));
outer(name: inner(x: x, y: false));
}
<<<
{
outer(name: inner(x: x, y: 123));
outer(name: inner(x: x, y: -123));
outer(name: inner(x: x, y: 12.3));
outer(name: inner(x: x, y: -12.3));
outer(name: inner(x: x, y: null));
outer(name: inner(x: x, y: true));
outer(name: inner(x: x, y: false));
}
>>> Split on non-trivial expressions.
### Edge cases of simple expressions that aren't considered trivial.
{
outer(name: inner(x: x, y: 'string'));
outer(name: inner(x: x, y: (123)));
outer(name: inner(x: x, y: this));
outer(name: inner(x: x, y: -(1)));
outer(name: inner(x: x, y: 1+2));
}
<<< 3.7
{
outer(name: inner(x: x, y: 'string'));
outer(name: inner(x: x, y: (123)));
outer(name: inner(x: x, y: this));
outer(name: inner(x: x, y: -(1)));
outer(name: inner(x: x, y: 1 + 2));
}
<<< 3.8
{
outer(
name: inner(x: x, y: 'string'),
);
outer(
name: inner(x: x, y: (123)),
);
outer(
name: inner(x: x, y: this),
);
outer(
name: inner(x: x, y: -(1)),
);
outer(
name: inner(x: x, y: 1 + 2),
);
}
>>> Split named list argument with multiple elements and any named arguments.
{
// Only one element.
f(name: [inner(x: x, y: y)]);
// No named arguments.
f(name: [a, inner(x, y)]);
// Multiple elements and a named argument.
f(name: [a, inner(x: x)]);
}
<<< 3.7
{
// Only one element.
f(name: [inner(x: x, y: y)]);
// No named arguments.
f(name: [a, inner(x, y)]);
// Multiple elements and a named argument.
f(name: [a, inner(x: x)]);
}
<<< 3.8
{
// Only one element.
f(
name: [inner(x: x, y: y)],
);
// No named arguments.
f(name: [a, inner(x, y)]);
// Multiple elements and a named argument.
f(
name: [
a,
inner(x: x),
],
);
}
>>> Split named map argument with multiple elements and any named arguments.
{
// Only one element.
f(name: {a: inner(x: x, y: y)});
// No named arguments.
f(name: {a: a, b: inner(x, y)});
// Multiple elements and a named argument.
f(name: {a: a, b: inner(x: x)});
}
<<< 3.7
{
// Only one element.
f(name: {a: inner(x: x, y: y)});
// No named arguments.
f(name: {a: a, b: inner(x, y)});
// Multiple elements and a named argument.
f(name: {a: a, b: inner(x: x)});
}
<<< 3.8
{
// Only one element.
f(
name: {a: inner(x: x, y: y)},
);
// No named arguments.
f(name: {a: a, b: inner(x, y)});
// Multiple elements and a named argument.
f(
name: {
a: a,
b: inner(x: x),
},
);
}
>>> Split named set argument with multiple elements and any named arguments.
{
// Only one element.
f(name: {inner(x: x, y: y)});
// No named arguments.
f(name: {a, inner(x, y)});
// Multiple elements and a named argument.
f(name: {a, inner(x: x)});
}
<<< 3.7
{
// Only one element.
f(name: {inner(x: x, y: y)});
// No named arguments.
f(name: {a, inner(x, y)});
// Multiple elements and a named argument.
f(name: {a, inner(x: x)});
}
<<< 3.8
{
// Only one element.
f(
name: {inner(x: x, y: y)},
);
// No named arguments.
f(name: {a, inner(x, y)});
// Multiple elements and a named argument.
f(
name: {
a,
inner(x: x),
},
);
}
>>> Don't eagerly split named record arg regardless of contents.
f(name: (a, inner(x: x, y: y), b: b));
<<< 3.7
### The outer call splits, but not the record.
f(name: (a, inner(x: x, y: y), b: b));
<<< 3.8
### The outer call splits, but not the record.
f(
name: (a, inner(x: x, y: y), b: b),
);
>>> Split when inner call isn't itself named argument.
outer(x: x, inner(y: y), z: z);
<<< 3.7
outer(x: x, inner(y: y), z: z);
<<< 3.8
outer(
x: x,
inner(y: y),
z: z,
);
>>> Don't force split if the outer call can be block formatted.
outer(() {;}, name: inner(x: x, y: y));
<<<
outer(() {
;
}, name: inner(x: x, y: y));