From e90ac0152e303a6d3e6ebff5ccee5fe779674a9f Mon Sep 17 00:00:00 2001 From: Tomas Votruba Date: Wed, 7 Oct 2026 20:57:56 +0200 Subject: [PATCH] Preserve author-added empty lines between promoted constructor properties --- .../FixerTransformer/TokensNewliner.php | 20 +++++++++++++++++++ ...kip_empty_lines_between_properties.php.inc | 17 ++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 packages/coding-standard/tests/Fixer/Spacing/StandaloneLinePromotedPropertyFixer/Fixture/skip_empty_lines_between_properties.php.inc diff --git a/packages/coding-standard/src/TokenRunner/Transformer/FixerTransformer/TokensNewliner.php b/packages/coding-standard/src/TokenRunner/Transformer/FixerTransformer/TokensNewliner.php index eca2e39ecf..b89e9a747b 100644 --- a/packages/coding-standard/src/TokenRunner/Transformer/FixerTransformer/TokensNewliner.php +++ b/packages/coding-standard/src/TokenRunner/Transformer/FixerTransformer/TokensNewliner.php @@ -66,6 +66,10 @@ public function breakItems(BlockInfo $blockInfo, Tokens $tokens, int $kind): voi continue; } + if ($this->isFollowedByEmptyLine($tokens, $i)) { + continue; + } + $tokens->ensureWhitespaceAtIndex($i + 1, 0, $newlineIndentWhitespace); } } @@ -113,4 +117,20 @@ private function isFollowedByComment(Tokens $tokens, int $i): bool return $nextNextToken->isComment(); } + + /** + * Keep author-added empty line between items + * + * @param Tokens $tokens + */ + private function isFollowedByEmptyLine(Tokens $tokens, int $i): bool + { + $nextToken = $tokens[$i + 1]; + if (! $nextToken->isWhitespace()) { + return false; + } + + $lineEnding = $this->whitespacesFixerConfig->getLineEnding(); + return \substr_count($nextToken->getContent(), $lineEnding) >= 2; + } } diff --git a/packages/coding-standard/tests/Fixer/Spacing/StandaloneLinePromotedPropertyFixer/Fixture/skip_empty_lines_between_properties.php.inc b/packages/coding-standard/tests/Fixer/Spacing/StandaloneLinePromotedPropertyFixer/Fixture/skip_empty_lines_between_properties.php.inc new file mode 100644 index 0000000000..8a01f5982f --- /dev/null +++ b/packages/coding-standard/tests/Fixer/Spacing/StandaloneLinePromotedPropertyFixer/Fixture/skip_empty_lines_between_properties.php.inc @@ -0,0 +1,17 @@ +