diff --git a/src/Standards/Squiz/Sniffs/WhiteSpace/FunctionSpacingSniff.php b/src/Standards/Squiz/Sniffs/WhiteSpace/FunctionSpacingSniff.php index a213a94af1..8e25717e18 100644 --- a/src/Standards/Squiz/Sniffs/WhiteSpace/FunctionSpacingSniff.php +++ b/src/Standards/Squiz/Sniffs/WhiteSpace/FunctionSpacingSniff.php @@ -127,15 +127,18 @@ public function process(File $phpcsFile, $stackPtr) } // Skip past function docblocks and attributes. - $prev = $startOfDeclarationLine; + // Only the first docblock is a function docblock. Other docblocks should be disregarded. + $prev = $startOfDeclarationLine; + $seenDocblock = false; if ($startOfDeclarationLine > 0) { for ($prev = ($startOfDeclarationLine - 1); $prev > 0; $prev--) { if ($tokens[$prev]['code'] === T_WHITESPACE) { continue; } - if ($tokens[$prev]['code'] === T_DOC_COMMENT_CLOSE_TAG) { - $prev = $tokens[$prev]['comment_opener']; + if ($seenDocblock === false && $tokens[$prev]['code'] === T_DOC_COMMENT_CLOSE_TAG) { + $prev = $tokens[$prev]['comment_opener']; + $seenDocblock = true; continue; } diff --git a/src/Standards/Squiz/Tests/WhiteSpace/FunctionSpacingUnitTest.1.inc b/src/Standards/Squiz/Tests/WhiteSpace/FunctionSpacingUnitTest.1.inc index c516775cc6..83600e8738 100644 --- a/src/Standards/Squiz/Tests/WhiteSpace/FunctionSpacingUnitTest.1.inc +++ b/src/Standards/Squiz/Tests/WhiteSpace/FunctionSpacingUnitTest.1.inc @@ -726,3 +726,27 @@ class SilenceBeforeErrorIfPreviousThingWasAFunctionBug }//end blankLineDetectionB() }//end class + +// Issue #945. +class OnlyAcceptFirstDocblockAsBelongingWithFunction { + /** + * Superfluous docblock + */ + + + /** + * Function docblock + */ + function correctSpacing($x) {} + + + /** + * Superfluous docblock + */ + /** + * Function docblock + */ + function incorrectSpacing($x) {} + + +} diff --git a/src/Standards/Squiz/Tests/WhiteSpace/FunctionSpacingUnitTest.1.inc.fixed b/src/Standards/Squiz/Tests/WhiteSpace/FunctionSpacingUnitTest.1.inc.fixed index 289b2b6840..91444e7ca9 100644 --- a/src/Standards/Squiz/Tests/WhiteSpace/FunctionSpacingUnitTest.1.inc.fixed +++ b/src/Standards/Squiz/Tests/WhiteSpace/FunctionSpacingUnitTest.1.inc.fixed @@ -822,3 +822,29 @@ class SilenceBeforeErrorIfPreviousThingWasAFunctionBug }//end class + +// Issue #945. +class OnlyAcceptFirstDocblockAsBelongingWithFunction { + /** + * Superfluous docblock + */ + + + /** + * Function docblock + */ + function correctSpacing($x) {} + + + /** + * Superfluous docblock + */ + + + /** + * Function docblock + */ + function incorrectSpacing($x) {} + + +} diff --git a/src/Standards/Squiz/Tests/WhiteSpace/FunctionSpacingUnitTest.php b/src/Standards/Squiz/Tests/WhiteSpace/FunctionSpacingUnitTest.php index 7bc264a67b..a963a9a4b0 100644 --- a/src/Standards/Squiz/Tests/WhiteSpace/FunctionSpacingUnitTest.php +++ b/src/Standards/Squiz/Tests/WhiteSpace/FunctionSpacingUnitTest.php @@ -110,6 +110,7 @@ public function getErrorList($testFile='') 714 => 1, 717 => 1, 727 => 1, + 749 => 1, ]; case 'FunctionSpacingUnitTest.2.inc':