Switch type argument syntax (#1940)

This changes type argument syntax to "standard" style, and away from turbofish.

The motivation here is that turbofish-style type arguments are hard to read, and developers who are not already deeply knowledgeable about Pkl might struggle to understand such code.
In most languages, the grammar for "method call with type args" don't introduce any additional symbols between the identifier and the type argument list (e.g. C++, TypeScript, C#, Scala, Go).
This commit is contained in:
Daniel Chao authored and GitHub committed 2026-11-03 05:09:40 -08:00
1 parent 6ad50eb589
commit a9b7fe3a33
96 files changed
+1448 -376

No files matched your search

@@ -261,7 +261,7 @@ final class Builder {
* {@code foo.bar.baz(
* new { qux = 1 }
* )}
* {@code foo.bar.baz::<
* {@code foo.bar.baz<
* Quux
* >(
* new { qux = 1 }
@@ -368,7 +368,7 @@ final class Builder {
var argListIdx = -1;
for (var i = 0; i < lastNode.children.size(); i++) {
var node = lastNode.children.get(i);
if (node.type == NodeType.DCOLON) {
if (node.type == NodeType.TYPE_ARGUMENT_LIST) {
typeArgListIdx = i;
continue;
}
@@ -1,14 +1,14 @@
res1 = foo::<Bar>(baz)
res1a = foo::<Bar, Baz, ReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyLongType>(baz, baz, reallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyLongArg)
res1 = foo<Bar>(baz)
res1a = foo<Bar, Baz, ReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyLongType>(baz, baz, reallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyLongArg)
res2 = qux.foo::<Bar, Bar2,>(baz, baz2)
res2a = qux.foo::<Bar, Baz, ReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyLongType>(baz, baz, reallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyLongArg)
res2b = qux.quux::<Corge>().foo::<Bar, Bar2,>(baz, baz2)
res2c = qux.quux::<Corge>().foo::<Bar, Baz, ReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyLongType>(baz, baz, reallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyLongArg)
res2d = qux::<Corge>().foo::<Bar, Bar2,>(baz, baz2)
res2e = qux::<Corge>().foo::<Bar, Baz, ReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyLongType>(baz, baz, reallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyLongArg)
res2f = grault.qux.quux::<Corge>().foo::<Bar, Bar2,>(baz, baz2)
res2g = grault.qux.quux::<Corge>().foo::<Bar, Baz, ReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyLongType>(baz, baz, reallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyLongArg)
res2 = qux.foo<Bar, Bar2,>(baz, baz2)
res2a = qux.foo<Bar, Baz, ReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyLongType>(baz, baz, reallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyLongArg)
res2b = qux.quux<Corge>().foo<Bar, Bar2,>(baz, baz2)
res2c = qux.quux<Corge>().foo<Bar, Baz, ReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyLongType>(baz, baz, reallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyLongArg)
res2d = qux<Corge>().foo<Bar, Bar2,>(baz, baz2)
res2e = qux<Corge>().foo<Bar, Baz, ReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyLongType>(baz, baz, reallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyLongArg)
res2f = grault.qux.quux<Corge>().foo<Bar, Bar2,>(baz, baz2)
res2g = grault.qux.quux<Corge>().foo<Bar, Baz, ReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyLongType>(baz, baz, reallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyLongArg)
res3 = super.foo::<Bar, Bar2,>(baz, baz2)
res3a = super.foo::<Bar, Baz, ReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyLongType>(baz, baz, reallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyLongArg)
res3 = super.foo<Bar, Bar2,>(baz, baz2)
res3a = super.foo<Bar, Baz, ReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyLongType>(baz, baz, reallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyLongArg)
@@ -1,6 +1,6 @@
res1 = foo::<Bar>(baz)
res1 = foo<Bar>(baz)
res1a =
foo::<
foo<
Bar,
Baz,
ReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyLongType,
@@ -10,9 +10,9 @@ res1a =
reallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyLongArg,
)
res2 = qux.foo::<Bar, Bar2>(baz, baz2)
res2 = qux.foo<Bar, Bar2>(baz, baz2)
res2a =
qux.foo::<
qux.foo<
Bar,
Baz,
ReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyLongType,
@@ -21,11 +21,11 @@ res2a =
baz,
reallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyLongArg,
)
res2b = qux.quux::<Corge>().foo::<Bar, Bar2>(baz, baz2)
res2b = qux.quux<Corge>().foo<Bar, Bar2>(baz, baz2)
res2c =
qux
.quux::<Corge>()
.foo::<
.quux<Corge>()
.foo<
Bar,
Baz,
ReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyLongType,
@@ -34,10 +34,10 @@ res2c =
baz,
reallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyLongArg,
)
res2d = qux::<Corge>().foo::<Bar, Bar2>(baz, baz2)
res2d = qux<Corge>().foo<Bar, Bar2>(baz, baz2)
res2e =
qux::<Corge>()
.foo::<
qux<Corge>()
.foo<
Bar,
Baz,
ReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyLongType,
@@ -46,11 +46,11 @@ res2e =
baz,
reallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyLongArg,
)
res2f = grault.qux.quux::<Corge>().foo::<Bar, Bar2>(baz, baz2)
res2f = grault.qux.quux<Corge>().foo<Bar, Bar2>(baz, baz2)
res2g =
grault.qux
.quux::<Corge>()
.foo::<
.quux<Corge>()
.foo<
Bar,
Baz,
ReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyLongType,
@@ -60,9 +60,9 @@ res2g =
reallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyLongArg,
)
res3 = super.foo::<Bar, Bar2>(baz, baz2)
res3 = super.foo<Bar, Bar2>(baz, baz2)
res3a =
super.foo::<
super.foo<
Bar,
Baz,
ReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyReallyLongType,