From 824cf6c1f1fb5bcc3b77ac7395e47918883c149d Mon Sep 17 00:00:00 2001 From: erickskrauch Date: Tue, 7 Aug 2018 11:17:18 +0300 Subject: [PATCH] Fix LineBreakAfterStatementsFixer. Resolves #5. --- .../LineBreakAfterStatementsFixer.php | 16 +- .../LineBreakAfterStatementsFixerTest.php | 201 ++++++++++++++++++ 2 files changed, 212 insertions(+), 5 deletions(-) diff --git a/src/Fixer/Whitespace/LineBreakAfterStatementsFixer.php b/src/Fixer/Whitespace/LineBreakAfterStatementsFixer.php index c667380..a36b440 100644 --- a/src/Fixer/Whitespace/LineBreakAfterStatementsFixer.php +++ b/src/Fixer/Whitespace/LineBreakAfterStatementsFixer.php @@ -126,17 +126,23 @@ class Foo if ($nextToken->equals('(')) { $parenthesisEndIndex = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_PARENTHESIS_BRACE, $nextIndex); - $possibleStartBraceIndex = $tokens->getNextNonWhitespace($parenthesisEndIndex); + $possibleBeginBraceIndex = $tokens->getNextNonWhitespace($parenthesisEndIndex); } else { - $possibleStartBraceIndex = $nextIndex; + $possibleBeginBraceIndex = $nextIndex; } // `do {} while ();` - if ($tokens[$index]->isGivenKind(T_WHILE) && $tokens[$possibleStartBraceIndex]->equals(';')) { - return $possibleStartBraceIndex; + if ($tokens[$index]->isGivenKind(T_WHILE) && $tokens[$possibleBeginBraceIndex]->equals(';')) { + return $possibleBeginBraceIndex; + } + + $possibleBeginBrace = $tokens[$possibleBeginBraceIndex]; + if ($possibleBeginBrace->equals('{')) { + $blockEnd = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $possibleBeginBraceIndex); + } else { + $blockEnd = $tokens->getNextTokenOfKind($possibleBeginBraceIndex, [';']); } - $blockEnd = $tokens->findBlockEnd(Tokens::BLOCK_TYPE_CURLY_BRACE, $possibleStartBraceIndex); $nextStatementIndex = $tokens->getNextMeaningfulToken($blockEnd); if ($nextStatementIndex === null) { return $blockEnd; diff --git a/tests/Fixer/Whitespace/LineBreakAfterStatementsFixerTest.php b/tests/Fixer/Whitespace/LineBreakAfterStatementsFixerTest.php index 8332031..2d98e51 100644 --- a/tests/Fixer/Whitespace/LineBreakAfterStatementsFixerTest.php +++ b/tests/Fixer/Whitespace/LineBreakAfterStatementsFixerTest.php @@ -359,6 +359,207 @@ foreach ($coordinates as $coordinate) { } ', ]; + // Issue 5 + $cases[] = [ + 'bar(); + + $a = "next statement"; + } +}', + 'bar(); + $a = "next statement"; + } +}', + ]; + $cases[] = [ + 'bar(); + else + $this->baz(); + + $a = "next statement"; + } +}', + 'bar(); + else + $this->baz(); + $a = "next statement"; + } +}', + ]; + $cases[] = [ + 'bar(); + + $a = "next statement"; + } +}', + 'bar(); + $a = "next statement"; + } +}', + ]; + $cases[] = [ + 'bar(); + + $a = "next statement"; + } +}', + 'bar(); + $a = "next statement"; + } +}', + ]; + $cases[] = [ + 'bar(); + + $a = "next statement"; + } +}', + 'bar(); + $a = "next statement"; + } +}', + ]; + $cases[] = [ + 'bar(); + while ($i < 10); + + $a = "next statement"; + } +}', + 'bar(); + while ($i < 10); + $a = "next statement"; + } +}', + ]; + $cases[] = [ + 'foo(); + else if ("a" === "c") + $this->bar(); + else if ("a" === "d") + $this->baz(); + + $a = "next statement"; + } +}', + 'foo(); + else if ("a" === "c") + $this->bar(); + else if ("a" === "d") + $this->baz(); + $a = "next statement"; + } +}', + ]; + $cases[] = [ + 'bar(); + + return 3; + } +}', + 'bar(); + return 3; + } +}', + ]; return $cases; }