Skip to content

Commit ea12cdb

Browse files
committed
fix: preserve multiline
1 parent 3f2d283 commit ea12cdb

File tree

5 files changed

+42
-8
lines changed

5 files changed

+42
-8
lines changed

grammar/php.y

+8-2
Original file line numberDiff line numberDiff line change
@@ -1226,13 +1226,19 @@ class_constant:
12261226

12271227
array_short_syntax:
12281228
'[' array_pair_list ']'
1229-
{ $attrs = attributes(); $attrs['kind'] = Expr\Array_::KIND_SHORT;
1229+
{ $attrs = attributes();
1230+
$attrs['kind'] = $this->isMultiline($attrs)
1231+
? Expr\Array_::KIND_SHORT | Expr\Array_::KIND_MULTILINE
1232+
: Expr\Array_::KIND_SHORT;
12301233
$$ = new Expr\Array_($2, $attrs); }
12311234
;
12321235

12331236
dereferenceable_scalar:
12341237
T_ARRAY '(' array_pair_list ')'
1235-
{ $attrs = attributes(); $attrs['kind'] = Expr\Array_::KIND_LONG;
1238+
{ $attrs = attributes();
1239+
$attrs['kind'] = $this->isMultiline($attrs)
1240+
? Expr\Array_::KIND_LONG | Expr\Array_::KIND_MULTILINE
1241+
: Expr\Array_::KIND_LONG;
12361242
$$ = new Expr\Array_($3, $attrs);
12371243
$this->createdArrays->attach($$); }
12381244
| array_short_syntax { $$ = $1; $this->createdArrays->attach($$); }

lib/PhpParser/Parser/Php7.php

+8-2
Original file line numberDiff line numberDiff line change
@@ -2564,11 +2564,17 @@ protected function initReduceCallbacks(): void {
25642564
$self->semValue = new Expr\ClassConstFetch($self->semStack[$stackPos-(3-1)], new Expr\Error($self->getAttributes($self->tokenStartStack[$stackPos-(3-3)], $self->tokenEndStack[$stackPos-(3-3)])), $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); $self->errorState = 2;
25652565
},
25662566
547 => static function ($self, $stackPos) {
2567-
$attrs = $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]); $attrs['kind'] = Expr\Array_::KIND_SHORT;
2567+
$attrs = $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]);
2568+
$attrs['kind'] = $self->isMultiline($attrs)
2569+
? Expr\Array_::KIND_SHORT | Expr\Array_::KIND_MULTILINE
2570+
: Expr\Array_::KIND_SHORT;
25682571
$self->semValue = new Expr\Array_($self->semStack[$stackPos-(3-2)], $attrs);
25692572
},
25702573
548 => static function ($self, $stackPos) {
2571-
$attrs = $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]); $attrs['kind'] = Expr\Array_::KIND_LONG;
2574+
$attrs = $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]);
2575+
$attrs['kind'] = $self->isMultiline($attrs)
2576+
? Expr\Array_::KIND_LONG | Expr\Array_::KIND_MULTILINE
2577+
: Expr\Array_::KIND_LONG;
25722578
$self->semValue = new Expr\Array_($self->semStack[$stackPos-(4-3)], $attrs);
25732579
$self->createdArrays->attach($self->semValue);
25742580
},

lib/PhpParser/Parser/Php8.php

+8-2
Original file line numberDiff line numberDiff line change
@@ -2568,11 +2568,17 @@ protected function initReduceCallbacks(): void {
25682568
$self->semValue = new Expr\ClassConstFetch($self->semStack[$stackPos-(3-1)], new Expr\Error($self->getAttributes($self->tokenStartStack[$stackPos-(3-3)], $self->tokenEndStack[$stackPos-(3-3)])), $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); $self->errorState = 2;
25692569
},
25702570
549 => static function ($self, $stackPos) {
2571-
$attrs = $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]); $attrs['kind'] = Expr\Array_::KIND_SHORT;
2571+
$attrs = $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]);
2572+
$attrs['kind'] = $self->isMultiline($attrs)
2573+
? Expr\Array_::KIND_SHORT | Expr\Array_::KIND_MULTILINE
2574+
: Expr\Array_::KIND_SHORT;
25722575
$self->semValue = new Expr\Array_($self->semStack[$stackPos-(3-2)], $attrs);
25732576
},
25742577
550 => static function ($self, $stackPos) {
2575-
$attrs = $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]); $attrs['kind'] = Expr\Array_::KIND_LONG;
2578+
$attrs = $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]);
2579+
$attrs['kind'] = $self->isMultiline($attrs)
2580+
? Expr\Array_::KIND_LONG | Expr\Array_::KIND_MULTILINE
2581+
: Expr\Array_::KIND_LONG;
25762582
$self->semValue = new Expr\Array_($self->semStack[$stackPos-(4-3)], $attrs);
25772583
$self->createdArrays->attach($self->semValue);
25782584
},

lib/PhpParser/ParserAbstract.php

+8
Original file line numberDiff line numberDiff line change
@@ -1229,6 +1229,14 @@ private function isSimpleExit(array $args): bool {
12291229
return false;
12301230
}
12311231

1232+
protected function isMultiline(array $attributes): bool {
1233+
if (!isset($attributes['startLine']) || !isset($attributes['endLine'])) {
1234+
return false;
1235+
}
1236+
1237+
return $attributes['startLine'] !== $attributes['endLine'];
1238+
}
1239+
12321240
/**
12331241
* @param array<Node\Arg|Node\VariadicPlaceholder> $args
12341242
* @param array<string, mixed> $attrs

test/code/prettyPrinter/stmt/arrays.test

+10-2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,14 @@ $longMultiline = array(
1717
);
1818
-----
1919
$short = [1, 2, 3];
20-
$shortMultiline = [1, 2, 3];
20+
$shortMultiline = [
21+
1,
22+
2,
23+
3,
24+
];
2125
$long = array(1, 2, 3);
22-
$longMultiline = array(1, 2, 3);
26+
$longMultiline = array(
27+
1,
28+
2,
29+
3,
30+
);

0 commit comments

Comments
 (0)