Skip to content

fix: keep adjacent php blocks separate when there is no text between them - #2546

Open
Dextheking1 wants to merge 5 commits into
prettier:mainfrom
Dextheking1:fix/2022-adjacent-short-echo
Open

Dextheking1 wants to merge 5 commits into
prettier:mainfrom
Dextheking1:fix/2022-adjacent-short-echo

Conversation

@Dextheking1

Copy link
Copy Markdown
Contributor

Fixes #2022

<?= $var1 ?><?= $var2 ?> came out as one merged block:

<?= $var1
$var2 ?>

That does not parse. Same for any blocks with nothing between them: <?php $a = 1; ?><?= $b ?>, X<?= $a ?><?php $b = 1; ?>, and a short echo inside an alternate syntax body.

The parser already inserts the pseudo inline placeholder between blocks split by a newline. This adds the same for directly adjacent blocks, so the printer sees the boundary and keeps the tags.

Verified: new fixtures in tests/echo-adjacent round-trip unchanged. Full suite passes (602 tests), AST_COMPARE=1 passes (1186 tests), no other snapshot changes.

One trade-off, same as the existing newline case: a string containing a literal ?><?= gets the placeholder inserted before parsing. #2530 takes it back out of string output.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Multiple shorthand echoes in a row break when formatted

1 participant