Skip to content

Commit 1b93645

Browse files
authored
Fix: broken method lookup on closure (#1678)
1 parent 534067f commit 1b93645

3 files changed

Lines changed: 32 additions & 1 deletion

File tree

src/needs-parens.js

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,17 @@ function needsParens(path) {
205205
return false;
206206
}
207207
case "closure":
208-
return parent.kind === "call" && name === "what" && parent.what === node;
208+
switch (parent.kind) {
209+
case "call":
210+
return name === "what" && parent.what === node;
211+
212+
// https://github.com/prettier/plugin-php/issues/1675
213+
case "propertylookup":
214+
return true;
215+
216+
default:
217+
return false;
218+
}
209219
case "silence":
210220
case "cast":
211221
// TODO: bug https://github.com/glayzzle/php-parser/issues/172

tests/parens/__snapshots__/jsfmt.spec.js.snap

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2339,6 +2339,13 @@ $var = (($var)->bar);
23392339
$var = ($var)->bar();
23402340
$var = (($var)->bar());
23412341
2342+
$var = (function () {
2343+
return $this->foo;
2344+
})->bindTo($var, A::class)();
2345+
$var = (((function () {
2346+
return $this->foo;
2347+
})))->bindTo($var, A::class)();
2348+
23422349
=====================================output=====================================
23432350
<?php
23442351
@@ -2424,6 +2431,13 @@ $var = $var->bar;
24242431
$var = $var->bar();
24252432
$var = $var->bar();
24262433
2434+
$var = (function () {
2435+
return $this->foo;
2436+
})->bindTo($var, A::class)();
2437+
$var = (function () {
2438+
return $this->foo;
2439+
})->bindTo($var, A::class)();
2440+
24272441
================================================================================
24282442
`;
24292443

tests/parens/lookups.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,3 +81,10 @@
8181
$var = (($var)->bar);
8282
$var = ($var)->bar();
8383
$var = (($var)->bar());
84+
85+
$var = (function () {
86+
return $this->foo;
87+
})->bindTo($var, A::class)();
88+
$var = (((function () {
89+
return $this->foo;
90+
})))->bindTo($var, A::class)();

0 commit comments

Comments
 (0)