Skip to content

Commit 0d06b2e

Browse files
committed
feat: support php-parser 3.4.0 (pipe operator and readonly anonymous classes)
1 parent 1ee93f4 commit 0d06b2e

File tree

4 files changed

+39
-2
lines changed

4 files changed

+39
-2
lines changed

src/printer.mjs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1219,7 +1219,7 @@ function printClass(path, options, print) {
12191219
declaration.push("abstract ");
12201220
}
12211221

1222-
if (node.isReadonly) {
1222+
if (node.isReadonly && !isAnonymousClass) {
12231223
declaration.push("readonly ");
12241224
}
12251225

@@ -2094,7 +2094,7 @@ function printNode(path, options, print) {
20942094
() => printAttrs(path, options, print, { inline: true }),
20952095
"what"
20962096
),
2097-
"class",
2097+
node.what.isReadonly ? "readonly class" : "class",
20982098
node.arguments.length > 0
20992099
? [" ", printArgumentsList(path, options, print)]
21002100
: "",

src/util.mjs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ const PRECEDENCE = new Map(
4141
"<<=",
4242
">>=",
4343
],
44+
["|>"],
4445
["??"],
4546
["||"],
4647
["&&"],

tests/bin/bin.php

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -331,3 +331,19 @@ function () {
331331
$this->request->data['comments']['user_id'] = $this->request->data['comments']['user_id'] ?? 'value';
332332
// Instead of repeating variables with long names, the equal coalesce operator is used
333333
$this->request->data['comments']['user_id'] ??= 'value';
334+
335+
$result = "Hello, World!" |> strtoupper(...);
336+
$result = "Hello, World!" |> strtoupper(...) |> trim(...);
337+
$result = "Hello, World!" |> strtoupper(...) |> trim(...) |> htmlspecialchars(...);
338+
339+
return $value |> transform(...);
340+
echo $value |> format(...);
341+
342+
if ($x |> validate(...)) {}
343+
344+
$result = $value |> fn1(...) ?? $fallback;
345+
$result = $value ?? $fallback |> fn1(...);
346+
347+
foo($value |> transform(...), $other);
348+
349+
$veryLongVariableName |> someVeryLongFunctionName(...) |> anotherVeryLongFunctionName(...);

tests/class/anonymous.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,3 +265,23 @@ function () {
265265
return 1;
266266
}
267267
) extends VeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongMyClass implements VeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongMyClass {};
268+
269+
new readonly class() {};
270+
new readonly class {};
271+
new readonly class($one, $two, $three) {};
272+
273+
$class = new readonly class {};
274+
$class = new readonly class() {};
275+
$class = new readonly class { public int $x = 0; };
276+
$class = new readonly class implements MyInterface {};
277+
$class = new readonly class implements MyInterface, MyOtherInterface {};
278+
$class = new readonly class extends MyParent {};
279+
$class = new readonly class extends MyParent implements MyInterface {};
280+
$class = new readonly class extends MyParent implements MyInterface, MyOtherInterface {};
281+
282+
$class = new readonly class implements VeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongMyOtherClass {};
283+
$class = new readonly class extends VeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongMyClass {};
284+
$class = new readonly class extends VeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryVeryLongMyClass implements MyI, MyII, MyIII {};
285+
286+
$class = new readonly class($one, $two) implements MyInterface {};
287+
$class = new readonly class($one, $two) extends MyParent implements MyInterface {};

0 commit comments

Comments
 (0)