rfc:trailing_comma_in_closure_use_list

PHP RFC: Allow trailing comma in closure use lists

Introduction

This RFC proposes to allow an optional trailing comma in closure use lists. This is already supported for argument and parameter lists.

Consider this example:

$longArgs_longVars = function (
    $longArgument,
    $longerArgument,
    $muchLongerArgument,  // Trailing commas were allowed in parameter lists in PHP 8.0
) use (
    $longVar1,
    $longerVar2,
    $muchLongerVar3
) {
   // body
};
$longArgs_longVars(
    $longArgumentValue,
    $obj->longMethodCall(),
    $obj->longPropertyName ?? $longDefault,
);

This closure declaration has too many parameters and closure use variables to place all of them on one line, at least under conventional coding standards. In such cases PSR-12 recommends using the formatting above instead (PSR-12 predates support for trailing commas in parameter lists).

Unfortunately, it is currently not possible to place a trailing comma in the closure use list. This breaks uniformity, and results in larger diffs when a new optional closure use variable is added. Additionally, it is inconsistent with parameter lists and call-sites, which do allow a trailing comma.

At this point, I'm used to always adding a trailing comma to multi-line lists, regardless of what kind of element they contain. We should avoid having this kind of arbitrary restriction.

Proposal

Allow a single optional trailing comma in closure use lists.

Prior Art

Allow trailing comma in parameter list added support for trailing commas in parameter lists.

Allow a trailing comma in function calls added support for trailing commas in calls.

Trailing Commas In List Syntax was a previous proposal to support optional trailing commas in all list-like structures.

Nothing has substantially changed since those RFCs in technical terms, but I think the aforementioned style for breaking up large lists has become more accepted in the meantime.

Backward Incompatible Changes

None.

Vote

Yes/No, requiring 2/3 majority.

Voting starts 2020-07-15 and ends 2020-07-29.

Allow trailing comma in closure use lists
Real name Yes No
alcaeus  
asgrim  
ashnazg  
beberlei  
brandon  
brzuchal  
bwoebi  
carusogabriel  
colinodell  
cpriest  
cschneid  
dams  
daverandom  
derick  
ekin  
galvao  
girgias  
guilhermeblanco  
ilutov  
jasny  
kalle  
kguest  
kocsismate  
lcobucci  
levim  
marandall  
marcio  
mariano  
mauricio  
mcmic  
nicolasgrekas  
nikic  
peehaa  
petk  
pmjones  
pollita  
ramsey  
rdohms  
reywob  
salathe  
sebastian  
sergey  
sirsnyder  
svpernova09  
tandre  
theodorejb  
trowski  
twosee  
wyrihaximus  
Final result: 49 0
This poll has been closed.

Changelog

0.2: Fix implementation link.

Discussion

https://externals.io/message/110715 “Permitting trailing commas in closure use() declarations”

https://externals.io/message/110804 “[RFC] Allow trailing comma in closure use list”

rfc/trailing_comma_in_closure_use_list.txt · Last modified: by 127.0.0.1